├── 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 | 
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 |
--------------------------------------------------------------------------------