mirror of
				https://github.com/SoPat712/YTLitePlus.git
				synced 2025-10-30 20:34:04 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			111 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
| #ifndef _PS
 | |
| #define _PS
 | |
| 
 | |
| #import "iOSVersions.h"
 | |
| #import "Misc.h"
 | |
| 
 | |
| #define PS_DONATE_URL @"https://poomsmart.github.io/repo/"
 | |
| #define PS_TWITTER_URL @"https://twitter.com/PoomSmart"
 | |
| 
 | |
| #ifdef CHECK_TARGET
 | |
| 
 | |
| #import <HBLog.h>
 | |
| 
 | |
| typedef NS_ENUM(NSUInteger, TargetType) {
 | |
|     TargetTypeApps = 1 << 0,
 | |
|     TargetTypeGenericExtensions = 1 << 1,
 | |
|     TargetTypeKeyboardExtensions = 1 << 2
 | |
| };
 | |
| 
 | |
| FOUNDATION_EXPORT char ***_NSGetArgv();
 | |
| 
 | |
| static BOOL _isTarget(NSUInteger type, NSArray <NSString *> *whitelist, NSArray <NSString *> *blacklist) {
 | |
|     char *executablePathC = **_NSGetArgv();
 | |
|     NSString *executablePath = [NSString stringWithUTF8String:executablePathC];
 | |
|     if (executablePath) {
 | |
| #ifdef __DEBUG__
 | |
|         HBLogDebug(@"Executable path: %@", executablePath);
 | |
| #endif
 | |
|         BOOL isExtension = [executablePath rangeOfString:@"appex"].location != NSNotFound;
 | |
|         if (type & TargetTypeGenericExtensions && isExtension) {
 | |
|             HBLogDebug(@"Injected: extension");
 | |
|             return YES;
 | |
|         }
 | |
|         NSString *processName = [executablePath lastPathComponent];
 | |
| #ifdef CHECK_BLACKLIST
 | |
|         if (blacklist.count) {
 | |
|             BOOL disallow = [blacklist containsObject:processName];
 | |
|             NSString *bundleIdentifier = NSBundle.mainBundle.bundleIdentifier;
 | |
|             if (!disallow && bundleIdentifier)
 | |
|                 disallow = [blacklist containsObject:bundleIdentifier];
 | |
|             if (disallow)
 | |
|                 return NO;
 | |
|         }
 | |
| #endif
 | |
| #ifdef CHECK_WHITELIST
 | |
|         if (whitelist.count) {
 | |
|             BOOL allow = [whitelist containsObject:processName];
 | |
|             NSString *bundleIdentifier = NSBundle.mainBundle.bundleIdentifier;
 | |
|             if (!allow && bundleIdentifier)
 | |
|                 allow = [whitelist containsObject:bundleIdentifier];
 | |
|             if (allow) {
 | |
|                 HBLogDebug(@"Injected: whitelist");
 | |
|                 return YES;
 | |
|             }
 | |
|         }
 | |
| #endif
 | |
|         BOOL isSpringBoard = NSStringEqual(processName, @"SpringBoard");
 | |
|         BOOL isExtensionOrApp = [executablePath rangeOfString:@"/Application"].location != NSNotFound;
 | |
|         BOOL isUILike = isSpringBoard || isExtensionOrApp;
 | |
|         if (type & TargetTypeApps && isUILike && !isExtension) {
 | |
|             HBLogDebug(@"Injected: app");
 | |
|             return YES;
 | |
|         }
 | |
|         if (type & TargetTypeKeyboardExtensions && isExtension) {
 | |
|             id val = NSBundle.mainBundle.infoDictionary[@"NSExtension"][@"NSExtensionPointIdentifier"];
 | |
|             BOOL isKeyboardExtension = val ? NSStringEqual(val, @"com.apple.keyboard-service") : NO;
 | |
|             if (isKeyboardExtension)
 | |
|                 HBLogDebug(@"Injected: keyboard extension");
 | |
|             return isKeyboardExtension;
 | |
|         }
 | |
|     }
 | |
|     return NO;
 | |
| }
 | |
| 
 | |
| #define isTarget(type) _isTarget(type, nil, nil)
 | |
| 
 | |
| #ifdef CHECK_TARGET_GUI
 | |
| 
 | |
| static void *observer = NULL;
 | |
| static void lateLoad(void);
 | |
| 
 | |
| static void appLoaded(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) {
 | |
|     lateLoad();
 | |
| }
 | |
| 
 | |
| static void appLoadedCallback() {
 | |
|     CFNotificationCenterAddObserver(CFNotificationCenterGetLocalCenter(), &observer, appLoaded, (CFStringRef)UIApplicationDidFinishLaunchingNotification, NULL, CFNotificationSuspensionBehaviorCoalesce);
 | |
| }
 | |
| 
 | |
| #endif
 | |
| 
 | |
| #endif
 | |
| 
 | |
| #ifdef KILL_PROCESS
 | |
| 
 | |
| #include <spawn.h>
 | |
| 
 | |
| void killProcess(const char *name) {
 | |
|     pid_t pid;
 | |
|     int status;
 | |
|     const char *args[] = {
 | |
|         "killall", "-9", name, NULL
 | |
|     };
 | |
|     posix_spawn(&pid, "/usr/bin/killall", NULL, NULL, (char *const *)args, NULL);
 | |
|     waitpid(pid, &status, WEXITED);
 | |
| }
 | |
| 
 | |
| #endif
 | |
| 
 | |
| #endif
 | 
