├── LatestBuild ├── Packages ├── com.silverfruity.WatchDogger_0.1-1_iphoneos-arm.deb └── com.silverfruity.WatchDogger_0.1-1_iphoneos-arm.zip ├── WatchDogger ├── Package │ ├── Library │ │ ├── PreferenceLoader │ │ │ └── Preferences │ │ │ │ ├── WatchDoggerIcon.png │ │ │ │ ├── WatchDoggerIcon@2x.png │ │ │ │ └── WatchDogger.plist │ │ └── MobileSubstrate │ │ │ └── DynamicLibraries │ │ │ ├── WatchDogger.dylib │ │ │ └── WatchDogger.plist │ └── DEBIAN │ │ └── control ├── WatchDogger-Prefix.pch ├── NSDateFormatter+ShareInstance.h ├── RBProcessHook.h ├── WatchDogger.xm ├── NormalLog.h ├── NSDateFormatter+ShareInstance.m ├── RBProcessHook.m ├── NormalLog.m ├── WatchDogger.mm ├── RBSProcessIdentity.h └── RBProcess.h ├── WatchDogger.xcodeproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── xcshareddata │ └── xcschemes │ │ └── WatchDogger.xcscheme └── project.pbxproj ├── README.md ├── LICENSE └── .gitignore /LatestBuild: -------------------------------------------------------------------------------- 1 | /Users/Memerys/Library/Developer/Xcode/DerivedData/WatchDogger-abvmwvynviuuxyexbahmdypwwiwz/Build/Products/Release-iphoneos -------------------------------------------------------------------------------- /Packages/com.silverfruity.WatchDogger_0.1-1_iphoneos-arm.deb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilverFruity/WatchDogger/HEAD/Packages/com.silverfruity.WatchDogger_0.1-1_iphoneos-arm.deb -------------------------------------------------------------------------------- /Packages/com.silverfruity.WatchDogger_0.1-1_iphoneos-arm.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilverFruity/WatchDogger/HEAD/Packages/com.silverfruity.WatchDogger_0.1-1_iphoneos-arm.zip -------------------------------------------------------------------------------- /WatchDogger/Package/Library/PreferenceLoader/Preferences/WatchDoggerIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilverFruity/WatchDogger/HEAD/WatchDogger/Package/Library/PreferenceLoader/Preferences/WatchDoggerIcon.png -------------------------------------------------------------------------------- /WatchDogger/Package/Library/MobileSubstrate/DynamicLibraries/WatchDogger.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilverFruity/WatchDogger/HEAD/WatchDogger/Package/Library/MobileSubstrate/DynamicLibraries/WatchDogger.dylib -------------------------------------------------------------------------------- /WatchDogger/Package/Library/PreferenceLoader/Preferences/WatchDoggerIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilverFruity/WatchDogger/HEAD/WatchDogger/Package/Library/PreferenceLoader/Preferences/WatchDoggerIcon@2x.png -------------------------------------------------------------------------------- /WatchDogger.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /WatchDogger/WatchDogger-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'WatchDogger' target in the 'WatchDogger' project 3 | // 4 | 5 | #ifdef __OBJC__ 6 | #import 7 | #import "/opt/theos/Prefix.pch" //path/to/theos/Prefix.pch 8 | #endif 9 | -------------------------------------------------------------------------------- /WatchDogger.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /WatchDogger/Package/DEBIAN/control: -------------------------------------------------------------------------------- 1 | Package: com.silverfruity.WatchDogger 2 | Name: WatchDogger 3 | Version: 0.1-1 4 | Description: 5 | Section: System 6 | Depends: firmware (>= 5.0), mobilesubstrate 7 | Conflicts: 8 | Replaces: 9 | Priority: optional 10 | Architecture: iphoneos-arm 11 | Author: SilverFruity 12 | dev: 13 | Homepage: 14 | Depiction: 15 | Maintainer: 16 | Icon: 17 | 18 | -------------------------------------------------------------------------------- /WatchDogger/Package/Library/MobileSubstrate/DynamicLibraries/WatchDogger.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Filter 6 | 7 | Executables 8 | 9 | runningboardd 10 | 11 | Bundles 12 | 13 | com.apple.preferences 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /WatchDogger/NSDateFormatter+ShareInstance.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSFormatter+shareInstance.h 3 | // One Night Flirt 4 | // 5 | // Created by wudi on 2017/12/18. 6 | // Copyright © 2017年 wudi360. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSDateFormatter (ShareInstance) 12 | + (__kindof NSDateFormatter *)shareInstance; 13 | + (NSString *)dateString:(NSString *)dateFormat date:(NSDate *)date; 14 | + (NSDate *)date:(NSString *)dateFormat dateString:(NSString *)dateString; 15 | + (NSString *)current:(NSString *)dateFormat; 16 | @end 17 | -------------------------------------------------------------------------------- /WatchDogger/RBProcessHook.h: -------------------------------------------------------------------------------- 1 | // 2 | // RBProcessHook.h 3 | // TMallTweak 4 | // 5 | // Created by Jiang on 2020/2/20. 6 | // 7 | 8 | #import 9 | #import "RBProcess.h" 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | @interface RBProcessHook : NSObject 13 | @property (nonatomic, copy)NSDictionary *settingCache; 14 | + (instancetype)shareInstacne; 15 | - (void)reloadSettingCache; 16 | - (BOOL)should_lock_resume:(RBProcess *)process; 17 | - (BOOL)should_lock_suspend:(RBProcess *)process; 18 | - (BOOL)should_lock_terminate:(RBProcess *)process; 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # WatchDogger 2 | ## Core 3 | 4 | **Add 'Executables -> runningboardd' in plist** 5 | 6 | **remember 'killall runningboardd'** 7 | ```objective-c 8 | // please include RBProcess.h and RBSProcessIdentity.h. the project has inlcude those files. 9 | %hook RBProcess 10 | - (void)_lock_suspend{ 11 | if ([self.identity.embeddedApplicationIdentifier isEqualToString:@"your bundleId"]) { 12 | return; 13 | } 14 | %orig; 15 | } 16 | - (void)_lock_resume{ 17 | %orig; 18 | } 19 | - (_Bool)_lock_terminateWithContext:(id)arg1{ 20 | return %orig; 21 | } 22 | %end 23 | ``` 24 | 25 | ## Preview 26 | 27 | ![Setting](https://user-gold-cdn.xitu.io/2020/2/22/1706914347056280?imageslim) 28 | -------------------------------------------------------------------------------- /WatchDogger/WatchDogger.xm: -------------------------------------------------------------------------------- 1 | // See http://iphonedevwiki.net/index.php/Logos 2 | 3 | #if TARGET_OS_SIMULATOR 4 | #error Do not support the simulator, please use the real iPhone Device. 5 | #endif 6 | 7 | #import 8 | #import "RBProcessHook.h" 9 | %hook RBProcess 10 | - (void)_lock_suspend{ 11 | if ([[RBProcessHook shareInstacne] should_lock_suspend:self]){ 12 | %orig; 13 | } 14 | } 15 | - (void)_lock_resume{ 16 | if ([[RBProcessHook shareInstacne] should_lock_resume:self]){ 17 | %orig; 18 | } 19 | } 20 | - (_Bool)_lock_terminateWithContext:(id)arg1{ 21 | if ([[RBProcessHook shareInstacne] should_lock_terminate:self]){ 22 | return %orig; 23 | } 24 | return NO; 25 | } 26 | %end 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Silver 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 | -------------------------------------------------------------------------------- /WatchDogger/NormalLog.h: -------------------------------------------------------------------------------- 1 | // 2 | // Log.h 3 | // TweakDemo 4 | // 5 | // Created by jiang on 2018/6/7. 6 | // 7 | 8 | #import 9 | #if DEBUG 10 | #define LOG_PATH @"/var/mobile/Documents/" 11 | #define ProcessLog(value,...) CLog(@"RBProcess.log",value,##__VA_ARGS__) 12 | 13 | #define CLog(filename,value,...) Log(filename,nil,__FILE__,"",__LINE__,value,##__VA_ARGS__) 14 | #define FLog(filename,value,...) Log(filename,nil,__FILE__,__func__,__LINE__,value,##__VA_ARGS__) 15 | #define DLog(filename,domain,value,...) Log(filename,domain,__FILE__,__func__,__LINE__,value,##__VA_ARGS__) 16 | 17 | //#define SLog(value,...) \ 18 | // if ([APPSTORE_BUNDLE_ID isEqualToString:APPSTORE_BUNDLE_ID]) {\ 19 | // \ 20 | // }else if ([APPSTORE_BUNDLE_ID isEqualToString:SPRINGBOARD_BUNDLE_ID]){\ 21 | // CLog(value,##__VA_ARGS__);\ 22 | // }\ 23 | // CLog(value,##__VA_ARGS__) 24 | 25 | extern void Log(NSString *filename,id domain,const char file[],const char funcname[],int line,id value,...); 26 | extern void NLCleaerLog(void); 27 | 28 | #else 29 | 30 | #define ProcessLog(value,...) 31 | 32 | #endif 33 | -------------------------------------------------------------------------------- /WatchDogger/NSDateFormatter+ShareInstance.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSFormatter+shareInstance.m 3 | // One Night Flirt 4 | // 5 | // Created by wudi on 2017/12/18. 6 | // Copyright © 2017年 wudi360. All rights reserved. 7 | // 8 | 9 | #import "NSDateFormatter+ShareInstance.h" 10 | #if DEBUG 11 | @implementation NSDateFormatter (ShareInstance) 12 | + (instancetype)shareInstance{ 13 | static NSDateFormatter *NSFormatterInstance = nil; 14 | static dispatch_once_t onceToken; 15 | dispatch_once(&onceToken, ^{ 16 | NSFormatterInstance = [[NSDateFormatter alloc]init]; 17 | }); 18 | return NSFormatterInstance; 19 | } 20 | + (NSString *)current:(NSString *)dateFormat{ 21 | return [self dateString:dateFormat date:[NSDate date]]; 22 | } 23 | + (NSString *)dateString:(NSString *)dateFormat date:(NSDate *)date{ 24 | [self shareInstance].dateFormat = dateFormat; 25 | return [[self shareInstance] stringFromDate:date]; 26 | } 27 | 28 | + (NSDate *)date:(NSString *)dateFormat dateString:(NSString *)dateString{ 29 | [self shareInstance].dateFormat = dateFormat; 30 | return [[self shareInstance] dateFromString:dateString]; 31 | } 32 | 33 | @end 34 | #endif 35 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## User settings 6 | xcuserdata/ 7 | 8 | ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) 9 | *.xcscmblueprint 10 | *.xccheckout 11 | 12 | ## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) 13 | build/ 14 | DerivedData/ 15 | *.moved-aside 16 | *.pbxuser 17 | !default.pbxuser 18 | *.mode1v3 19 | !default.mode1v3 20 | *.mode2v3 21 | !default.mode2v3 22 | *.perspectivev3 23 | !default.perspectivev3 24 | 25 | ## Obj-C/Swift specific 26 | *.hmap 27 | 28 | ## App packaging 29 | *.ipa 30 | *.dSYM.zip 31 | *.dSYM 32 | 33 | # CocoaPods 34 | # 35 | # We recommend against adding the Pods directory to your .gitignore. However 36 | # you should judge for yourself, the pros and cons are mentioned at: 37 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 38 | # 39 | # Pods/ 40 | # 41 | # Add this line if you want to avoid checking in source code from the Xcode workspace 42 | # *.xcworkspace 43 | 44 | # Carthage 45 | # 46 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 47 | # Carthage/Checkouts 48 | 49 | Carthage/Build/ 50 | 51 | # fastlane 52 | # 53 | # It is recommended to not store the screenshots in the git repo. 54 | # Instead, use fastlane to re-generate the screenshots whenever they are needed. 55 | # For more information about the recommended setup visit: 56 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 57 | 58 | fastlane/report.xml 59 | fastlane/Preview.html 60 | fastlane/screenshots/**/*.png 61 | fastlane/test_output 62 | 63 | # Code Injection 64 | # 65 | # After new code Injection tools there's a generated folder /iOSInjectionProject 66 | # https://github.com/johnno1962/injectionforxcode 67 | 68 | iOSInjectionProject/ 69 | -------------------------------------------------------------------------------- /WatchDogger/RBProcessHook.m: -------------------------------------------------------------------------------- 1 | // 2 | // RBProcessHook.m 3 | // TMallTweak 4 | // 5 | // Created by Jiang on 2020/2/20. 6 | // 7 | 8 | #import "RBProcessHook.h" 9 | #import 10 | #import "NormalLog.h" 11 | static void RefreshCache(void) 12 | { 13 | ProcessLog(@"backGround setting value changed"); 14 | [[RBProcessHook shareInstacne] reloadSettingCache]; 15 | } 16 | 17 | @implementation RBProcessHook 18 | + (instancetype)shareInstacne{ 19 | static dispatch_once_t onceToken; 20 | static RBProcessHook *instance = nil; 21 | dispatch_once(&onceToken, ^{ 22 | ProcessLog(@"new shareInstacne pid: %ld", getpid()); 23 | instance = [RBProcessHook new]; 24 | [instance reloadSettingCache]; 25 | CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, (void *)RefreshCache, CFSTR("com.silverfruity.watchdogger.settingschanged"), NULL, CFNotificationSuspensionBehaviorCoalesce); 26 | }); 27 | return instance; 28 | } 29 | - (void)dealloc{ 30 | ProcessLog(@"remove Observer"); 31 | CFNotificationCenterRemoveObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, CFSTR("com.silverfruity.watchdogger.settingschanged"), NULL); 32 | } 33 | - (void)reloadSettingCache{ 34 | self.settingCache = [NSDictionary dictionaryWithContentsOfFile:@"/var/mobile/Library/Preferences/com.silverfruity.WatchDogger.plist"]; 35 | } 36 | - (BOOL)should_lock_resume:(RBProcess *)process{ 37 | return YES; 38 | } 39 | - (BOOL)should_lock_suspend:(RBProcess *)process{ 40 | NSString *key = [@"WatchDoggerSuperEnabled-" stringByAppendingString:process.identity.embeddedApplicationIdentifier]; 41 | BOOL shouldInBackGround = [self.settingCache[key] boolValue]; 42 | if (shouldInBackGround){ 43 | ProcessLog(@"%@ will run in background",process.identity); 44 | } 45 | return !shouldInBackGround; 46 | } 47 | - (BOOL)should_lock_terminate:(RBProcess *)process{ 48 | ProcessLog(@"should_lock_terminate"); 49 | return YES; 50 | } 51 | @end 52 | -------------------------------------------------------------------------------- /WatchDogger/NormalLog.m: -------------------------------------------------------------------------------- 1 | // 2 | // Log.m 3 | // TweakDemo 4 | // 5 | // Created by jiang on 2018/6/7. 6 | // 7 | 8 | #import "NormalLog.h" 9 | #import "NSDateFormatter+ShareInstance.h" 10 | #if DEBUG 11 | void Log(NSString *logfilename,id domain,const char file[],const char funcname[],int line,id value,...){ 12 | static dispatch_queue_t logQueue = nil; 13 | static dispatch_once_t onceToken; 14 | dispatch_once(&onceToken, ^{ 15 | logQueue = dispatch_queue_create("LogQueue", DISPATCH_QUEUE_SERIAL); 16 | }); 17 | if ([value isKindOfClass:[NSString class]]) { 18 | va_list ap; 19 | va_start(ap,value); 20 | value = [[NSString alloc] initWithFormat:(NSString *)value arguments:ap]; 21 | va_end(ap); 22 | } 23 | NSString *info = nil; 24 | NSString *dateStr = [NSDateFormatter current:@"yyyy-MM-dd hh:mm:ss"]; 25 | NSString *filename = [NSString stringWithUTF8String:file]; 26 | filename = [filename componentsSeparatedByString:@"/"].lastObject; 27 | if (domain == nil){ 28 | info = [NSString stringWithFormat:@"%@ %@ %s [%d行]: %@\n", dateStr,filename,funcname,line,value]; 29 | }else{ 30 | info = [NSString stringWithFormat:@"%@ %@ %s [%d行]: %@ >> %@\n", dateStr,filename,funcname,line,domain,value]; 31 | } 32 | 33 | NSData *buffer = [info dataUsingEncoding:NSUTF8StringEncoding]; 34 | 35 | dispatch_async(logQueue, ^{ 36 | NSFileManager *fileManager = [NSFileManager defaultManager]; 37 | NSString *filePath = [LOG_PATH stringByAppendingString:logfilename] ; 38 | 39 | if (![fileManager fileExistsAtPath:filePath]) { 40 | if(![fileManager createFileAtPath:filePath contents:buffer attributes:nil]){ 41 | NSLog(@"%@",info); 42 | } 43 | return; 44 | } 45 | NSFileHandle *outFile = [NSFileHandle fileHandleForWritingAtPath:filePath]; 46 | if(outFile != nil) { 47 | [outFile seekToEndOfFile]; 48 | [outFile writeData:buffer]; 49 | [outFile closeFile]; 50 | } 51 | }); 52 | 53 | } 54 | void NLCleaerLog(void){ 55 | NSFileManager *fileManager = [NSFileManager defaultManager]; 56 | NSString *filePath = LOG_PATH; 57 | if ([fileManager fileExistsAtPath:filePath]) { 58 | [fileManager removeItemAtPath:filePath error:nil]; 59 | } 60 | } 61 | #endif 62 | -------------------------------------------------------------------------------- /WatchDogger.xcodeproj/xcshareddata/xcschemes/WatchDogger.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 50 | 51 | 57 | 58 | 59 | 60 | 62 | 63 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /WatchDogger/Package/Library/PreferenceLoader/Preferences/WatchDogger.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | entry 6 | 7 | cell 8 | PSLinkCell 9 | icon 10 | WatchDoggerIcon.png 11 | label 12 | WatchDogger 13 | 14 | items 15 | 16 | 17 | cell 18 | PSGroupCell 19 | isStaticText 20 | 21 | label 22 | Let's go 23 | 24 | 25 | ALChangeNotification 26 | com.silverfruity.watchdogger.settingschanged 27 | ALSectionDescriptors 28 | 29 | 30 | footer-title 31 | Select with applications to keep running in background 32 | items 33 | 34 | 35 | 36 | icon-size 37 | 29 38 | cell-class-name 39 | ALSwitchCell 40 | suppress-hidden-apps 41 | 42 | predicate 43 | isSystemApplication = FALSE 44 | title 45 | User Applications 46 | 47 | 48 | title 49 | System Applications 50 | icon-size 51 | 29 52 | predicate 53 | isSystemApplication = TRUE AND NOT (displayIdentifier IN {'com.iptm.bigboss.sbsettings', 'com.booleanmagic.overboard', 'eu.heinelt.ifile'}) 54 | suppress-hidden-apps 55 | 56 | cell-class-name 57 | ALSwitchCell 58 | 59 | 60 | ALSettingsDefaultValue 61 | 62 | ALSettingsKeyPrefix 63 | WatchDoggerSuperEnabled- 64 | ALAllowsSelection 65 | 66 | ALSettingsPath 67 | /var/mobile/Library/Preferences/com.silverfruity.WatchDogger.plist 68 | isController 69 | 70 | bundle 71 | AppList 72 | cell 73 | PSLinkCell 74 | label 75 | Enabled Applications 76 | 77 | 78 | cell 79 | PSGroupCell 80 | footerText 81 | You can run any app always in background and no count limist. But it only for iOS 13 - iOS 13.3.1 . Thank for using. 82 | 83 | 84 | title 85 | WatchDogger 86 | 87 | 88 | -------------------------------------------------------------------------------- /WatchDogger/WatchDogger.mm: -------------------------------------------------------------------------------- 1 | #line 1 "/Users/Memerys/WatchDogger/WatchDogger/WatchDogger.xm" 2 | 3 | 4 | #if TARGET_OS_SIMULATOR 5 | #error Do not support the simulator, please use the real iPhone Device. 6 | #endif 7 | 8 | 9 | #include 10 | #if defined(__clang__) 11 | #if __has_feature(objc_arc) 12 | #define _LOGOS_SELF_TYPE_NORMAL __unsafe_unretained 13 | #define _LOGOS_SELF_TYPE_INIT __attribute__((ns_consumed)) 14 | #define _LOGOS_SELF_CONST const 15 | #define _LOGOS_RETURN_RETAINED __attribute__((ns_returns_retained)) 16 | #else 17 | #define _LOGOS_SELF_TYPE_NORMAL 18 | #define _LOGOS_SELF_TYPE_INIT 19 | #define _LOGOS_SELF_CONST 20 | #define _LOGOS_RETURN_RETAINED 21 | #endif 22 | #else 23 | #define _LOGOS_SELF_TYPE_NORMAL 24 | #define _LOGOS_SELF_TYPE_INIT 25 | #define _LOGOS_SELF_CONST 26 | #define _LOGOS_RETURN_RETAINED 27 | #endif 28 | 29 | @class RBProcess; 30 | static void (*_logos_orig$_ungrouped$RBProcess$_lock_suspend)(_LOGOS_SELF_TYPE_NORMAL RBProcess* _LOGOS_SELF_CONST, SEL); static void _logos_method$_ungrouped$RBProcess$_lock_suspend(_LOGOS_SELF_TYPE_NORMAL RBProcess* _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$RBProcess$_lock_resume)(_LOGOS_SELF_TYPE_NORMAL RBProcess* _LOGOS_SELF_CONST, SEL); static void _logos_method$_ungrouped$RBProcess$_lock_resume(_LOGOS_SELF_TYPE_NORMAL RBProcess* _LOGOS_SELF_CONST, SEL); static _Bool (*_logos_orig$_ungrouped$RBProcess$_lock_terminateWithContext$)(_LOGOS_SELF_TYPE_NORMAL RBProcess* _LOGOS_SELF_CONST, SEL, id); static _Bool _logos_method$_ungrouped$RBProcess$_lock_terminateWithContext$(_LOGOS_SELF_TYPE_NORMAL RBProcess* _LOGOS_SELF_CONST, SEL, id); 31 | 32 | #line 7 "/Users/Memerys/WatchDogger/WatchDogger/WatchDogger.xm" 33 | #import 34 | #import "RBProcessHook.h" 35 | 36 | static void _logos_method$_ungrouped$RBProcess$_lock_suspend(_LOGOS_SELF_TYPE_NORMAL RBProcess* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd){ 37 | if ([[RBProcessHook shareInstacne] should_lock_suspend:self]){ 38 | _logos_orig$_ungrouped$RBProcess$_lock_suspend(self, _cmd); 39 | } 40 | } 41 | static void _logos_method$_ungrouped$RBProcess$_lock_resume(_LOGOS_SELF_TYPE_NORMAL RBProcess* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd){ 42 | if ([[RBProcessHook shareInstacne] should_lock_resume:self]){ 43 | _logos_orig$_ungrouped$RBProcess$_lock_resume(self, _cmd); 44 | } 45 | } 46 | static _Bool _logos_method$_ungrouped$RBProcess$_lock_terminateWithContext$(_LOGOS_SELF_TYPE_NORMAL RBProcess* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd, id arg1){ 47 | if ([[RBProcessHook shareInstacne] should_lock_terminate:self]){ 48 | return _logos_orig$_ungrouped$RBProcess$_lock_terminateWithContext$(self, _cmd, arg1); 49 | } 50 | return NO; 51 | } 52 | 53 | static __attribute__((constructor)) void _logosLocalInit() { 54 | {Class _logos_class$_ungrouped$RBProcess = objc_getClass("RBProcess"); MSHookMessageEx(_logos_class$_ungrouped$RBProcess, @selector(_lock_suspend), (IMP)&_logos_method$_ungrouped$RBProcess$_lock_suspend, (IMP*)&_logos_orig$_ungrouped$RBProcess$_lock_suspend);MSHookMessageEx(_logos_class$_ungrouped$RBProcess, @selector(_lock_resume), (IMP)&_logos_method$_ungrouped$RBProcess$_lock_resume, (IMP*)&_logos_orig$_ungrouped$RBProcess$_lock_resume);MSHookMessageEx(_logos_class$_ungrouped$RBProcess, @selector(_lock_terminateWithContext:), (IMP)&_logos_method$_ungrouped$RBProcess$_lock_terminateWithContext$, (IMP*)&_logos_orig$_ungrouped$RBProcess$_lock_terminateWithContext$);} } 55 | #line 27 "/Users/Memerys/WatchDogger/WatchDogger/WatchDogger.xm" 56 | -------------------------------------------------------------------------------- /WatchDogger/RBSProcessIdentity.h: -------------------------------------------------------------------------------- 1 | // 2 | // Generated by class-dump 3.5 (64 bit) (Debug version compiled Oct 15 2018 10:31:50). 3 | // 4 | // class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2015 by Steve Nygard. 5 | // 6 | 7 | #import 8 | 9 | @protocol BSDescriptionProviding, BSXPCSecureCoding, RBSProcessMatching; 10 | @class NSString, RBSProcessIdentifier, RBSXPCServiceIdentity; 11 | 12 | @interface RBSProcessIdentity : NSObject 13 | { 14 | unsigned long long _hash; 15 | int _instanceID; 16 | unsigned char _type; 17 | RBSXPCServiceIdentity *_serviceIdentity; 18 | unsigned int _euid; 19 | NSString *_executablePath; 20 | NSString *_picoDesc; 21 | NSString *_description; 22 | NSString *_embeddedApplicationIdentifier; 23 | NSString *_daemonJobLabel; 24 | } 25 | 26 | + (_Bool)supportsBSXPCSecureCoding; 27 | + (_Bool)supportsSecureCoding; 28 | + (id)_identityForXPCServicePath:(id)arg1 properties:(id)arg2 pid:(int)arg3 euid:(unsigned int)arg4 host:(id)arg5; 29 | + (id)identityForXPCServiceProperties:(id)arg1 pid:(int)arg2 euid:(unsigned int)arg3 host:(id)arg4; 30 | + (id)identityForXPCServicePath:(id)arg1 host:(id)arg2; 31 | + (id)identityForXPCServiceIdentifier:(id)arg1; 32 | + (id)identityForExecutablePath:(id)arg1 pid:(int)arg2 euid:(unsigned int)arg3; 33 | + (id)identityForLaunchProperties:(id)arg1 pid:(int)arg2 euid:(unsigned int)arg3; 34 | + (id)identityForDaemonPlistPath:(id)arg1; 35 | + (id)identityForDaemonJobLabel:(id)arg1; 36 | + (id)identityForEmbeddedApplicationIdentifier:(id)arg1 euid:(unsigned int)arg2; 37 | + (id)identityForEmbeddedApplicationIdentifier:(id)arg1; 38 | + (id)identityOfCurrentProcess; 39 | @property(readonly, copy, nonatomic) NSString *daemonJobLabel; // @synthesize daemonJobLabel=_daemonJobLabel; 40 | @property(readonly, copy, nonatomic) NSString *embeddedApplicationIdentifier; // @synthesize embeddedApplicationIdentifier=_embeddedApplicationIdentifier; 41 | @property(readonly, copy) NSString *description; // @synthesize description=_description; 42 | @property(readonly, nonatomic) NSString *picoDesc; // @synthesize picoDesc=_picoDesc; 43 | @property(readonly, copy, nonatomic) NSString *executablePath; // @synthesize executablePath=_executablePath; 44 | - (id)copyWithZone:(struct _NSZone *)arg1; 45 | - (id)initWithBSXPCCoder:(id)arg1; 46 | - (void)encodeWithBSXPCCoder:(id)arg1; 47 | - (id)initWithCoder:(id)arg1; 48 | - (void)encodeWithCoder:(id)arg1; 49 | - (id)descriptionBuilderWithMultilinePrefix:(id)arg1; 50 | - (id)descriptionWithMultilinePrefix:(id)arg1; 51 | - (id)succinctDescriptionBuilder; 52 | - (id)succinctDescription; 53 | @property(readonly, copy) NSString *debugDescription; 54 | - (_Bool)isEqualToIdentity:(id)arg1; 55 | - (_Bool)isEqual:(id)arg1; 56 | @property(readonly) unsigned long long hash; 57 | @property(readonly, nonatomic) _Bool inheritsCoalitionBand; 58 | - (_Bool)_matchesIdentity:(id)arg1; 59 | - (id)processPredicate; 60 | - (_Bool)matchesProcess:(id)arg1; 61 | @property(readonly, nonatomic) unsigned int euid; // @synthesize euid=_euid; 62 | @property(readonly, copy, nonatomic) RBSProcessIdentifier *hostIdentifier; 63 | @property(readonly, copy, nonatomic) RBSProcessIdentity *hostIdentity; 64 | @property(readonly, nonatomic, getter=isDaemon) _Bool daemon; 65 | @property(readonly, copy, nonatomic) NSString *xpcServiceIdentifier; 66 | @property(readonly, nonatomic, getter=isXPCService) _Bool XPCService; 67 | @property(readonly, nonatomic, getter=isEmbeddedApplication) _Bool embeddedApplication; 68 | - (_Bool)isAnonymousExecutable; 69 | @property(readonly, nonatomic, getter=isDefaultManaged) _Bool defaultManaged; 70 | @property(readonly, nonatomic, getter=isExtension) _Bool extension; 71 | - (id)copyWithEuid:(unsigned int)arg1; 72 | - (id)_initWithEmbeddedApplicationID:(id)arg1 xpcServiceID:(id)arg2 daemonJobLabel:(id)arg3 executablePath:(id)arg4 instanceID:(int)arg5 euid:(unsigned int)arg6; 73 | - (void)_initPicoDesc; 74 | - (id)init; 75 | 76 | // Remaining properties 77 | @property(readonly) Class superclass; 78 | 79 | @end 80 | 81 | -------------------------------------------------------------------------------- /WatchDogger/RBProcess.h: -------------------------------------------------------------------------------- 1 | // 2 | // Generated by class-dump 3.5 (64 bit) (Debug version compiled Oct 15 2018 10:31:50). 3 | // 4 | // class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2015 by Steve Nygard. 5 | // 6 | 7 | #import 8 | #import 9 | #import "RBSProcessIdentity.h" 10 | 11 | @class BSAuditToken, BSMachPortTaskNameRight, NSString, RBLaunchdJob, RBProcessState, RBSProcessExitContext, RBSProcessExitStatus, RBSProcessHandle, RBSProcessIdentifier, RBSProcessIdentity, RBSProcessInstance; 12 | @protocol OS_dispatch_source, RBBundleProperties, RBJetsamBandProviding, RBSProcessIdentifier, BSDescriptionProviding; 13 | 14 | @interface RBProcess : NSObject 15 | { 16 | int _pid; 17 | RBLaunchdJob *_job; 18 | RBSProcessIdentity *_identity; 19 | RBSProcessHandle *_handle; 20 | BSMachPortTaskNameRight *_taskNameRight; 21 | NSString *_logProem; 22 | id _jetsamProvider; 23 | RBProcess *_hostProcess; 24 | struct os_unfair_lock_s _lock; 25 | RBProcessState *_lock_appliedState; 26 | RBProcessState *_lock_state; 27 | int _appliedJetsamPriority; 28 | _Bool _platformBinary; 29 | _Bool _usesSocketMonitoring; 30 | _Bool _systemPreventsIdleSleep; 31 | unsigned char _manageFlags; 32 | NSObject *_procSource; 33 | double _cachedProcessStartTime; 34 | _Bool _systemShell; 35 | _Bool _terminating; 36 | _Bool _suspended; 37 | int _requestedJetsamPriority; 38 | RBSProcessIdentifier *_identifier; 39 | RBSProcessInstance *_instance; 40 | RBSProcessExitContext *_lastExitContext; 41 | RBSProcessExitStatus *_intendedExitStatus; 42 | id _bundleProperties; 43 | BSAuditToken *_auditToken; 44 | NSString *_underlyingAssertion; 45 | double _processStartTime; 46 | } 47 | 48 | @property(readonly, nonatomic) NSString *underlyingAssertion; // @synthesize underlyingAssertion=_underlyingAssertion; 49 | @property(readonly, nonatomic, getter=isSuspended) _Bool suspended; // @synthesize suspended=_suspended; 50 | @property(nonatomic, getter=isTerminating) _Bool terminating; // @synthesize terminating=_terminating; 51 | @property(readonly, nonatomic, getter=isSystemShell) _Bool systemShell; // @synthesize systemShell=_systemShell; 52 | @property(readonly, nonatomic) int requestedJetsamPriority; // @synthesize requestedJetsamPriority=_requestedJetsamPriority; 53 | @property(readonly, copy, nonatomic) BSAuditToken *auditToken; // @synthesize auditToken=_auditToken; 54 | @property(readonly, nonatomic) RBProcess *hostProcess; // @synthesize hostProcess=_hostProcess; 55 | @property(readonly, nonatomic, getter=isPlatformBinary) _Bool platformBinary; // @synthesize platformBinary=_platformBinary; 56 | @property(readonly, nonatomic) id bundleProperties; // @synthesize bundleProperties=_bundleProperties; 57 | @property(readonly, nonatomic) RBLaunchdJob *job; // @synthesize job=_job; 58 | @property(copy, nonatomic) RBSProcessExitStatus *intendedExitStatus; // @synthesize intendedExitStatus=_intendedExitStatus; 59 | @property(readonly, copy, nonatomic) RBSProcessHandle *handle; // @synthesize handle=_handle; 60 | @property(readonly, nonatomic) NSString *logProem; // @synthesize logProem=_logProem; 61 | @property(readonly, copy, nonatomic) RBSProcessInstance *instance; // @synthesize instance=_instance; 62 | @property(readonly, copy, nonatomic) RBSProcessIdentity *identity; // @synthesize identity=_identity; 63 | @property(readonly, copy, nonatomic) RBSProcessIdentifier *identifier; // @synthesize identifier=_identifier; 64 | - (id)descriptionBuilderWithMultilinePrefix:(id)arg1; 65 | - (id)descriptionWithMultilinePrefix:(id)arg1; 66 | - (id)succinctDescriptionBuilder; 67 | - (id)succinctDescription; 68 | @property(readonly, copy) NSString *description; 69 | - (id)processPredicate; 70 | - (_Bool)matchesProcess:(id)arg1; 71 | - (int)rbs_pid; 72 | - (void)invokeHandlerOnProcessDeath:(void (^)(id))arg1 onQueue:(id)arg2; 73 | - (id)_lock_allowedLockedFilePaths; 74 | - (id)_lock_lockedFilePathsIgnoringAllowed; 75 | - (void)_lock_applyCPULimits; 76 | - (void)_lock_resumeCPUMonitoring; 77 | - (void)_lock_restoreCPULimitDefaults; 78 | - (void)_lock_disableCPULimits; 79 | - (void)_lock_setCPULimits:(int *)arg1 violationPolicy:(unsigned long long)arg2; 80 | - (void)_lock_applyJetsamPriority; 81 | - (void)_lock_applyGPU; 82 | - (void)_lock_applyRole; 83 | - (void)_applyJetsamLenientModeState:(_Bool)arg1; 84 | - (void)_lock_applyJetsamLenientMode; 85 | - (void)_lock_shutdownSockets; 86 | - (void)_lock_resume; 87 | - (void)_lock_suspend; 88 | - (void)_lock_applyCurrentStateIfPossible; 89 | - (_Bool)_sendSignal:(int)arg1; 90 | - (_Bool)_lock_terminateWithContext:(id)arg1; 91 | - (_Bool)terminateWithContext:(id)arg1; 92 | - (void)_applyState:(id)arg1; 93 | - (void)invalidate; 94 | @property(readonly, nonatomic) int currentJetsamPriority; 95 | @property(readonly, copy, nonatomic) RBSProcessExitContext *lastExitContext; // @synthesize lastExitContext=_lastExitContext; 96 | - (void)_systemPreventIdleSleepStateDidChange:(_Bool)arg1; 97 | @property(readonly, nonatomic, getter=isBeingPtraced) _Bool beingPtraced; 98 | @property(readonly, nonatomic, getter=isLifecycleManaged) _Bool lifecycleManaged; 99 | @property(readonly, nonatomic, getter=isReported) _Bool reported; 100 | @property(readonly, nonatomic) double processStartTime; // @synthesize processStartTime=_processStartTime; 101 | - (id)_initWithInstance:(id)arg1 taskNameRight:(id)arg2 job:(id)arg3 bundleProperties:(id)arg4 jetsamBandProvider:(id)arg5 initialState:(id)arg6 hostProcess:(id)arg7 properties:(id)arg8 systemPreventsIdleSleep:(_Bool)arg9; 102 | - (id)init; 103 | 104 | // Remaining properties 105 | @property(readonly, copy) NSString *debugDescription; 106 | @property(readonly) unsigned long long hash; 107 | @property(readonly) Class superclass; 108 | 109 | @end 110 | -------------------------------------------------------------------------------- /WatchDogger.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1BCEBA3124002EC000AC62E1 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1BCEBA3024002EC000AC62E1 /* UIKit.framework */; }; 11 | 1BCEBA3324002EC000AC62E1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1BCEBA3224002EC000AC62E1 /* Foundation.framework */; }; 12 | 1BCEBA3524002EC000AC62E1 /* CydiaSubstrate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1BCEBA3424002EC000AC62E1 /* CydiaSubstrate.framework */; }; 13 | 1BCEBA4424002EC000AC62E1 /* WatchDogger.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1BCEBA4324002EC000AC62E1 /* WatchDogger.mm */; }; 14 | 1BCEBA4F2400356600AC62E1 /* RBSProcessIdentity.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BCEBA4D2400356500AC62E1 /* RBSProcessIdentity.h */; }; 15 | 1BCEBA502400356600AC62E1 /* RBProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BCEBA4E2400356500AC62E1 /* RBProcess.h */; }; 16 | 1BCEBA532400357400AC62E1 /* RBProcessHook.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BCEBA512400357300AC62E1 /* RBProcessHook.m */; }; 17 | 1BCEBA542400357400AC62E1 /* RBProcessHook.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BCEBA522400357400AC62E1 /* RBProcessHook.h */; }; 18 | 1BCEBA5724003F2A00AC62E1 /* NormalLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BCEBA5524003F2900AC62E1 /* NormalLog.h */; }; 19 | 1BCEBA5824003F2A00AC62E1 /* NormalLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BCEBA5624003F2A00AC62E1 /* NormalLog.m */; }; 20 | 1BCEBA5B2400403D00AC62E1 /* NSDateFormatter+ShareInstance.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BCEBA592400403D00AC62E1 /* NSDateFormatter+ShareInstance.m */; }; 21 | 1BCEBA5C2400403D00AC62E1 /* NSDateFormatter+ShareInstance.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BCEBA5A2400403D00AC62E1 /* NSDateFormatter+ShareInstance.h */; }; 22 | /* End PBXBuildFile section */ 23 | 24 | /* Begin PBXFileReference section */ 25 | 1BCEBA2D24002EC000AC62E1 /* WatchDogger.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = WatchDogger.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; 26 | 1BCEBA3024002EC000AC62E1 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 27 | 1BCEBA3224002EC000AC62E1 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 28 | 1BCEBA3424002EC000AC62E1 /* CydiaSubstrate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CydiaSubstrate.framework; path = Library/Frameworks/CydiaSubstrate.framework; sourceTree = DEVELOPER_DIR; }; 29 | 1BCEBA3924002EC000AC62E1 /* control */ = {isa = PBXFileReference; lastKnownFileType = text; path = control; sourceTree = ""; }; 30 | 1BCEBA3D24002EC000AC62E1 /* WatchDogger.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = WatchDogger.plist; sourceTree = ""; }; 31 | 1BCEBA3E24002EC000AC62E1 /* WatchDoggerIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = WatchDoggerIcon.png; sourceTree = ""; }; 32 | 1BCEBA3F24002EC000AC62E1 /* WatchDoggerIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "WatchDoggerIcon@2x.png"; sourceTree = ""; }; 33 | 1BCEBA4124002EC000AC62E1 /* WatchDogger-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "WatchDogger-Prefix.pch"; path = "../WatchDogger-Prefix.pch"; sourceTree = ""; }; 34 | 1BCEBA4224002EC000AC62E1 /* WatchDogger.xm */ = {isa = PBXFileReference; lastKnownFileType = text; path = WatchDogger.xm; sourceTree = ""; }; 35 | 1BCEBA4324002EC000AC62E1 /* WatchDogger.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = WatchDogger.mm; sourceTree = ""; }; 36 | 1BCEBA4724002EC000AC62E1 /* WatchDogger.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = WatchDogger.plist; sourceTree = ""; }; 37 | 1BCEBA4D2400356500AC62E1 /* RBSProcessIdentity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RBSProcessIdentity.h; sourceTree = ""; }; 38 | 1BCEBA4E2400356500AC62E1 /* RBProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RBProcess.h; sourceTree = ""; }; 39 | 1BCEBA512400357300AC62E1 /* RBProcessHook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RBProcessHook.m; sourceTree = ""; }; 40 | 1BCEBA522400357400AC62E1 /* RBProcessHook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RBProcessHook.h; sourceTree = ""; }; 41 | 1BCEBA5524003F2900AC62E1 /* NormalLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NormalLog.h; sourceTree = ""; }; 42 | 1BCEBA5624003F2A00AC62E1 /* NormalLog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NormalLog.m; sourceTree = ""; }; 43 | 1BCEBA592400403D00AC62E1 /* NSDateFormatter+ShareInstance.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDateFormatter+ShareInstance.m"; sourceTree = ""; }; 44 | 1BCEBA5A2400403D00AC62E1 /* NSDateFormatter+ShareInstance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDateFormatter+ShareInstance.h"; sourceTree = ""; }; 45 | /* End PBXFileReference section */ 46 | 47 | /* Begin PBXFrameworksBuildPhase section */ 48 | 1BCEBA2924002EC000AC62E1 /* Frameworks */ = { 49 | isa = PBXFrameworksBuildPhase; 50 | buildActionMask = 2147483647; 51 | files = ( 52 | 1BCEBA3124002EC000AC62E1 /* UIKit.framework in Frameworks */, 53 | 1BCEBA3324002EC000AC62E1 /* Foundation.framework in Frameworks */, 54 | 1BCEBA3524002EC000AC62E1 /* CydiaSubstrate.framework in Frameworks */, 55 | ); 56 | runOnlyForDeploymentPostprocessing = 0; 57 | }; 58 | /* End PBXFrameworksBuildPhase section */ 59 | 60 | /* Begin PBXGroup section */ 61 | 1BCEBA2224002EC000AC62E1 = { 62 | isa = PBXGroup; 63 | children = ( 64 | 1BCEBA3624002EC000AC62E1 /* WatchDogger */, 65 | 1BCEBA2F24002EC000AC62E1 /* Frameworks */, 66 | 1BCEBA2E24002EC000AC62E1 /* Products */, 67 | ); 68 | sourceTree = ""; 69 | }; 70 | 1BCEBA2E24002EC000AC62E1 /* Products */ = { 71 | isa = PBXGroup; 72 | children = ( 73 | 1BCEBA2D24002EC000AC62E1 /* WatchDogger.dylib */, 74 | ); 75 | name = Products; 76 | sourceTree = ""; 77 | }; 78 | 1BCEBA2F24002EC000AC62E1 /* Frameworks */ = { 79 | isa = PBXGroup; 80 | children = ( 81 | 1BCEBA3024002EC000AC62E1 /* UIKit.framework */, 82 | 1BCEBA3224002EC000AC62E1 /* Foundation.framework */, 83 | 1BCEBA3424002EC000AC62E1 /* CydiaSubstrate.framework */, 84 | ); 85 | name = Frameworks; 86 | sourceTree = ""; 87 | }; 88 | 1BCEBA3624002EC000AC62E1 /* WatchDogger */ = { 89 | isa = PBXGroup; 90 | children = ( 91 | 1BCEBA4224002EC000AC62E1 /* WatchDogger.xm */, 92 | 1BCEBA4324002EC000AC62E1 /* WatchDogger.mm */, 93 | 1BCEBA4E2400356500AC62E1 /* RBProcess.h */, 94 | 1BCEBA4D2400356500AC62E1 /* RBSProcessIdentity.h */, 95 | 1BCEBA522400357400AC62E1 /* RBProcessHook.h */, 96 | 1BCEBA512400357300AC62E1 /* RBProcessHook.m */, 97 | 1BCEBA5524003F2900AC62E1 /* NormalLog.h */, 98 | 1BCEBA5624003F2A00AC62E1 /* NormalLog.m */, 99 | 1BCEBA5A2400403D00AC62E1 /* NSDateFormatter+ShareInstance.h */, 100 | 1BCEBA592400403D00AC62E1 /* NSDateFormatter+ShareInstance.m */, 101 | 1BCEBA3724002EC000AC62E1 /* Package */, 102 | 1BCEBA4024002EC000AC62E1 /* Supporting Files */, 103 | ); 104 | path = WatchDogger; 105 | sourceTree = ""; 106 | }; 107 | 1BCEBA3724002EC000AC62E1 /* Package */ = { 108 | isa = PBXGroup; 109 | children = ( 110 | 1BCEBA3824002EC000AC62E1 /* DEBIAN */, 111 | 1BCEBA3A24002EC000AC62E1 /* Library */, 112 | ); 113 | path = Package; 114 | sourceTree = ""; 115 | }; 116 | 1BCEBA3824002EC000AC62E1 /* DEBIAN */ = { 117 | isa = PBXGroup; 118 | children = ( 119 | 1BCEBA3924002EC000AC62E1 /* control */, 120 | ); 121 | path = DEBIAN; 122 | sourceTree = ""; 123 | }; 124 | 1BCEBA3A24002EC000AC62E1 /* Library */ = { 125 | isa = PBXGroup; 126 | children = ( 127 | 1BCEBA3B24002EC000AC62E1 /* PreferenceLoader */, 128 | 1BCEBA4524002EC000AC62E1 /* MobileSubstrate */, 129 | ); 130 | path = Library; 131 | sourceTree = ""; 132 | }; 133 | 1BCEBA3B24002EC000AC62E1 /* PreferenceLoader */ = { 134 | isa = PBXGroup; 135 | children = ( 136 | 1BCEBA3C24002EC000AC62E1 /* Preferences */, 137 | ); 138 | path = PreferenceLoader; 139 | sourceTree = ""; 140 | }; 141 | 1BCEBA3C24002EC000AC62E1 /* Preferences */ = { 142 | isa = PBXGroup; 143 | children = ( 144 | 1BCEBA3D24002EC000AC62E1 /* WatchDogger.plist */, 145 | 1BCEBA3E24002EC000AC62E1 /* WatchDoggerIcon.png */, 146 | 1BCEBA3F24002EC000AC62E1 /* WatchDoggerIcon@2x.png */, 147 | ); 148 | path = Preferences; 149 | sourceTree = ""; 150 | }; 151 | 1BCEBA4024002EC000AC62E1 /* Supporting Files */ = { 152 | isa = PBXGroup; 153 | children = ( 154 | 1BCEBA4124002EC000AC62E1 /* WatchDogger-Prefix.pch */, 155 | ); 156 | path = "Supporting Files"; 157 | sourceTree = ""; 158 | }; 159 | 1BCEBA4524002EC000AC62E1 /* MobileSubstrate */ = { 160 | isa = PBXGroup; 161 | children = ( 162 | 1BCEBA4624002EC000AC62E1 /* DynamicLibraries */, 163 | ); 164 | path = MobileSubstrate; 165 | sourceTree = ""; 166 | }; 167 | 1BCEBA4624002EC000AC62E1 /* DynamicLibraries */ = { 168 | isa = PBXGroup; 169 | children = ( 170 | 1BCEBA4724002EC000AC62E1 /* WatchDogger.plist */, 171 | ); 172 | path = DynamicLibraries; 173 | sourceTree = ""; 174 | }; 175 | /* End PBXGroup section */ 176 | 177 | /* Begin PBXHeadersBuildPhase section */ 178 | 1BCEBA2A24002EC000AC62E1 /* Headers */ = { 179 | isa = PBXHeadersBuildPhase; 180 | buildActionMask = 2147483647; 181 | files = ( 182 | 1BCEBA5C2400403D00AC62E1 /* NSDateFormatter+ShareInstance.h in Headers */, 183 | 1BCEBA5724003F2A00AC62E1 /* NormalLog.h in Headers */, 184 | 1BCEBA542400357400AC62E1 /* RBProcessHook.h in Headers */, 185 | 1BCEBA502400356600AC62E1 /* RBProcess.h in Headers */, 186 | 1BCEBA4F2400356600AC62E1 /* RBSProcessIdentity.h in Headers */, 187 | ); 188 | runOnlyForDeploymentPostprocessing = 0; 189 | }; 190 | /* End PBXHeadersBuildPhase section */ 191 | 192 | /* Begin PBXNativeTarget section */ 193 | 1BCEBA2C24002EC000AC62E1 /* WatchDogger */ = { 194 | isa = PBXNativeTarget; 195 | buildConfigurationList = 1BCEBA4A24002EC000AC62E1 /* Build configuration list for PBXNativeTarget "WatchDogger" */; 196 | buildPhases = ( 197 | 1BCEBA2724002EC000AC62E1 /* ShellScript */, 198 | 1BCEBA2824002EC000AC62E1 /* Sources */, 199 | 1BCEBA2924002EC000AC62E1 /* Frameworks */, 200 | 1BCEBA2A24002EC000AC62E1 /* Headers */, 201 | 1BCEBA2B24002EC000AC62E1 /* ShellScript */, 202 | ); 203 | buildRules = ( 204 | ); 205 | dependencies = ( 206 | ); 207 | name = WatchDogger; 208 | productName = WatchDogger; 209 | productReference = 1BCEBA2D24002EC000AC62E1 /* WatchDogger.dylib */; 210 | productType = "com.apple.product-type.library.dynamic"; 211 | }; 212 | /* End PBXNativeTarget section */ 213 | 214 | /* Begin PBXProject section */ 215 | 1BCEBA2324002EC000AC62E1 /* Project object */ = { 216 | isa = PBXProject; 217 | attributes = { 218 | LastUpgradeCheck = 1120; 219 | TargetAttributes = { 220 | 1BCEBA2C24002EC000AC62E1 = { 221 | CreatedOnToolsVersion = 11.2.1; 222 | }; 223 | }; 224 | }; 225 | buildConfigurationList = 1BCEBA2624002EC000AC62E1 /* Build configuration list for PBXProject "WatchDogger" */; 226 | compatibilityVersion = "Xcode 9.3"; 227 | developmentRegion = en; 228 | hasScannedForEncodings = 0; 229 | knownRegions = ( 230 | en, 231 | Base, 232 | ); 233 | mainGroup = 1BCEBA2224002EC000AC62E1; 234 | productRefGroup = 1BCEBA2E24002EC000AC62E1 /* Products */; 235 | projectDirPath = ""; 236 | projectRoot = ""; 237 | targets = ( 238 | 1BCEBA2C24002EC000AC62E1 /* WatchDogger */, 239 | ); 240 | }; 241 | /* End PBXProject section */ 242 | 243 | /* Begin PBXShellScriptBuildPhase section */ 244 | 1BCEBA2724002EC000AC62E1 /* ShellScript */ = { 245 | isa = PBXShellScriptBuildPhase; 246 | buildActionMask = 2147483647; 247 | files = ( 248 | ); 249 | inputFileListPaths = ( 250 | ); 251 | inputPaths = ( 252 | ); 253 | outputFileListPaths = ( 254 | ); 255 | outputPaths = ( 256 | ); 257 | runOnlyForDeploymentPostprocessing = 0; 258 | shellPath = /bin/sh; 259 | shellScript = "/opt/MonkeyDev/bin/md --xcbp-logos"; 260 | }; 261 | 1BCEBA2B24002EC000AC62E1 /* ShellScript */ = { 262 | isa = PBXShellScriptBuildPhase; 263 | buildActionMask = 2147483647; 264 | files = ( 265 | ); 266 | inputFileListPaths = ( 267 | ); 268 | inputPaths = ( 269 | ); 270 | outputFileListPaths = ( 271 | ); 272 | outputPaths = ( 273 | ); 274 | runOnlyForDeploymentPostprocessing = 0; 275 | shellPath = /bin/sh; 276 | shellScript = "/opt/MonkeyDev/bin/md --xcbp"; 277 | }; 278 | /* End PBXShellScriptBuildPhase section */ 279 | 280 | /* Begin PBXSourcesBuildPhase section */ 281 | 1BCEBA2824002EC000AC62E1 /* Sources */ = { 282 | isa = PBXSourcesBuildPhase; 283 | buildActionMask = 2147483647; 284 | files = ( 285 | 1BCEBA5B2400403D00AC62E1 /* NSDateFormatter+ShareInstance.m in Sources */, 286 | 1BCEBA532400357400AC62E1 /* RBProcessHook.m in Sources */, 287 | 1BCEBA5824003F2A00AC62E1 /* NormalLog.m in Sources */, 288 | 1BCEBA4424002EC000AC62E1 /* WatchDogger.mm in Sources */, 289 | ); 290 | runOnlyForDeploymentPostprocessing = 0; 291 | }; 292 | /* End PBXSourcesBuildPhase section */ 293 | 294 | /* Begin XCBuildConfiguration section */ 295 | 1BCEBA4824002EC000AC62E1 /* Release */ = { 296 | isa = XCBuildConfiguration; 297 | buildSettings = { 298 | COPY_PHASE_STRIP = YES; 299 | EXCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES = "*.nib *.lproj *.gch (*) .DS_Store CVS .svn .git .hg *.xcodeproj *.xcode *.pbproj *.pbxproj"; 300 | FRAMEWORK_SEARCH_PATHS = ( 301 | "$(MonkeyDevPath)/frameworks/**", 302 | "$(MonkeyDevTheosPath)/vendor/lib", 303 | ); 304 | GCC_C_LANGUAGE_STANDARD = gnu99; 305 | GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; 306 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 307 | GCC_WARN_UNUSED_VARIABLE = YES; 308 | HEADER_SEARCH_PATHS = "$(MonkeyDevTheosPath)/vendor/include/**"; 309 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 310 | LIBRARY_SEARCH_PATHS = "$(MonkeyDevTheosPath)/vendor/lib/**"; 311 | MonkeyDevPath = /opt/MonkeyDev; 312 | MonkeyDevTheosPath = /opt/theos; 313 | OTHER_CFLAGS = "-DTHEOS_INSTANCE_NAME=\"\\\"WatchDogger\\\"\""; 314 | SDKROOT = iphoneos; 315 | TARGETED_DEVICE_FAMILY = "1,2"; 316 | VALIDATE_PRODUCT = YES; 317 | }; 318 | name = Release; 319 | }; 320 | 1BCEBA4924002EC000AC62E1 /* Debug */ = { 321 | isa = XCBuildConfiguration; 322 | buildSettings = { 323 | COPY_PHASE_STRIP = NO; 324 | EXCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES = "*.nib *.lproj *.gch (*) .DS_Store CVS .svn .git .hg *.xcodeproj *.xcode *.pbproj *.pbxproj"; 325 | FRAMEWORK_SEARCH_PATHS = ( 326 | "$(MonkeyDevPath)/frameworks/**", 327 | "$(MonkeyDevTheosPath)/vendor/lib", 328 | ); 329 | GCC_C_LANGUAGE_STANDARD = gnu99; 330 | GCC_DYNAMIC_NO_PIC = NO; 331 | GCC_OPTIMIZATION_LEVEL = 0; 332 | GCC_PREPROCESSOR_DEFINITIONS = ( 333 | "DEBUG=1", 334 | "$(inherited)", 335 | ); 336 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 337 | GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; 338 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 339 | GCC_WARN_UNUSED_VARIABLE = YES; 340 | HEADER_SEARCH_PATHS = "$(MonkeyDevTheosPath)/vendor/include/**"; 341 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 342 | LIBRARY_SEARCH_PATHS = "$(MonkeyDevTheosPath)/vendor/lib/**"; 343 | MonkeyDevPath = /opt/MonkeyDev; 344 | MonkeyDevTheosPath = /opt/theos; 345 | ONLY_ACTIVE_ARCH = YES; 346 | OTHER_CFLAGS = "-DTHEOS_INSTANCE_NAME=\"\\\"WatchDogger\\\"\""; 347 | SDKROOT = iphoneos; 348 | TARGETED_DEVICE_FAMILY = "1,2"; 349 | VALIDATE_PRODUCT = NO; 350 | }; 351 | name = Debug; 352 | }; 353 | 1BCEBA4B24002EC000AC62E1 /* Release */ = { 354 | isa = XCBuildConfiguration; 355 | buildSettings = { 356 | CLANG_ENABLE_OBJC_ARC = YES; 357 | CODE_SIGNING_ALLOWED = NO; 358 | CODE_SIGN_IDENTITY = ""; 359 | CODE_SIGN_STYLE = Automatic; 360 | DEVELOPMENT_TEAM = SH4YVD7HDL; 361 | DYLIB_COMPATIBILITY_VERSION = 1; 362 | DYLIB_CURRENT_VERSION = 1; 363 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 364 | GCC_PREFIX_HEADER = "WatchDogger/WatchDogger-Prefix.pch"; 365 | INSTALL_PATH = /Library/MobileSubstrate/DynamicLibraries; 366 | MonkeyDevBuildPackageOnAnyBuild = NO; 367 | MonkeyDevClearUiCacheOnInstall = NO; 368 | MonkeyDevCopyOnBuild = NO; 369 | MonkeyDevDeviceIP = 127.0.0.1; 370 | MonkeyDevDevicePassword = ""; 371 | MonkeyDevDevicePort = 2222; 372 | MonkeyDevInstallOnAnyBuild = YES; 373 | MonkeyDevInstallOnProfiling = YES; 374 | MonkeyDevkillProcessOnInstall = Preferences; 375 | PRODUCT_NAME = "$(TARGET_NAME)"; 376 | TARGETED_DEVICE_FAMILY = "1,2"; 377 | VALID_ARCHS = "arm64 arm64e"; 378 | }; 379 | name = Release; 380 | }; 381 | 1BCEBA4C24002EC000AC62E1 /* Debug */ = { 382 | isa = XCBuildConfiguration; 383 | buildSettings = { 384 | CLANG_ENABLE_OBJC_ARC = YES; 385 | CODE_SIGNING_ALLOWED = NO; 386 | CODE_SIGN_IDENTITY = ""; 387 | CODE_SIGN_STYLE = Automatic; 388 | DEVELOPMENT_TEAM = SH4YVD7HDL; 389 | DYLIB_COMPATIBILITY_VERSION = 1; 390 | DYLIB_CURRENT_VERSION = 1; 391 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 392 | GCC_PREFIX_HEADER = "WatchDogger/WatchDogger-Prefix.pch"; 393 | INSTALL_PATH = /Library/MobileSubstrate/DynamicLibraries; 394 | MonkeyDevBuildPackageOnAnyBuild = NO; 395 | MonkeyDevClearUiCacheOnInstall = NO; 396 | MonkeyDevCopyOnBuild = NO; 397 | MonkeyDevDeviceIP = 127.0.0.1; 398 | MonkeyDevDevicePassword = ""; 399 | MonkeyDevDevicePort = 2222; 400 | MonkeyDevInstallOnAnyBuild = YES; 401 | MonkeyDevInstallOnProfiling = YES; 402 | MonkeyDevkillProcessOnInstall = Preferences; 403 | PRODUCT_NAME = "$(TARGET_NAME)"; 404 | TARGETED_DEVICE_FAMILY = "1,2"; 405 | VALID_ARCHS = "arm64 arm64e"; 406 | }; 407 | name = Debug; 408 | }; 409 | /* End XCBuildConfiguration section */ 410 | 411 | /* Begin XCConfigurationList section */ 412 | 1BCEBA2624002EC000AC62E1 /* Build configuration list for PBXProject "WatchDogger" */ = { 413 | isa = XCConfigurationList; 414 | buildConfigurations = ( 415 | 1BCEBA4824002EC000AC62E1 /* Release */, 416 | 1BCEBA4924002EC000AC62E1 /* Debug */, 417 | ); 418 | defaultConfigurationIsVisible = 0; 419 | defaultConfigurationName = Release; 420 | }; 421 | 1BCEBA4A24002EC000AC62E1 /* Build configuration list for PBXNativeTarget "WatchDogger" */ = { 422 | isa = XCConfigurationList; 423 | buildConfigurations = ( 424 | 1BCEBA4B24002EC000AC62E1 /* Release */, 425 | 1BCEBA4C24002EC000AC62E1 /* Debug */, 426 | ); 427 | defaultConfigurationIsVisible = 0; 428 | defaultConfigurationName = Release; 429 | }; 430 | /* End XCConfigurationList section */ 431 | }; 432 | rootObject = 1BCEBA2324002EC000AC62E1 /* Project object */; 433 | } 434 | --------------------------------------------------------------------------------