├── MJAppTools ├── Default-568h@2x.png ├── Extensions │ ├── NSFileHandle+Extension.h │ └── NSFileHandle+Extension.m ├── Tools │ ├── MJAppTools.h │ ├── MJPrintTools.h │ ├── MJAppTools.m │ └── MJPrintTools.m ├── Models │ ├── MJMachO.h │ ├── MJApp.h │ ├── MJApp.m │ └── MJMachO.m ├── Info.plist ├── SystemHeaders │ ├── FBBundleInfo.h │ ├── FBApplicationInfo.h │ ├── LSApplicationWorkspace.h │ └── LSApplicationProxy.h └── main.m ├── MJAppTools.xcodeproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── project.pbxproj ├── LICENSE ├── Makefile ├── .gitignore ├── README.md └── Release └── MJAppTools.entitlements /MJAppTools/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CoderMJLee/MJAppTools/HEAD/MJAppTools/Default-568h@2x.png -------------------------------------------------------------------------------- /MJAppTools.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MJAppTools/Extensions/NSFileHandle+Extension.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSFileHandle+Extension.h 3 | // MJOTool 4 | // 5 | // Created by MJ Lee on 2018/1/24. 6 | // Copyright © 2018年 MJ Lee. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSFileHandle (Extension) 12 | 13 | - (uint32_t)mj_readUint32; 14 | - (uint32_t)mj_staticReadUint32; 15 | 16 | - (void)mj_readData:(void *)data length:(NSUInteger)length; 17 | - (void)mj_staticReadData:(void *)data length:(NSUInteger)length; 18 | 19 | - (void)mj_appendOffset:(unsigned long long)offset; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /MJAppTools/Tools/MJAppTools.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJAppTools.h 3 | // MJAppTools 4 | // 5 | // Created by MJ Lee on 2018/1/27. 6 | // Copyright © 2018年 MJ Lee. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "MJApp.h" 11 | 12 | typedef enum { 13 | MJListAppsTypeUser, 14 | MJListAppsTypeUserEncrypted, 15 | MJListAppsTypeUserDecrypted, 16 | MJListAppsTypeSystem 17 | } MJListAppsType; 18 | 19 | @interface MJAppTools : NSObject 20 | 21 | + (void)listUserAppsWithType:(MJListAppsType)type regex:(NSString *)regex operation:(void (^)(NSArray *apps))operation; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /MJAppTools/Models/MJMachO.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJMachO.h 3 | // MJAppTools 4 | // 5 | // Created by MJ Lee on 2018/1/27. 6 | // Copyright © 2018年 MJ Lee. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface MJMachO : NSObject 12 | 13 | /** 架构名称 */ 14 | @property (copy, nonatomic) NSString *architecture; 15 | /** 是否被加密 */ 16 | @property (assign, nonatomic, getter=isEncrypted) BOOL encrypted; 17 | @property (assign, nonatomic, getter=isFat) BOOL fat; 18 | @property (strong, nonatomic) NSArray *machOs; 19 | 20 | + (instancetype)machOWithFileHandle:(NSFileHandle *)handle; 21 | - (instancetype)initWithFileHandle:(NSFileHandle *)handle; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /MJAppTools/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UIRequiredDeviceCapabilities 24 | 25 | armv7 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /MJAppTools/Models/MJApp.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJApp.h 3 | // MJAppTools 4 | // 5 | // Created by MJ Lee on 2018/1/27. 6 | // Copyright © 2018年 MJ Lee. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class FBApplicationInfo, MJMachO; 12 | 13 | @interface MJApp : NSObject 14 | 15 | @property(copy, nonatomic, readonly) NSString *bundlePath; 16 | @property(copy, nonatomic, readonly) NSString *dataPath; 17 | @property(copy, nonatomic, readonly) NSString *bundleIdentifier; 18 | @property(copy, nonatomic, readonly) NSString *displayName; 19 | @property(copy, nonatomic, readonly) NSString *executableName; 20 | @property(assign, nonatomic, readonly, getter=isSystemApp) BOOL systemApp; 21 | @property(assign, nonatomic, readonly, getter=isHidden) BOOL hidden; 22 | @property (strong, nonatomic, readonly) MJMachO *executable; 23 | 24 | - (instancetype)initWithInfo:(FBApplicationInfo *)info; 25 | + (instancetype)appWithInfo:(FBApplicationInfo *)info; 26 | 27 | - (void)setupExecutable; 28 | @end 29 | -------------------------------------------------------------------------------- /MJAppTools/Tools/MJPrintTools.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJPrintTools.h 3 | // MJAppTools 4 | // 5 | // Created by MJ Lee on 2018/1/28. 6 | // Copyright © 2018年 MJ Lee. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | extern NSString *MJPrintColorDefault; 12 | 13 | extern NSString *MJPrintColorRed; 14 | extern NSString *MJPrintColorGreen; 15 | extern NSString *MJPrintColorBlue; 16 | extern NSString *MJPrintColorWhite; 17 | extern NSString *MJPrintColorBlack; 18 | extern NSString *MJPrintColorYellow; 19 | extern NSString *MJPrintColorCyan; 20 | extern NSString *MJPrintColorMagenta; 21 | 22 | extern NSString *MJPrintColorWarning; 23 | extern NSString *MJPrintColorError; 24 | extern NSString *MJPrintColorStrong; 25 | 26 | @interface MJPrintTools : NSObject 27 | 28 | + (void)print:(NSString *)format, ...; 29 | + (void)printError:(NSString *)format, ...; 30 | + (void)printWarning:(NSString *)format, ...; 31 | + (void)printStrong:(NSString *)format, ...; 32 | + (void)printColor:(NSString *)color format:(NSString *)format, ...; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 M了个J 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 | -------------------------------------------------------------------------------- /MJAppTools/SystemHeaders/FBBundleInfo.h: -------------------------------------------------------------------------------- 1 | 2 | @interface FBBundleInfo : NSObject { 3 | NSString * _bundleIdentifier; 4 | NSString * _bundleType; 5 | NSURL * _bundleURL; 6 | NSString * _bundleVersion; 7 | NSUUID * _cacheGUID; 8 | NSDictionary * _extendedInfo; 9 | unsigned int _sequenceNumber; 10 | } 11 | 12 | @property (nonatomic, readonly, copy) NSString *bundleIdentifier; 13 | @property (nonatomic, readonly, copy) NSString *bundleType; 14 | @property (nonatomic, readonly, retain) NSURL *bundleURL; 15 | @property (nonatomic, readonly, copy) NSString *bundleVersion; 16 | @property (nonatomic, readonly, copy) NSUUID *cacheGUID; 17 | @property (nonatomic, readonly) unsigned int sequenceNumber; 18 | 19 | - (id)_initWithBundleIdentifier:(id)arg1 url:(id)arg2; 20 | - (id)_initWithBundleProxy:(id)arg1 bundleIdentifier:(id)arg2 url:(id)arg3; 21 | - (id)_initWithBundleProxy:(id)arg1 overrideURL:(id)arg2; 22 | - (id)bundleIdentifier; 23 | - (id)bundleType; 24 | - (id)bundleURL; 25 | - (id)bundleVersion; 26 | - (id)cacheGUID; 27 | - (void)dealloc; 28 | - (id)extendedInfo; 29 | - (id)extendedInfoValueForKey:(id)arg1; 30 | - (id)init; 31 | - (unsigned int)sequenceNumber; 32 | - (void)setExtendedInfo:(id)arg1; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # Config 2 | ARCH = armv7 3 | IOS_VERSION = 8.0 4 | EXECUTABLE_NAME = MJAppTools 5 | 6 | # Dirs 7 | RELEASE_DIR = Release 8 | PROJECT_DIR = MJAppTools 9 | EXECUTABLE_FILE = $(RELEASE_DIR)/$(EXECUTABLE_NAME) 10 | 11 | # Header Files 12 | HEADER_DIR1 = $(PROJECT_DIR) 13 | HEADER_DIR2 = $(PROJECT_DIR)/SystemHeaders 14 | HEADER_DIR3 = $(PROJECT_DIR)/Extensions 15 | HEADER_DIR4 = $(PROJECT_DIR)/Models 16 | HEADER_DIR5 = $(PROJECT_DIR)/Tools 17 | 18 | # Source Files 19 | SOURCE_FILES = $(HEADER_DIR1)/*.m 20 | SOURCE_FILES += $(HEADER_DIR3)/*.m 21 | SOURCE_FILES += $(HEADER_DIR4)/*.m 22 | SOURCE_FILES += $(HEADER_DIR5)/*.m 23 | 24 | # Entitlements 25 | ENTITLEMENT_FILE = $(RELEASE_DIR)/MJAppTools.entitlements 26 | 27 | codesign: compile 28 | @codesign -fs- --entitlements $(ENTITLEMENT_FILE) $(EXECUTABLE_FILE) 29 | 30 | compile: 31 | @xcrun -sdk iphoneos \ 32 | clang -arch $(ARCH) \ 33 | -mios-version-min=$(IOS_VERSION) \ 34 | -fobjc-arc \ 35 | -framework Foundation \ 36 | -framework UIKit \ 37 | -framework MobileCoreServices \ 38 | -Os \ 39 | -I $(HEADER_DIR1) \ 40 | -I $(HEADER_DIR2) \ 41 | -I $(HEADER_DIR3) \ 42 | -I $(HEADER_DIR4) \ 43 | -I $(HEADER_DIR5) \ 44 | $(SOURCE_FILES) \ 45 | -o $(EXECUTABLE_FILE) -------------------------------------------------------------------------------- /MJAppTools/Extensions/NSFileHandle+Extension.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSFileHandle+Extension.m 3 | // MJOTool 4 | // 5 | // Created by MJ Lee on 2018/1/24. 6 | // Copyright © 2018年 MJ Lee. All rights reserved. 7 | // 8 | 9 | #import "NSFileHandle+Extension.h" 10 | 11 | @implementation NSFileHandle (Extension) 12 | 13 | - (uint32_t)mj_readUint32 14 | { 15 | size_t length = sizeof(uint32_t); 16 | uint32_t value; 17 | [[self readDataOfLength:length] getBytes:&value length:length]; 18 | return value; 19 | } 20 | 21 | - (uint32_t)mj_staticReadUint32 22 | { 23 | unsigned long long offset = self.offsetInFile; 24 | uint32_t value = [self mj_readUint32]; 25 | [self seekToFileOffset:offset]; 26 | return value; 27 | } 28 | 29 | - (void)mj_readData:(void *)data length:(NSUInteger)length 30 | { 31 | [[self readDataOfLength:length] getBytes:data length:length]; 32 | } 33 | 34 | - (void)mj_staticReadData:(void *)data length:(NSUInteger)length 35 | { 36 | unsigned long long offset = self.offsetInFile; 37 | [self mj_readData:data length:length]; 38 | [self seekToFileOffset:offset]; 39 | } 40 | 41 | - (void)mj_appendOffset:(unsigned long long)offset 42 | { 43 | [self seekToFileOffset:self.offsetInFile + offset]; 44 | } 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.moved-aside 22 | *.xccheckout 23 | *.xcscmblueprint 24 | 25 | ## Obj-C/Swift specific 26 | *.hmap 27 | *.ipa 28 | *.dSYM.zip 29 | *.dSYM 30 | 31 | # CocoaPods 32 | # 33 | # We recommend against adding the Pods directory to your .gitignore. However 34 | # you should judge for yourself, the pros and cons are mentioned at: 35 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 36 | # 37 | # Pods/ 38 | 39 | # Carthage 40 | # 41 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 42 | # Carthage/Checkouts 43 | 44 | Carthage/Build 45 | 46 | # fastlane 47 | # 48 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 49 | # screenshots whenever they are needed. 50 | # For more information about the recommended setup visit: 51 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 52 | 53 | fastlane/report.xml 54 | fastlane/Preview.html 55 | fastlane/screenshots 56 | fastlane/test_output 57 | 58 | # Code Injection 59 | # 60 | # After new code Injection tools there's a generated folder /iOSInjectionProject 61 | # https://github.com/johnno1962/injectionforxcode 62 | 63 | iOSInjectionProject/ 64 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MJAppTools 2 | 处理iOS APP信息的命令行工具 3 | 4 | 5 | 6 | ## 目前已有的功能 7 | 8 | - 正则搜索 9 | - 列出用户安装的所有应用 10 | - 列出用户安装的所有**加壳**应用 11 | - 列出用户安装的所有**未加壳**应用 12 | - 列出**系统**的应用 13 | - 应用信息 14 | - 应用名称 15 | - Bundle Identifier 16 | - Bundle URL(Main Bundle) 17 | - Data URL(Sandbox) 18 | - 架构信息(Architecture) 19 | - 架构名称(Architecture Name) 20 | - 加壳信息(Cryptid) 21 | 22 | 23 | 24 | 25 | ## 安装 26 | 27 | ### 1、下载MJAppTools项目 28 | 29 | ![](https://images2017.cnblogs.com/blog/497279/201801/497279-20180128160423850-1514904706.png) 30 | 31 | 32 | 33 | ### 2、编译 34 | 35 | - **make**(或者用Xcode打开项目**Command+B**编译一下) 36 | 37 | ![](https://images2017.cnblogs.com/blog/497279/201801/497279-20180128160439272-1085020939.png) 38 | 39 | 40 | 41 | - 生成命令行工具 42 | 43 | ![](https://images2017.cnblogs.com/blog/497279/201801/497279-20180128160450287-718908728.png) 44 | 45 | 46 | 47 | ### 3、将命令行工具存放到手机的/usr/bin目录 48 | 49 | ![](https://images2017.cnblogs.com/blog/497279/201801/497279-20180128160456444-2037015854.png) 50 | 51 | 52 | 53 | ### 4、在手机上设置可执行权限 54 | 55 | ```shell 56 | chmod +x /usr/bin/MJAppTools 57 | ``` 58 | 59 | ![](https://images2017.cnblogs.com/blog/497279/201801/497279-20180128160514569-571116137.png) 60 | 61 | 62 | 63 | ### 5、开始使用MJAppTools 64 | 65 | ![](https://images2017.cnblogs.com/blog/497279/201801/497279-20180131130946984-630357232.png) 66 | 67 | 68 | 69 | ## 用法 70 | 71 | ### 搜索用户安装的所有应用 72 | ![](https://images2017.cnblogs.com/blog/497279/201801/497279-20180129122149625-343565107.png) 73 | 74 | 75 | 76 | ### 搜索系统的应用 77 | 78 | ![](https://images2017.cnblogs.com/blog/497279/201801/497279-20180131131158718-689866113.png) 79 | 80 | 81 | 82 | ### 支持正则搜索 83 | 84 | - 搜索名称 85 | ![](https://images2017.cnblogs.com/blog/497279/201801/497279-20180129122156265-61789802.png) 86 | 87 | 88 | 89 | 90 | - 搜索ID 91 | ![](https://images2017.cnblogs.com/blog/497279/201801/497279-20180129122206250-1877490399.png) 92 | 93 | 94 | 95 | 96 | - 搜索路径 97 | ![](https://images2017.cnblogs.com/blog/497279/201801/497279-20180129122212906-911472208.png) 98 | -------------------------------------------------------------------------------- /MJAppTools/Models/MJApp.m: -------------------------------------------------------------------------------- 1 | // 2 | // MJApp.m 3 | // MJAppTools 4 | // 5 | // Created by MJ Lee on 2018/1/27. 6 | // Copyright © 2018年 MJ Lee. All rights reserved. 7 | // 8 | 9 | #import "MJApp.h" 10 | #import "FBApplicationInfo.h" 11 | #import "LSApplicationProxy.h" 12 | #import "NSFileHandle+Extension.h" 13 | #import "MJMachO.h" 14 | 15 | @interface MJApp() 16 | @property(copy, nonatomic) NSString *bundlePath; 17 | @property(copy, nonatomic) NSString *dataPath; 18 | @property(copy, nonatomic) NSString *bundleIdentifier; 19 | @property(copy, nonatomic) NSString *displayName; 20 | @property(copy, nonatomic) NSString *executableName; 21 | @property(assign, nonatomic, getter=isSystemApp) BOOL systemApp; 22 | @property(assign, nonatomic, getter=isHidden) BOOL hidden; 23 | @property (strong, nonatomic) MJMachO *executable; 24 | @end 25 | 26 | @implementation MJApp 27 | 28 | + (instancetype)appWithInfo:(FBApplicationInfo *)info 29 | { 30 | return [[self alloc] initWithInfo:info]; 31 | } 32 | 33 | - (instancetype)initWithInfo:(FBApplicationInfo *)info 34 | { 35 | if (self = [super init]) { 36 | LSApplicationProxy *appProxy = (LSApplicationProxy*)info; 37 | self.displayName = appProxy.localizedName ? appProxy.localizedName : appProxy.itemName; 38 | self.bundleIdentifier = info.bundleIdentifier; 39 | self.bundlePath = info.bundleURL.path; 40 | self.dataPath = info.dataContainerURL.path; 41 | self.hidden = [appProxy.appTags containsObject:@"hidden"]; 42 | self.systemApp = [info.applicationType isEqualToString:@"System"]; 43 | } 44 | return self; 45 | } 46 | 47 | - (void)setupExecutable 48 | { 49 | NSRange range = NSMakeRange([self.bundlePath rangeOfString:@"/" options:NSBackwardsSearch].location + 1, self.bundlePath.lastPathComponent.length - 4); 50 | self.executableName = [self.bundlePath substringWithRange:range]; 51 | 52 | NSString *filepath = [self.bundlePath stringByAppendingPathComponent:self.executableName]; 53 | if (![[NSFileManager defaultManager] fileExistsAtPath:filepath]) return; 54 | NSFileHandle *readHandle = [NSFileHandle fileHandleForReadingAtPath:filepath]; 55 | 56 | self.executable = [MJMachO machOWithFileHandle:readHandle]; 57 | 58 | // 关闭 59 | [readHandle closeFile]; 60 | } 61 | 62 | @end 63 | -------------------------------------------------------------------------------- /MJAppTools/Tools/MJAppTools.m: -------------------------------------------------------------------------------- 1 | // 2 | // MJAppTools.m 3 | // MJAppTools 4 | // 5 | // Created by MJ Lee on 2018/1/27. 6 | // Copyright © 2018年 MJ Lee. All rights reserved. 7 | // 8 | 9 | #import "MJAppTools.h" 10 | #import "MJMachO.h" 11 | #import 12 | #import "LSApplicationWorkspace.h" 13 | #import "LSApplicationProxy.h" 14 | #import "FBApplicationInfo.h" 15 | 16 | @implementation MJAppTools 17 | 18 | + (BOOL)match:(NSRegularExpression *)exp app:(MJApp *)app 19 | { 20 | if (!exp) return YES; 21 | 22 | if ([exp firstMatchInString:app.displayName options:0 range:NSMakeRange(0, app.displayName.length)]) return YES; 23 | if ([exp firstMatchInString:app.bundlePath options:0 range:NSMakeRange(0, app.bundlePath.length)]) return YES; 24 | if ([exp firstMatchInString:app.bundleIdentifier options:0 range:NSMakeRange(0, app.bundleIdentifier.length)]) return YES; 25 | 26 | return NO; 27 | } 28 | 29 | + (void)listUserAppsWithType:(MJListAppsType)type regex:(NSString *)regex operation:(void (^)(NSArray *apps))operation 30 | { 31 | if (!operation) return; 32 | 33 | // 正则 34 | NSRegularExpression *exp = regex ? [NSRegularExpression regularExpressionWithPattern:regex options:NSRegularExpressionCaseInsensitive error:nil] : nil; 35 | 36 | // 数组 37 | NSMutableArray *apps = [NSMutableArray array]; 38 | NSArray *appInfos = [[LSApplicationWorkspace defaultWorkspace] allApplications]; 39 | 40 | for (FBApplicationInfo *appInfo in appInfos) { 41 | if (!appInfo.bundleURL) continue; 42 | MJApp *app = [MJApp appWithInfo:appInfo]; 43 | // 类型 44 | if (type != MJListAppsTypeSystem && app.isSystemApp) continue; 45 | if (type == MJListAppsTypeSystem && !app.isSystemApp) continue; 46 | 47 | // 隐藏 48 | if (app.isHidden) continue; 49 | 50 | // 过滤 51 | if ([app.bundleIdentifier containsString:@"com.apple.webapp"]) continue; 52 | 53 | // 正则 54 | if (![self match:exp app:app]) continue; 55 | 56 | // 可执行文件 57 | [app setupExecutable]; 58 | if (!app.executable) continue; 59 | 60 | // 加密 61 | if (type == MJListAppsTypeUserDecrypted && app.executable.isEncrypted) continue; 62 | if (type == MJListAppsTypeUserEncrypted && !app.executable.isEncrypted) continue; 63 | 64 | [apps addObject:app]; 65 | } 66 | 67 | operation(apps); 68 | } 69 | 70 | @end 71 | -------------------------------------------------------------------------------- /MJAppTools/Tools/MJPrintTools.m: -------------------------------------------------------------------------------- 1 | // 2 | // MJPrintTools.m 3 | // MJAppTools 4 | // 5 | // Created by MJ Lee on 2018/1/28. 6 | // Copyright © 2018年 MJ Lee. All rights reserved. 7 | // 8 | 9 | #import "MJPrintTools.h" 10 | 11 | const NSString *MJPrintColorDefault = @"\033[0m"; 12 | 13 | const NSString *MJPrintColorRed = @"\033[1;31m"; 14 | const NSString *MJPrintColorGreen = @"\033[1;32m"; 15 | const NSString *MJPrintColorBlue = @"\033[1;34m"; 16 | const NSString *MJPrintColorWhite = @"\033[1;37m"; 17 | const NSString *MJPrintColorBlack = @"\033[1;30m"; 18 | const NSString *MJPrintColorYellow = @"\033[1;33m"; 19 | const NSString *MJPrintColorCyan = @"\033[1;36m"; 20 | const NSString *MJPrintColorMagenta = @"\033[1;35m"; 21 | 22 | const NSString *MJPrintColorWarning = @"\033[1;33m"; 23 | const NSString *MJPrintColorError = @"\033[1;31m"; 24 | const NSString *MJPrintColorStrong = @"\033[1;32m"; 25 | 26 | #define MJBeginFormat \ 27 | if (!format) return; \ 28 | va_list args; \ 29 | va_start(args, format); \ 30 | format = [[NSString alloc] initWithFormat:format arguments:args]; 31 | 32 | #define MJEndFormat va_end(args); 33 | 34 | @implementation MJPrintTools 35 | 36 | + (void)printError:(NSString *)format, ... 37 | { 38 | MJBeginFormat; 39 | format = [@"Error: " stringByAppendingString:format]; 40 | [self printColor:(NSString *)MJPrintColorError format:format]; 41 | } 42 | 43 | + (void)printWarning:(NSString *)format, ... 44 | { 45 | MJBeginFormat; 46 | format = [@"Warning: " stringByAppendingString:format]; 47 | [self printColor:(NSString *)MJPrintColorWarning format:format]; 48 | MJEndFormat; 49 | } 50 | 51 | + (void)printStrong:(NSString *)format, ... 52 | { 53 | MJBeginFormat; 54 | [self printColor:(NSString *)MJPrintColorStrong format:format]; 55 | MJEndFormat; 56 | } 57 | 58 | + (void)print:(NSString *)format, ... 59 | { 60 | MJBeginFormat; 61 | [self printColor:nil format:format]; 62 | MJEndFormat; 63 | } 64 | 65 | + (void)printColor:(NSString *)color format:(NSString *)format, ... 66 | { 67 | MJBeginFormat; 68 | 69 | NSMutableString *printStr = [NSMutableString string]; 70 | if (color && ![color isEqual:MJPrintColorDefault]) { 71 | [printStr appendString:color]; 72 | [printStr appendString:format]; 73 | [printStr appendString:(NSString *)MJPrintColorDefault]; 74 | } else { 75 | [printStr appendString:(NSString *)MJPrintColorDefault]; 76 | [printStr appendString:format]; 77 | } 78 | printf("%s", printStr.UTF8String); 79 | 80 | MJEndFormat; 81 | } 82 | 83 | @end 84 | -------------------------------------------------------------------------------- /MJAppTools/Models/MJMachO.m: -------------------------------------------------------------------------------- 1 | // 2 | // MJMachO.m 3 | // MJAppTools 4 | // 5 | // Created by MJ Lee on 2018/1/27. 6 | // Copyright © 2018年 MJ Lee. All rights reserved. 7 | // 8 | 9 | #import "MJMachO.h" 10 | #import 11 | #import 12 | #import "NSFileHandle+Extension.h" 13 | 14 | #define MJEndianConvert(big, value) \ 15 | ((big) ? OSSwapInt32((value)) : (value)) 16 | 17 | @implementation MJMachO 18 | 19 | + (instancetype)machOWithFileHandle:(NSFileHandle *)handle 20 | { 21 | return [[self alloc] initWithFileHandle:handle]; 22 | } 23 | 24 | - (instancetype)initWithFileHandle:(NSFileHandle *)handle 25 | { 26 | if (self = [super init]) { 27 | uint32_t magic = [handle mj_staticReadUint32]; 28 | if (magic == FAT_CIGAM || magic == FAT_MAGIC) { // FAT 29 | [self setupFat:handle]; 30 | } else if (magic == MH_MAGIC || magic == MH_CIGAM 31 | || magic == MH_MAGIC_64 || magic == MH_CIGAM_64) { 32 | [self setupMachO:handle]; 33 | } else { 34 | return nil; 35 | } 36 | } 37 | return self; 38 | } 39 | 40 | - (void)setupMachO:(NSFileHandle *)handle 41 | { 42 | // magic 43 | uint32_t magic = [handle mj_staticReadUint32]; 44 | 45 | // header 46 | struct mach_header header; 47 | int headerLength = sizeof(struct mach_header); 48 | BOOL bigEndian = (magic == MH_CIGAM); 49 | BOOL is64bit = NO; 50 | if (magic == MH_MAGIC_64 || magic == MH_CIGAM_64) { 51 | headerLength = sizeof(struct mach_header_64); 52 | bigEndian = (magic == MH_CIGAM_64); 53 | is64bit = YES; 54 | } 55 | 56 | // 读取头部数据 57 | [handle mj_readData:&header length:headerLength]; 58 | uint32_t cputype = MJEndianConvert(bigEndian, header.cputype); 59 | uint32_t cpusubtype = MJEndianConvert(bigEndian, header.cpusubtype); 60 | if (cputype == CPU_TYPE_X86_64) { 61 | self.architecture = @"x86_64"; 62 | } else if (cputype == CPU_TYPE_X86) { 63 | if (cpusubtype == CPU_SUBTYPE_I386_ALL) { 64 | self.architecture = @"i386"; 65 | } else if (cpusubtype == CPU_SUBTYPE_X86_ALL) { 66 | self.architecture = @"x86"; 67 | } 68 | } else if (cputype == CPU_TYPE_ARM64) { 69 | self.architecture = @"arm_64"; 70 | } else if (cputype == CPU_TYPE_ARM) { 71 | if (cpusubtype == CPU_SUBTYPE_ARM_V6) { 72 | self.architecture = @"arm_v6"; 73 | } else if (cpusubtype == CPU_SUBTYPE_ARM_V6) { 74 | self.architecture = @"arm_v6"; 75 | } else if (cpusubtype == CPU_SUBTYPE_ARM_V7) { 76 | self.architecture = @"arm_v7"; 77 | } else if (cpusubtype == CPU_SUBTYPE_ARM_V7S) { 78 | self.architecture = @"arm_v7s"; 79 | } 80 | } 81 | 82 | // lc的数量 83 | uint32_t ncmds = MJEndianConvert(bigEndian, header.ncmds); 84 | // 遍历lc 85 | for (int i = 0; i < ncmds; i++) { 86 | struct load_command lc; 87 | [handle mj_staticReadData:&lc length:sizeof(struct load_command)]; 88 | 89 | if (lc.cmd == LC_ENCRYPTION_INFO || lc.cmd == LC_ENCRYPTION_INFO_64) { 90 | struct encryption_info_command eic; 91 | [handle mj_readData:&eic length:sizeof(struct encryption_info_command)]; 92 | self.encrypted = (eic.cryptid != 0); 93 | break; 94 | } 95 | 96 | [handle seekToFileOffset:handle.offsetInFile + lc.cmdsize]; 97 | } 98 | } 99 | 100 | - (void)setupFat:(NSFileHandle *)handle 101 | { 102 | self.fat = YES; 103 | 104 | // fat头 105 | struct fat_header header; 106 | [handle mj_readData:&header length:sizeof(struct fat_header)]; 107 | BOOL bigEndian = (header.magic == FAT_CIGAM); 108 | 109 | // 架构数量 110 | uint32_t archCount = MJEndianConvert(bigEndian, header.nfat_arch); 111 | NSMutableArray *machOs = [NSMutableArray arrayWithCapacity:archCount]; 112 | 113 | for (int i = 0; i < archCount; i++) { 114 | // 读取一个架构的元数据 115 | struct fat_arch arch; 116 | [handle mj_readData:&arch length:sizeof(struct fat_arch)]; 117 | // 保留偏移 118 | unsigned long long archMetaOffset = handle.offsetInFile; 119 | 120 | // 偏移到架构具体数据的开始 121 | [handle seekToFileOffset:MJEndianConvert(bigEndian, arch.offset)]; 122 | MJMachO *machO = [[[self class] alloc] init]; 123 | [machO setupMachO:handle]; 124 | if (machO.isEncrypted) { 125 | self.encrypted = YES; 126 | } 127 | [machOs addObject:machO]; 128 | 129 | // 跳过这个架构的元数据 130 | [handle seekToFileOffset:archMetaOffset]; 131 | } 132 | 133 | self.machOs = machOs; 134 | } 135 | 136 | @end 137 | -------------------------------------------------------------------------------- /MJAppTools/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // MJAppTools-iOS 4 | // 5 | // Created by MJ Lee on 2018/1/27. 6 | // Copyright © 2018年 MJ Lee. All rights reserved. 7 | // 8 | 9 | #import "MJAppTools.h" 10 | #import "MJMachO.h" 11 | #import 12 | #import "MJPrintTools.h" 13 | 14 | #define MJEncryptedString @"加壳" 15 | #define MJDecryptedString @"未加壳" 16 | 17 | #define MJPrintNewLine printf("\n") 18 | #define MJPrintDivider(n) \ 19 | NSMutableString *dividerString = [NSMutableString string]; \ 20 | for (int i = 0; i<(n); i++) { \ 21 | [dividerString appendString:@"-"]; \ 22 | } \ 23 | [MJPrintTools print:dividerString]; 24 | 25 | static NSString *MJPrintColorCount; 26 | static NSString *MJPrintColorNo; 27 | static NSString *MJPrintColorCrypt; 28 | static NSString *MJPrintColorName; 29 | static NSString *MJPrintColorPath; 30 | static NSString *MJPrintColorId; 31 | static NSString *MJPrintColorArch; 32 | static NSString *MJPrintColorTip; 33 | 34 | void print_usage(void); 35 | void list_machO(MJMachO *machO); 36 | void list_app(MJApp *app, int index); 37 | void list_apps(MJListAppsType type, NSString *regex); 38 | void init_colors(void); 39 | 40 | int main(int argc, const char * argv[]) { 41 | @autoreleasepool { 42 | init_colors(); 43 | 44 | BOOL gt_ios8 = ([[[UIDevice currentDevice] systemVersion] compare:@"8" options:NSNumericSearch] != NSOrderedAscending); 45 | if (!gt_ios8) { 46 | [MJPrintTools printError:@"MJAppTools目前不支持iOS8以下系统\n"]; 47 | return 0; 48 | } 49 | 50 | if (argc == 1) { // 参数不够 51 | print_usage(); 52 | return 0; 53 | } 54 | 55 | const char *firstArg = argv[1]; 56 | if (firstArg[0] == '-' && firstArg[1] == 'l') { 57 | NSString *regex = nil; 58 | if (argc > 2) { 59 | regex = [NSString stringWithUTF8String:argv[2]]; 60 | } 61 | 62 | if (strcmp(firstArg, "-le") == 0) { 63 | list_apps(MJListAppsTypeUserEncrypted, regex); 64 | } else if (strcmp(firstArg, "-ld") == 0) { 65 | list_apps(MJListAppsTypeUserDecrypted, regex); 66 | } else if (strcmp(firstArg, "-ls") == 0) { 67 | list_apps(MJListAppsTypeSystem, regex); 68 | } else { 69 | list_apps(MJListAppsTypeUser, regex); 70 | } 71 | } else { 72 | print_usage(); 73 | } 74 | } 75 | return 0; 76 | } 77 | 78 | void init_colors() 79 | { 80 | MJPrintColorCount = MJPrintColorMagenta; 81 | MJPrintColorNo = MJPrintColorDefault; 82 | MJPrintColorName = MJPrintColorRed; 83 | MJPrintColorPath = MJPrintColorBlue; 84 | MJPrintColorCrypt = MJPrintColorMagenta; 85 | MJPrintColorId = MJPrintColorCyan; 86 | MJPrintColorArch = MJPrintColorGreen; 87 | MJPrintColorTip = MJPrintColorCyan; 88 | } 89 | 90 | void print_usage() 91 | { 92 | [MJPrintTools printColor:MJPrintColorTip format:@" -l "]; 93 | [MJPrintTools print:@"\t列出用户安装的应用\n"]; 94 | 95 | [MJPrintTools printColor:MJPrintColorTip format:@" -le "]; 96 | [MJPrintTools print:@"\t列出用户安装的"]; 97 | [MJPrintTools printColor:MJPrintColorCrypt format:MJEncryptedString]; 98 | [MJPrintTools print:@"应用\n"]; 99 | 100 | [MJPrintTools printColor:MJPrintColorTip format:@" -ld "]; 101 | [MJPrintTools print:@"\t列出用户安装的"]; 102 | [MJPrintTools printColor:MJPrintColorCrypt format:MJDecryptedString]; 103 | [MJPrintTools print:@"应用\n"]; 104 | 105 | [MJPrintTools printColor:MJPrintColorTip format:@" -ls "]; 106 | [MJPrintTools print:@"\t列出"]; 107 | [MJPrintTools printColor:MJPrintColorCrypt format:@"系统"]; 108 | [MJPrintTools print:@"的应用\n"]; 109 | } 110 | 111 | void list_app(MJApp *app, int index) 112 | { 113 | [MJPrintTools print:@"# "]; 114 | [MJPrintTools printColor:MJPrintColorNo format:@"%02d ", index +1]; 115 | [MJPrintTools print:@"【"]; 116 | [MJPrintTools printColor:MJPrintColorName format:@"%@", app.displayName]; 117 | [MJPrintTools print:@"】 "]; 118 | [MJPrintTools print:@"<"]; 119 | [MJPrintTools printColor:MJPrintColorId format:@"%@", app.bundleIdentifier]; 120 | [MJPrintTools print:@">"]; 121 | 122 | MJPrintNewLine; 123 | [MJPrintTools print:@" "]; 124 | [MJPrintTools printColor:MJPrintColorPath format:app.bundlePath]; 125 | 126 | if (app.dataPath.length) { 127 | MJPrintNewLine; 128 | [MJPrintTools print:@" "]; 129 | [MJPrintTools printColor:MJPrintColorPath format:app.dataPath]; 130 | } 131 | 132 | if (app.executable.isFat) { 133 | MJPrintNewLine; 134 | [MJPrintTools print:@" "]; 135 | [MJPrintTools printColor:MJPrintColorArch format:@"Universal binary"]; 136 | for (MJMachO *machO in app.executable.machOs) { 137 | MJPrintNewLine; 138 | printf(" "); 139 | list_machO(machO); 140 | } 141 | } else { 142 | MJPrintNewLine; 143 | [MJPrintTools print:@" "]; 144 | list_machO(app.executable); 145 | } 146 | } 147 | 148 | void list_apps(MJListAppsType type, NSString *regex) 149 | { 150 | [MJAppTools listUserAppsWithType:type regex:regex operation:^(NSArray *apps) { 151 | [MJPrintTools print:@"# 一共"]; 152 | [MJPrintTools printColor:MJPrintColorCount format:@"%zd", apps.count]; 153 | [MJPrintTools print:@"个"]; 154 | if (type == MJListAppsTypeUserDecrypted) { 155 | [MJPrintTools printColor:MJPrintColorCrypt format:MJDecryptedString]; 156 | } else if (type == MJListAppsTypeUserEncrypted) { 157 | [MJPrintTools printColor:MJPrintColorCrypt format:MJEncryptedString]; 158 | } else if (type == MJListAppsTypeSystem) { 159 | [MJPrintTools printColor:MJPrintColorCrypt format:@"系统"]; 160 | } 161 | [MJPrintTools print:@"应用"]; 162 | 163 | for (int i = 0; i < apps.count; i++) { 164 | MJPrintNewLine; 165 | MJPrintDivider(5); 166 | MJPrintNewLine; 167 | list_app(apps[i], i); 168 | } 169 | MJPrintNewLine; 170 | }]; 171 | } 172 | 173 | void list_machO(MJMachO *machO) 174 | { 175 | [MJPrintTools printColor:MJPrintColorArch format:machO.architecture]; 176 | if (machO.isEncrypted) { 177 | [MJPrintTools print:@" "]; 178 | [MJPrintTools printColor:MJPrintColorCrypt format:MJEncryptedString]; 179 | } 180 | } 181 | -------------------------------------------------------------------------------- /MJAppTools/SystemHeaders/FBApplicationInfo.h: -------------------------------------------------------------------------------- 1 | 2 | #import "FBBundleInfo.h" 3 | 4 | @interface FBApplicationInfo : FBBundleInfo { 5 | NSString * _appIDEntitlement; 6 | NSSet * _backgroundModes; 7 | BOOL _beta; 8 | BOOL _blocked; 9 | NSURL * _bundleContainerURL; 10 | NSArray * _customMachServices; 11 | NSURL * _dataContainerURL; 12 | NSArray * _deviceFamilies; 13 | NSString * _displayName; 14 | NSNumber * _downloaderDSID; 15 | BOOL _enabled; 16 | NSDictionary * _environmentVariables; 17 | NSURL * _executableURL; 18 | BOOL _exitsOnSuspend; 19 | NSArray * _externalAccessoryProtocols; 20 | BOOL _hasViewServicesEntitlement; 21 | BOOL _initialized; 22 | BOOL _installing; 23 | BOOL _isManaged; 24 | NSNumber * _itemID; 25 | double _lastModifiedDate; 26 | NSDictionary * _lazy_entitlements; 27 | NSString * _lazy_fallbackFolderName; 28 | NSArray * _lazy_folderNames; 29 | float _minimumBrightnessLevel; 30 | BOOL _newsstand; 31 | long _once_entitlements; 32 | long _once_folderNames; 33 | NSString * _preferenceDomain; 34 | BOOL _provisioningProfileValidated; 35 | NSNumber * _purchaserDSID; 36 | int _ratingRank; 37 | NSArray * _requiredCapabilities; 38 | BOOL _requiresPersistentWiFi; 39 | BOOL _restricted; 40 | NSURL * _sandboxURL; 41 | NSString * _sdkVersion; 42 | NSString * _signerIdentity; 43 | unsigned int _supportedInterfaceOrientations; 44 | NSArray * _tags; 45 | unsigned int _type; 46 | BOOL _uninstalling; 47 | } 48 | 49 | @property (getter=_appIDEntitlement, nonatomic, readonly, copy) NSString *appIDEntitlement; 50 | @property (getter=isBeta, nonatomic, readonly) BOOL beta; 51 | @property (getter=isBlocked, nonatomic, readonly) BOOL blocked; 52 | @property (nonatomic, readonly, retain) NSURL *bundleContainerURL; 53 | @property (nonatomic, readonly, retain) NSArray *customMachServices; 54 | @property (copy, nonatomic) NSString *applicationType; 55 | @property (nonatomic, readonly, retain) NSURL *dataContainerURL; 56 | @property (readonly, copy) NSString *debugDescription; 57 | @property (readonly, copy) NSString *description; 58 | @property (nonatomic, readonly, retain) NSArray *deviceFamilies; 59 | @property (nonatomic, readonly, copy) NSString *displayName; 60 | @property (nonatomic, readonly, retain) NSNumber *downloaderDSID; 61 | @property (getter=isEnabled, nonatomic, readonly) BOOL enabled; 62 | @property (nonatomic, readonly, retain) NSDictionary *entitlements; 63 | @property (nonatomic, readonly, retain) NSDictionary *environmentVariables; 64 | @property (nonatomic, readonly, retain) NSURL *executableURL; 65 | @property (getter=isExitsOnSuspend, nonatomic, readonly) BOOL exitsOnSuspend; 66 | @property (nonatomic, readonly, retain) NSArray *externalAccessoryProtocols; 67 | @property (nonatomic, readonly, retain) NSString *fallbackFolderName; 68 | @property (nonatomic, readonly, retain) NSArray *folderNames; 69 | @property (getter=hasFreeDeveloperProvisioningProfile, nonatomic, readonly) BOOL freeDeveloperProvisioningProfile; 70 | @property (nonatomic, readonly) BOOL hasViewServicesEntitlement; 71 | @property (readonly) unsigned int hash; 72 | @property (getter=_isInstalling, setter=_setInstalling:, nonatomic) BOOL installing; 73 | @property (nonatomic, readonly, retain) NSNumber *itemID; 74 | @property (nonatomic, readonly) double lastModifiedDate; 75 | @property (nonatomic, readonly) float minimumBrightnessLevel; 76 | @property (getter=isNewsstand, nonatomic, readonly) BOOL newsstand; 77 | @property (nonatomic, readonly, copy) NSString *preferenceDomain; 78 | @property (getter=isProvisioningProfileValidated, nonatomic, readonly) BOOL provisioningProfileValidated; 79 | @property (nonatomic, readonly, retain) NSNumber *purchaserDSID; 80 | @property (nonatomic, readonly) int ratingRank; 81 | @property (nonatomic, readonly, retain) NSArray *requiredCapabilities; 82 | @property (nonatomic, readonly) BOOL requiresPersistentWiFi; 83 | @property (getter=isRestricted, nonatomic, readonly) BOOL restricted; 84 | @property (nonatomic, readonly, retain) NSURL *sandboxURL; 85 | @property (nonatomic, readonly, copy) NSString *sdkVersion; 86 | @property (nonatomic, readonly) int signatureState; 87 | @property (nonatomic, readonly, copy) NSString *signerIdentity; 88 | @property (readonly) Class superclass; 89 | @property (nonatomic, readonly) unsigned int supportedInterfaceOrientations; 90 | @property (nonatomic, readonly, retain) NSArray *tags; 91 | @property (nonatomic, readonly) unsigned int type; 92 | @property (getter=_isUninstalling, setter=_setUninstalling:, nonatomic) BOOL uninstalling; 93 | @property (getter=hasUniversalProvisioningProfile, nonatomic, readonly) BOOL universalProvisioningProfile; 94 | 95 | + (unsigned int)_applicationTypeForProxy:(id)arg1; 96 | + (void)_buildDefaults:(id)arg1 fromInfo:(id)arg2 entitlements:(id)arg3 appType:(unsigned int)arg4 isOnOrAfterOkemo:(BOOL)arg5; 97 | + (unsigned int)_computeSupportedInterfaceOrientationsWithInfo:(id)arg1 forDefaults:(id)arg2; 98 | + (id)_configureEnvironment:(id)arg1 withInfo:(id)arg2 isPreApex:(BOOL)arg3; 99 | + (id)_genreNameForID:(int)arg1; 100 | 101 | - (id)_appIDEntitlement; 102 | - (id)_applicationTrustData; 103 | - (id)_initForProfileManagerTesting; 104 | - (id)_initWithApplicationProxy:(id)arg1; 105 | - (id)_initWithBundleIdentifier:(id)arg1 url:(id)arg2; 106 | - (id)_initWithBundleProxy:(id)arg1 overrideURL:(id)arg2; 107 | - (BOOL)_isInstalling; 108 | - (BOOL)_isUninstalling; 109 | - (void)_loadFromProxy:(id)arg1; 110 | - (int)_mapSignatureStateFromTrustState:(unsigned int)arg1; 111 | - (void)_once_loadFolderNamesIfNecessary; 112 | - (void)_overrideTags:(id)arg1; 113 | - (id)_profileManager; 114 | - (void)_setInstalling:(BOOL)arg1; 115 | - (void)_setProfileManager:(id)arg1; 116 | - (void)_setUninstalling:(BOOL)arg1; 117 | - (void)acceptApplicationSignatureIdentity; 118 | - (BOOL)builtOnOrAfterSDKVersion:(id)arg1; 119 | - (id)bundleContainerURL; 120 | - (id)customMachServices; 121 | - (id)dataContainerURL; 122 | - (void)dealloc; 123 | - (id)debugDescription; 124 | - (id)defaults; 125 | - (id)description; 126 | - (id)descriptionBuilderWithMultilinePrefix:(id)arg1; 127 | - (id)descriptionWithMultilinePrefix:(id)arg1; 128 | - (id)deviceFamilies; 129 | - (id)displayName; 130 | - (id)downloaderDSID; 131 | - (id)entitlements; 132 | - (id)environmentVariables; 133 | - (id)executableURL; 134 | - (id)externalAccessoryProtocols; 135 | - (id)fallbackFolderName; 136 | - (id)folderNames; 137 | - (BOOL)hasFreeDeveloperProvisioningProfile; 138 | - (BOOL)hasUniversalProvisioningProfile; 139 | - (BOOL)hasViewServicesEntitlement; 140 | - (id)initWithApplicationProxy:(id)arg1; 141 | - (BOOL)isBeta; 142 | - (BOOL)isBlocked; 143 | - (BOOL)isEnabled; 144 | - (BOOL)isExitsOnSuspend; 145 | - (BOOL)isNewsstand; 146 | - (BOOL)isProvisioningProfileValidated; 147 | - (BOOL)isRestricted; 148 | - (id)itemID; 149 | - (double)lastModifiedDate; 150 | - (float)minimumBrightnessLevel; 151 | - (id)preferenceDomain; 152 | - (id)purchaserDSID; 153 | - (int)ratingRank; 154 | - (id)requiredCapabilities; 155 | - (BOOL)requiresPersistentWiFi; 156 | - (id)sandboxURL; 157 | - (id)sdkVersion; 158 | - (int)signatureState; 159 | - (id)signerIdentity; 160 | - (BOOL)statusBarHiddenForInterfaceOrientation:(int)arg1 onDisplay:(id)arg2; 161 | - (id)succinctDescription; 162 | - (id)succinctDescriptionBuilder; 163 | - (unsigned int)supportedInterfaceOrientations; 164 | - (BOOL)supportsAllInterfaceOrientations; 165 | - (BOOL)supportsBackgroundMode:(id)arg1; 166 | - (BOOL)supportsDeviceFamily:(unsigned int)arg1; 167 | - (BOOL)supportsInterfaceOrientation:(int)arg1; 168 | - (id)tags; 169 | - (unsigned int)type; 170 | 171 | @end 172 | -------------------------------------------------------------------------------- /MJAppTools/SystemHeaders/LSApplicationWorkspace.h: -------------------------------------------------------------------------------- 1 | 2 | @interface LSApplicationWorkspace : NSObject { 3 | NSXPCConnection * _connection; 4 | NSMutableDictionary * _createdInstallProgresses; 5 | BOOL _enhancedAppValidationEnabled; 6 | } 7 | 8 | @property (readonly) NSXPCConnection *connection; 9 | @property (readonly) NSMutableDictionary *createdInstallProgresses; 10 | 11 | + (id)activeManagedConfigurationRestrictionUUIDs; 12 | + (id)callbackQueue; 13 | + (id)defaultWorkspace; 14 | 15 | - (id)URLOverrideForURL:(id)arg1; 16 | - (id)URLSchemesOfType:(int)arg1; 17 | - (void)_LSClearSchemaCaches; 18 | - (void)_LSFailedToOpenURL:(id)arg1 withBundle:(id)arg2; 19 | - (BOOL)_LSPrivateDatabaseNeedsRebuild; 20 | - (BOOL)_LSPrivateRebuildApplicationDatabasesForSystemApps:(BOOL)arg1 internal:(BOOL)arg2 user:(BOOL)arg3; 21 | - (void)_LSPrivateSyncWithMobileInstallation; 22 | - (void)_LSSendApplicationIconDidChangeForBundleID:(id)arg1; 23 | - (void)addObserver:(id)arg1; 24 | - (id)allApplications; 25 | - (id)allInstalledApplications; 26 | - (BOOL)allowsAlternateIcons; 27 | - (id)applicationForOpeningResource:(id)arg1; 28 | - (id)applicationForUserActivityDomainName:(id)arg1; 29 | - (id)applicationForUserActivityType:(id)arg1; 30 | - (BOOL)applicationIsInstalled:(id)arg1; 31 | - (id)applicationProxiesWithPlistFlags:(unsigned long)arg1 bundleFlags:(unsigned long long)arg2; 32 | - (id)applicationsAvailableForHandlingURLScheme:(id)arg1; 33 | - (id)applicationsAvailableForOpeningDocument:(id)arg1; 34 | - (id)applicationsAvailableForOpeningURL:(id)arg1; 35 | - (id)applicationsAvailableForOpeningURL:(id)arg1 legacySPI:(BOOL)arg2; 36 | - (id)applicationsForUserActivityType:(id)arg1; 37 | - (id)applicationsForUserActivityType:(id)arg1 limit:(unsigned int)arg2; 38 | - (id)applicationsOfType:(unsigned int)arg1; 39 | - (id)applicationsWithAudioComponents; 40 | - (id)applicationsWithUIBackgroundModes; 41 | - (id)applicationsWithVPNPlugins; 42 | - (id)bundleIdentifiersForMachOUUIDs:(id)arg1 error:(id*)arg2; 43 | - (void)clearAdvertisingIdentifier; 44 | - (void)clearCreatedProgressForBundleID:(id)arg1; 45 | - (id)connection; 46 | - (id)createDeviceIdentifierWithVendorName:(id)arg1 bundleIdentifier:(id)arg2; 47 | - (id)createdInstallProgresses; 48 | - (void)dealloc; 49 | - (id)delegateProxy; 50 | - (id)deviceIdentifierForAdvertising; 51 | - (id)deviceIdentifierForVendor; 52 | - (id)directionsApplications; 53 | - (BOOL)downgradeApplicationToPlaceholder:(id)arg1 withOptions:(id)arg2 error:(id*)arg3; 54 | - (BOOL)enhancedAppLoggingEnabled; 55 | - (void)enumerateApplicationsForSiriWithBlock:(id /* block */)arg1; 56 | - (void)enumerateApplicationsOfType:(unsigned int)arg1 block:(id /* block */)arg2; 57 | - (void)enumerateApplicationsOfType:(unsigned int)arg1 legacySPI:(BOOL)arg2 block:(id /* block */)arg3; 58 | - (void)enumerateBundlesOfType:(unsigned int)arg1 block:(id /* block */)arg2; 59 | - (void)enumerateBundlesOfType:(unsigned int)arg1 legacySPI:(BOOL)arg2 block:(id /* block */)arg3; 60 | - (void)enumerateBundlesOfType:(unsigned int)arg1 usingBlock:(id /* block */)arg2; 61 | - (void)enumeratePluginsMatchingQuery:(id)arg1 withBlock:(id /* block */)arg2; 62 | - (BOOL)establishConnection; 63 | - (BOOL)getClaimedActivityTypes:(id*)arg1 domains:(id*)arg2; 64 | - (void)getKnowledgeUUID:(id*)arg1 andSequenceNumber:(id*)arg2; 65 | - (id)init; 66 | - (BOOL)installApplication:(id)arg1 withOptions:(id)arg2; 67 | - (BOOL)installApplication:(id)arg1 withOptions:(id)arg2 error:(id*)arg3; 68 | - (BOOL)installApplication:(id)arg1 withOptions:(id)arg2 error:(id*)arg3 usingBlock:(id /* block */)arg4; 69 | - (BOOL)installPhaseFinishedForProgress:(id)arg1; 70 | - (id)installProgressForApplication:(id)arg1 withPhase:(unsigned int)arg2; 71 | - (id)installProgressForBundleID:(id)arg1 makeSynchronous:(unsigned char)arg2; 72 | - (id)installedPlugins; 73 | - (BOOL)invalidateIconCache:(id)arg1; 74 | - (BOOL)isApplicationAvailableToOpenURL:(id)arg1 error:(id*)arg2; 75 | - (BOOL)isApplicationAvailableToOpenURL:(id)arg1 includePrivateURLSchemes:(BOOL)arg2 error:(id*)arg3; 76 | - (BOOL)isApplicationAvailableToOpenURLCommon:(id)arg1 includePrivateURLSchemes:(BOOL)arg2 error:(id*)arg3; 77 | - (id)legacyApplicationProxiesListWithType:(unsigned int)arg1; 78 | - (id)machOUUIDsForBundleIdentifiers:(id)arg1 error:(id*)arg2; 79 | - (id)observedInstallProgresses; 80 | - (BOOL)openApplicationWithBundleID:(id)arg1; 81 | - (BOOL)openSensitiveURL:(id)arg1 withOptions:(id)arg2; 82 | - (BOOL)openSensitiveURL:(id)arg1 withOptions:(id)arg2 error:(id*)arg3; 83 | - (BOOL)openURL:(id)arg1; 84 | - (BOOL)openURL:(id)arg1 withOptions:(id)arg2; 85 | - (BOOL)openURL:(id)arg1 withOptions:(id)arg2 error:(id*)arg3; 86 | - (void)openUserActivity:(id)arg1 withApplicationProxy:(id)arg2 completionHandler:(id /* block */)arg3; 87 | - (void)openUserActivity:(id)arg1 withApplicationProxy:(id)arg2 options:(id)arg3 completionHandler:(id /* block */)arg4; 88 | - (id)operationToOpenResource:(id)arg1 usingApplication:(id)arg2 uniqueDocumentIdentifier:(id)arg3 sourceIsManaged:(BOOL)arg4 userInfo:(id)arg5 delegate:(id)arg6; 89 | - (id)operationToOpenResource:(id)arg1 usingApplication:(id)arg2 uniqueDocumentIdentifier:(id)arg3 sourceIsManaged:(BOOL)arg4 userInfo:(id)arg5 options:(id)arg6 delegate:(id)arg7; 90 | - (id)operationToOpenResource:(id)arg1 usingApplication:(id)arg2 uniqueDocumentIdentifier:(id)arg3 userInfo:(id)arg4; 91 | - (id)operationToOpenResource:(id)arg1 usingApplication:(id)arg2 uniqueDocumentIdentifier:(id)arg3 userInfo:(id)arg4 delegate:(id)arg5; 92 | - (id)operationToOpenResource:(id)arg1 usingApplication:(id)arg2 userInfo:(id)arg3; 93 | - (id)placeholderApplications; 94 | - (id)pluginsMatchingQuery:(id)arg1 applyFilter:(id /* block */)arg2; 95 | - (id)pluginsWithIdentifiers:(id)arg1 protocols:(id)arg2 version:(id)arg3; 96 | - (id)pluginsWithIdentifiers:(id)arg1 protocols:(id)arg2 version:(id)arg3 applyFilter:(id /* block */)arg4; 97 | - (id)pluginsWithIdentifiers:(id)arg1 protocols:(id)arg2 version:(id)arg3 withFilter:(id /* block */)arg4; 98 | - (id)privateURLSchemes; 99 | - (id)publicURLSchemes; 100 | - (BOOL)registerApplication:(id)arg1; 101 | - (BOOL)registerApplicationDictionary:(id)arg1; 102 | - (BOOL)registerApplicationDictionary:(id)arg1 withObserverNotification:(int)arg2; 103 | - (BOOL)registerPlugin:(id)arg1; 104 | - (id)remoteObserver; 105 | - (void)removeDeviceIdentifierForVendorName:(id)arg1 bundleIdentifier:(id)arg2; 106 | - (void)removeInstallProgressForBundleID:(id)arg1; 107 | - (void)removeObserver:(id)arg1; 108 | - (id)removedSystemApplications; 109 | - (BOOL)restoreSystemApplication:(id)arg1; 110 | - (void)scanForApplicationStateChangesFromRank:(id)arg1 toRank:(id)arg2; 111 | - (void)scanForApplicationStateChangesWithWhitelist:(id)arg1; 112 | - (void)sendApplicationStateChangedNotificationsFor:(id)arg1; 113 | - (void)sendInstallNotificationForApp:(id)arg1 withPlugins:(id)arg2; 114 | - (void)sendNotificationForApp:(id)arg1 withExtensions:(id)arg2 OperationType:(unsigned int)arg3 success:(BOOL)arg4; 115 | - (void)sendUninstallNotificationForApp:(id)arg1 withPlugins:(id)arg2; 116 | - (BOOL)uninstallApplication:(id)arg1 withOptions:(id)arg2; 117 | - (BOOL)uninstallApplication:(id)arg1 withOptions:(id)arg2 error:(id*)arg3 usingBlock:(id /* block */)arg4; 118 | - (BOOL)uninstallApplication:(id)arg1 withOptions:(id)arg2 usingBlock:(id /* block */)arg3; 119 | - (BOOL)uninstallSystemApplication:(id)arg1 withOptions:(id)arg2 usingBlock:(id /* block */)arg3; 120 | - (BOOL)unregisterApplication:(id)arg1; 121 | - (BOOL)unregisterPlugin:(id)arg1; 122 | - (id)unrestrictedApplications; 123 | - (BOOL)updateRecordForApp:(id)arg1 withSINF:(id)arg2 iTunesMetadata:(id)arg3 error:(id*)arg4; 124 | - (BOOL)updateSINFWithData:(id)arg1 forApplication:(id)arg2 options:(id)arg3 error:(id*)arg4; 125 | - (BOOL)updateiTunesMetadataWithData:(id)arg1 forApplication:(id)arg2 options:(id)arg3 error:(id*)arg4; 126 | 127 | // Image: /System/Library/Frameworks/SafariServices.framework/SafariServices 128 | 129 | - (void)_sf_openURL:(id)arg1 withOptions:(id)arg2 completionHandler:(id /* block */)arg3; 130 | 131 | @end 132 | -------------------------------------------------------------------------------- /MJAppTools/SystemHeaders/LSApplicationProxy.h: -------------------------------------------------------------------------------- 1 | 2 | @interface LSApplicationProxy : NSObject { 3 | NSArray * _activityTypes; 4 | NSString * _applicationVariant; 5 | long _bundleModTime; 6 | NSString * _companionApplicationIdentifier; 7 | NSString * _complicationPrincipalClass; 8 | NSArray * _deviceFamily; 9 | NSString * _deviceIdentifierVendorName; 10 | NSNumber * _downloaderDSID; 11 | NSNumber * _familyID; 12 | NSString * _genre; 13 | NSNumber * _genreID; 14 | unsigned int _installType; 15 | NSNumber * _itemID; 16 | NSString * _itemName; 17 | NSString * _minimumSystemVersion; 18 | unsigned int _originalInstallType; 19 | NSArray * _plugInKitPlugins; 20 | NSArray * _pluginUUIDs; 21 | NSString * _preferredArchitecture; 22 | NSArray * _privateDocumentIconNames; 23 | LSApplicationProxy * _privateDocumentTypeOwner; 24 | NSNumber * _purchaserDSID; 25 | NSString * _ratingLabel; 26 | NSNumber * _ratingRank; 27 | NSDate * _registeredDate; 28 | NSString * _sdkVersion; 29 | NSString * _shortVersionString; 30 | NSString * _sourceAppIdentifier; 31 | NSNumber * _storeFront; 32 | NSArray * _supportedComplicationFamilies; 33 | NSString * _teamID; 34 | BOOL _userInitiatedUninstall; 35 | NSString * _vendorName; 36 | NSNumber * _versionID; 37 | NSString * _watchKitVersion; 38 | } 39 | 40 | @property (nonatomic, readonly) NSNumber *ODRDiskUsage; 41 | @property (nonatomic, readonly) NSArray *UIBackgroundModes; 42 | @property (nonatomic, readonly) NSArray *VPNPlugins; 43 | @property (nonatomic, readonly) NSArray *activityTypes; 44 | @property (nonatomic, readonly) NSArray *appTags; 45 | @property (nonatomic, readonly) NSString *applicationDSID; 46 | @property (nonatomic, readonly) NSString *applicationIdentifier; 47 | @property (nonatomic, readonly) NSString *applicationType; 48 | @property (nonatomic, readonly) NSString *applicationVariant; 49 | @property (nonatomic, readonly) NSArray *audioComponents; 50 | @property (nonatomic, readonly) NSNumber *betaExternalVersionIdentifier; 51 | @property (nonatomic, readonly) long bundleModTime; 52 | @property (nonatomic, readonly) NSString *companionApplicationIdentifier; 53 | @property (readonly) NSString *complicationPrincipalClass; 54 | @property (nonatomic, readonly) NSArray *deviceFamily; 55 | @property (nonatomic, readonly) NSUUID *deviceIdentifierForAdvertising; 56 | @property (nonatomic, readonly) NSUUID *deviceIdentifierForVendor; 57 | @property (nonatomic, readonly) NSArray *directionsModes; 58 | @property (nonatomic, readonly) NSNumber *downloaderDSID; 59 | @property (nonatomic, readonly) NSNumber *dynamicDiskUsage; 60 | @property (nonatomic, readonly) NSArray *externalAccessoryProtocols; 61 | @property (nonatomic, readonly) NSNumber *externalVersionIdentifier; 62 | @property (nonatomic, readonly) NSNumber *familyID; 63 | @property (nonatomic, readonly) BOOL fileSharingEnabled; 64 | @property (getter=isGameCenterEnabled, nonatomic, readonly) BOOL gameCenterEnabled; 65 | @property (nonatomic, readonly) BOOL gameCenterEverEnabled; 66 | @property (nonatomic, readonly) NSString *genre; 67 | @property (nonatomic, readonly) NSNumber *genreID; 68 | @property (readonly) BOOL hasComplication; 69 | @property (nonatomic, readonly) BOOL hasCustomNotification; 70 | @property (nonatomic, readonly) BOOL hasGlance; 71 | @property (nonatomic, readonly) BOOL hasMIDBasedSINF; 72 | @property (nonatomic, readonly) BOOL hasSettingsBundle; 73 | @property (nonatomic, readonly) BOOL iconIsPrerendered; 74 | @property (nonatomic, readonly) NSProgress *installProgress; 75 | @property (nonatomic, readonly) unsigned int installType; 76 | @property (nonatomic, readonly) BOOL isAdHocCodeSigned; 77 | @property (nonatomic, readonly) BOOL isAppUpdate; 78 | @property (nonatomic, readonly) BOOL isBetaApp; 79 | @property (nonatomic, readonly) BOOL isInstalled; 80 | @property (nonatomic, readonly) BOOL isLaunchProhibited; 81 | @property (nonatomic, readonly) BOOL isNewsstandApp; 82 | @property (nonatomic, readonly) BOOL isPlaceholder; 83 | @property (nonatomic, readonly) BOOL isPurchasedReDownload; 84 | @property (nonatomic, readonly) BOOL isRestricted; 85 | @property (nonatomic, readonly) BOOL isStickerProvider; 86 | @property (nonatomic, readonly) BOOL isWatchKitApp; 87 | @property (nonatomic, readonly) NSNumber *itemID; 88 | @property (nonatomic, readonly) NSString *itemName; 89 | @property (nonatomic, readonly) NSString *minimumSystemVersion; 90 | @property (nonatomic, readonly) BOOL missingRequiredSINF; 91 | @property (nonatomic, readonly) unsigned int originalInstallType; 92 | @property (nonatomic, readonly) NSArray *plugInKitPlugins; 93 | @property (nonatomic, readonly) NSString *preferredArchitecture; 94 | @property (nonatomic, readonly) NSNumber *purchaserDSID; 95 | @property (nonatomic, readonly) NSString *ratingLabel; 96 | @property (nonatomic, readonly) NSNumber *ratingRank; 97 | @property (nonatomic, readonly) NSDate *registeredDate; 98 | @property (getter=isRemoveableSystemApp, nonatomic, readonly) BOOL removeableSystemApp; 99 | @property (getter=isRemovedSystemApp, nonatomic, readonly) BOOL removedSystemApp; 100 | @property (nonatomic, readonly) NSArray *requiredDeviceCapabilities; 101 | @property (nonatomic, readonly) NSString *sdkVersion; 102 | @property (nonatomic, readonly) NSString *shortVersionString; 103 | @property (nonatomic, readonly) BOOL shouldSkipWatchAppInstall; 104 | @property (nonatomic, readonly) NSString *sourceAppIdentifier; 105 | @property (nonatomic, readonly) NSNumber *staticDiskUsage; 106 | @property (nonatomic, readonly) NSArray *staticShortcutItems; 107 | @property (nonatomic, readonly) NSString *storeCohortMetadata; 108 | @property (nonatomic, readonly) NSNumber *storeFront; 109 | @property (nonatomic, readonly) NSArray *subgenres; 110 | @property (readonly) NSArray *supportedComplicationFamilies; 111 | @property (nonatomic, readonly) BOOL supportsAudiobooks; 112 | @property (nonatomic, readonly) BOOL supportsExternallyPlayableContent; 113 | @property (nonatomic, readonly) BOOL supportsODR; 114 | @property (nonatomic, readonly) BOOL supportsOpenInPlace; 115 | @property (nonatomic, readonly) BOOL supportsPurgeableLocalStorage; 116 | @property (nonatomic, readonly) NSString *teamID; 117 | @property (nonatomic) BOOL userInitiatedUninstall; 118 | @property (nonatomic, readonly) NSString *vendorName; 119 | @property (nonatomic, readonly) NSString *watchKitVersion; 120 | @property (getter=isWhitelisted, nonatomic, readonly) BOOL whitelisted; 121 | 122 | + (id)applicationProxyForBundleURL:(id)arg1; 123 | + (id)applicationProxyForCompanionIdentifier:(id)arg1; 124 | + (id)applicationProxyForIdentifier:(id)arg1; 125 | + (id)applicationProxyForIdentifier:(id)arg1 placeholder:(BOOL)arg2; 126 | + (id)applicationProxyForItemID:(id)arg1; 127 | + (id)applicationProxyWithBundleUnitID:(unsigned int)arg1; 128 | + (id)iconQueue; 129 | + (BOOL)supportsSecureCoding; 130 | 131 | - (id)ODRDiskUsage; 132 | - (id)UIBackgroundModes; 133 | - (BOOL)UPPValidated; 134 | - (id)VPNPlugins; 135 | - (id)_initWithBundleUnit:(unsigned int)arg1 applicationIdentifier:(id)arg2; 136 | - (id)activityTypes; 137 | - (id)alternateIconName; 138 | - (id)appState; 139 | - (id)appTags; 140 | - (id)applicationDSID; 141 | - (id)applicationIdentifier; 142 | - (id)applicationType; 143 | - (id)applicationVariant; 144 | - (id)audioComponents; 145 | - (id)betaExternalVersionIdentifier; 146 | - (long)bundleModTime; 147 | - (void)clearAdvertisingIdentifier; 148 | - (id)companionApplicationIdentifier; 149 | - (id)complicationPrincipalClass; 150 | - (void)dealloc; 151 | - (id)description; 152 | - (id)deviceFamily; 153 | - (id)deviceIdentifierForAdvertising; 154 | - (id)deviceIdentifierForVendor; 155 | - (id)directionsModes; 156 | - (id)diskUsage; 157 | - (id)downloaderDSID; 158 | - (id)dynamicDiskUsage; 159 | - (void)encodeWithCoder:(id)arg1; 160 | - (id)externalAccessoryProtocols; 161 | - (id)externalVersionIdentifier; 162 | - (id)familyID; 163 | - (BOOL)fileSharingEnabled; 164 | - (BOOL)gameCenterEverEnabled; 165 | - (id)genre; 166 | - (id)genreID; 167 | - (BOOL)hasComplication; 168 | - (BOOL)hasCustomNotification; 169 | - (BOOL)hasGlance; 170 | - (BOOL)hasMIDBasedSINF; 171 | - (BOOL)hasSettingsBundle; 172 | - (id)iconDataForVariant:(int)arg1; 173 | - (id)iconDataForVariant:(int)arg1 preferredIconName:(id)arg2 withOptions:(int)arg3; 174 | - (id)iconDataForVariant:(int)arg1 withOptions:(int)arg2; 175 | - (BOOL)iconIsPrerendered; 176 | - (id)iconStyleDomain; 177 | - (id)initWithCoder:(id)arg1; 178 | - (id)installProgress; 179 | - (id)installProgressSync; 180 | - (unsigned int)installType; 181 | - (BOOL)isAdHocCodeSigned; 182 | - (BOOL)isAppUpdate; 183 | - (BOOL)isBetaApp; 184 | - (BOOL)isGameCenterEnabled; 185 | - (BOOL)isInstalled; 186 | - (BOOL)isLaunchProhibited; 187 | - (BOOL)isNewsstandApp; 188 | - (BOOL)isPlaceholder; 189 | - (BOOL)isPurchasedReDownload; 190 | - (BOOL)isRemoveableSystemApp; 191 | - (BOOL)isRemovedSystemApp; 192 | - (BOOL)isRestricted; 193 | - (BOOL)isStickerProvider; 194 | - (BOOL)isSystemOrInternalApp; 195 | - (BOOL)isWatchKitApp; 196 | - (BOOL)isWhitelisted; 197 | - (id)itemID; 198 | - (id)itemName; 199 | - (id)localizedName; 200 | - (id)localizedNameForContext:(id)arg1; 201 | - (id)localizedShortName; 202 | - (id)minimumSystemVersion; 203 | - (BOOL)missingRequiredSINF; 204 | - (unsigned int)originalInstallType; 205 | - (id)plugInKitPlugins; 206 | - (id)preferredArchitecture; 207 | - (id)primaryIconDataForVariant:(int)arg1; 208 | - (id)privateDocumentIconNames; 209 | - (id)privateDocumentTypeOwner; 210 | - (BOOL)profileValidated; 211 | - (id)purchaserDSID; 212 | - (id)ratingLabel; 213 | - (id)ratingRank; 214 | - (id)registeredDate; 215 | - (id)requiredDeviceCapabilities; 216 | - (id)resourcesDirectoryURL; 217 | - (id)sdkVersion; 218 | - (void)setAlternateIconName:(id)arg1 withResult:(id /* block */)arg2; 219 | - (void)setPrivateDocumentIconNames:(id)arg1; 220 | - (void)setPrivateDocumentTypeOwner:(id)arg1; 221 | - (void)setUserInitiatedUninstall:(BOOL)arg1; 222 | - (id)shortVersionString; 223 | - (BOOL)shouldSkipWatchAppInstall; 224 | - (id)sourceAppIdentifier; 225 | - (id)staticDiskUsage; 226 | - (id)staticShortcutItems; 227 | - (id)storeCohortMetadata; 228 | - (id)storeFront; 229 | - (id)subgenres; 230 | - (id)supportedComplicationFamilies; 231 | - (BOOL)supportsAudiobooks; 232 | - (BOOL)supportsExternallyPlayableContent; 233 | - (BOOL)supportsODR; 234 | - (BOOL)supportsOpenInPlace; 235 | - (BOOL)supportsPurgeableLocalStorage; 236 | - (id)teamID; 237 | - (id)uniqueIdentifier; 238 | - (BOOL)userInitiatedUninstall; 239 | - (id)vendorName; 240 | - (id)watchKitVersion; 241 | 242 | // Image: /System/Library/Frameworks/Intents.framework/Intents 243 | 244 | - (BOOL)_inapptrust_isFirstParty; 245 | 246 | // Image: /System/Library/Frameworks/UIKit.framework/UIKit 247 | 248 | - (struct CGSize { float x1; float x2; })_defaultStyleSize:(id)arg1; 249 | 250 | // Image: /System/Library/PrivateFrameworks/ChatKit.framework/ChatKit 251 | 252 | - (id)__ck_messagesPluginKitProxy; 253 | 254 | // Image: /System/Library/PrivateFrameworks/ManagedConfiguration.framework/MDM.framework/MDM 255 | 256 | + (BOOL)applicationProxyIsMISAuthorizedForBundleID:(id)arg1; 257 | 258 | - (BOOL)isMISAuthorized; 259 | 260 | // Image: /System/Library/PrivateFrameworks/TVMLKit.framework/TVMLKit 261 | 262 | + (id)tvmlKitBundle; 263 | 264 | - (id)tv_applicationLaunchImageName; 265 | 266 | // Image: /System/Library/PrivateFrameworks/UserNotificationsServer.framework/UserNotificationsServer 267 | 268 | + (id)uns_bundleForBundleIdentifier:(id)arg1; 269 | 270 | - (BOOL)_uns_isReallyInstalled; 271 | - (id)uns_bundle; 272 | - (BOOL)uns_isSystemApplication; 273 | - (id)uns_path; 274 | - (BOOL)uns_requiresLocalNotifications; 275 | - (BOOL)uns_sdkVersionOnOrLaterThan:(id)arg1; 276 | - (BOOL)uns_shouldUseDefaultDataProvider; 277 | - (BOOL)uns_usesCloudKit; 278 | - (BOOL)uns_usesLocalNotifications; 279 | 280 | @end 281 | -------------------------------------------------------------------------------- /Release/MJAppTools.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | allow-obliterate-device 6 | 7 | application-identifier 8 | com.apple.springboard 9 | aps-connection-initiate 10 | 11 | checklessPersistentURLTranslation 12 | 13 | com.apple.BTServer.allowRestrictedServices 14 | 15 | com.apple.BTServer.programmaticPairing 16 | 17 | com.apple.CallHistory.sync.allow 18 | 19 | com.apple.CommCenter.fine-grained 20 | 21 | spi 22 | preferences-reset 23 | voice 24 | identity 25 | phone 26 | carrier-settings 27 | 28 | com.apple.CoreRoutine.LocationOfInterest 29 | 30 | com.apple.MobileInternetSharing.allow 31 | 32 | com.apple.QuartzCore.displayable-context 33 | 34 | com.apple.QuartzCore.global-capture 35 | 36 | com.apple.QuartzCore.secure-capture 37 | 38 | com.apple.QuartzCore.secure-mode 39 | 40 | com.apple.SystemConfiguration.SCDynamicStore-write-access 41 | 42 | com.apple.SystemConfiguration.SCPreferences-write-access 43 | 44 | com.apple.AutoWake.xml 45 | preferences.plist 46 | com.apple.radios.plist 47 | 48 | com.apple.aosnotification.aosnotifyd-access 49 | 50 | com.apple.assistant.client 51 | 52 | com.apple.authkit.writer.internal 53 | 54 | com.apple.avfoundation.allow-still-image-capture-shutter-sound-manipulation 55 | 56 | com.apple.backboard.client 57 | 58 | com.apple.backboard.displaybrightness 59 | 60 | com.apple.backboardd.cancelsTouchesInHostedContent 61 | 62 | com.apple.backboardd.hostCanRequireTouchesFromHostedContent 63 | 64 | com.apple.backboardd.lastUserEventTime 65 | 66 | com.apple.backboardd.launchapplications 67 | 68 | com.apple.bulletinboard 69 | 70 | com.apple.bulletinboard.dataprovider 71 | 72 | com.apple.bulletinboard.observer 73 | 74 | com.apple.bulletinboard.serverconduit 75 | 76 | com.apple.bulletinboard.settings 77 | 78 | com.apple.bulletinboard.systemstate 79 | 80 | com.apple.bulletinboard.utilities 81 | 82 | com.apple.cards.all-access 83 | 84 | com.apple.coreaudio.allow-amr-decode 85 | 86 | com.apple.coreaudio.allow-speex-codec 87 | 88 | com.apple.coreduetd.allow 89 | 90 | com.apple.coreduetd.batterysaver.allow 91 | 92 | com.apple.coremedia.allow-pre-wiring-pixel-buffers 93 | 94 | com.apple.coremedia.allow-protected-content-playback 95 | 96 | com.apple.coremedia.virtualdisplaysession 97 | 98 | com.apple.developer.extension-host.widget-extension 99 | 100 | com.apple.duet.expertcenter.consumer 101 | 102 | com.apple.frontboard.app-badge-value-access 103 | 104 | com.apple.frontboard.shutdown 105 | 106 | com.apple.geoservices.navd.clientIdentifier 107 | /System/Library/LocationBundles/CalendarLocation.bundle 108 | com.apple.geoservices.navd.routehypothesis 109 | 110 | com.apple.iapd.accessibility 111 | 112 | com.apple.imagent 113 | 114 | com.apple.imagent.av 115 | 116 | com.apple.imagent.chat 117 | 118 | com.apple.itunesstored.private 119 | 120 | com.apple.keystore.device 121 | 122 | com.apple.keystore.lockassertion 123 | 124 | com.apple.keystore.stash.access 125 | 126 | com.apple.locationd.activity 127 | 128 | com.apple.locationd.authorizeapplications 129 | 130 | com.apple.locationd.effective_bundle 131 | 132 | com.apple.locationd.prompt_behavior 133 | 134 | com.apple.locationd.region_proxy_service 135 | 136 | com.apple.locationd.status 137 | 138 | com.apple.locationd.usage_oracle 139 | 140 | com.apple.locationd.vehicle_data 141 | 142 | com.apple.lsapplicationproxy.deviceidentifierforvendor 143 | 144 | com.apple.managedconfiguration.mdmd-access 145 | 146 | com.apple.managedconfiguration.profiled-access 147 | 148 | com.apple.mediastream.mstreamd-access 149 | 150 | com.apple.messages.composeclient 151 | 152 | com.apple.mobile.deleted.AllowFreeSpace 153 | 154 | com.apple.mobilemail.mailservices 155 | 156 | com.apple.multitasking.systemappassertions 157 | 158 | com.apple.multitasking.termination 159 | 160 | com.apple.nfcd.hwmanager 161 | 162 | com.apple.notificationcenter.widgetcontrollerhascontent 163 | 164 | com.apple.payment.configuration 165 | 166 | com.apple.payment.presentation 167 | 168 | com.apple.private.MobileGestalt.AllowedProtectedKeys 169 | 170 | InverseDeviceID 171 | 172 | com.apple.private.accounts.allaccounts 173 | 174 | com.apple.private.allow-webviewcontroller 175 | 176 | com.apple.private.bmk.allow 177 | 178 | com.apple.private.calendar.allow-suggestions 179 | 180 | com.apple.private.canGetAppLinkInfo 181 | 182 | com.apple.private.canModifyAppLinkPermissions 183 | 184 | com.apple.private.carkit 185 | 186 | com.apple.private.clouddocs.can-grant-access-to-document 187 | 188 | com.apple.private.corerecents 189 | 190 | com.apple.private.coreservices.canopenactivity 191 | 192 | com.apple.private.coreservices.lsuseractivityd.bestappsuggestion 193 | 194 | com.apple.private.game-center 195 | 196 | Account 197 | Games 198 | 199 | com.apple.private.game-center.bypass-authentication 200 | 201 | com.apple.private.healthkit 202 | 203 | com.apple.private.hid.client.event-dispatch 204 | 205 | com.apple.private.hid.client.service-protected 206 | 207 | com.apple.private.hid.manager.client 208 | 209 | com.apple.private.icfcallserver 210 | 211 | com.apple.private.ids.idsquery 212 | 213 | com.apple.private.ids.messaging 214 | 215 | com.apple.private.alloy.bulletinboard 216 | com.apple.madrid 217 | com.apple.private.alloy.siri.phrasespotter 218 | 219 | com.apple.private.ids.messaging.urgent-priority 220 | 221 | com.apple.private.alloy.bulletinboard 222 | com.apple.private.alloy.siri.phrasespotter 223 | 224 | com.apple.private.ids.registration-reset 225 | 226 | com.apple.private.imavcore.imavagent 227 | 228 | com.apple.private.imcore.imdpersistence.database-access 229 | 230 | com.apple.private.imcore.imremoteurlconnection 231 | 232 | com.apple.private.kernel.darkboot 233 | 234 | com.apple.private.kernel.jetsam 235 | 236 | com.apple.private.librarian.can-get-application-info 237 | 238 | com.apple.private.lockdown.finegrained-get 239 | 240 | NULL/ActivationState 241 | NULL/BrickState 242 | NULL/SBLockdownEverRegisteredKey 243 | com.apple.xcode.developerdomain/DeveloperStatus 244 | NULL/BuildExpireTime 245 | 246 | com.apple.private.lockdown.finegrained-remove 247 | 248 | com.apple.mobile.iTunes.store/AppleID 249 | com.apple.mobile.data_sync/Contacts 250 | com.apple.mobile.data_sync/Calendars 251 | com.apple.mobile.data_sync/Bookmarks 252 | com.apple.mobile.data_sync/Mail Accounts 253 | 254 | com.apple.private.mis.online_auth_agent 255 | 256 | com.apple.private.mobileinstall.allowedSPI 257 | 258 | UninstallForLaunchServices 259 | SetCapabilities 260 | Lookup 261 | 262 | com.apple.private.mobilesafari.searchengine 263 | 264 | com.apple.private.network.socket-delegate 265 | 266 | com.apple.private.suggestions 267 | 268 | com.apple.private.tcc.allow 269 | 270 | kTCCServiceAddressBook 271 | kTCCServiceCalendar 272 | kTCCServiceReminders 273 | kTCCServicePhotos 274 | kTCCServiceMicrophone 275 | kTCCServiceCamera 276 | 277 | com.apple.private.tcc.manager 278 | 279 | com.apple.private.ubiquity-kvstore-access 280 | 281 | com.apple.weather 282 | com.apple.stocks 283 | 284 | com.apple.private.xpc.launchd.app-server 285 | 286 | com.apple.remotenotification.access 287 | 288 | com.apple.remotenotification.preferences 289 | 290 | com.apple.securebackupd.access 291 | 292 | com.apple.security.application-groups 293 | 294 | group.com.apple.weather 295 | 296 | com.apple.springboard.activateawayviewplugins 297 | 298 | com.apple.springboard.opensensitiveurl 299 | 300 | com.apple.springboard.openurlswhenlocked 301 | 302 | com.apple.springboard.setbadgestring 303 | 304 | com.apple.springboard.statusbarstyleoverrides 305 | 306 | com.apple.springboard.xzfwk.fullaccess 307 | 308 | com.apple.symptom_analytics.query 309 | 310 | com.apple.symptom_analytics.refresh 311 | 312 | com.apple.symptoms.NetworkOfInterest 313 | 314 | com.apple.telephonyutilities.callservicesd 315 | 316 | access-calls 317 | modify-calls 318 | 319 | com.apple.timed 320 | 321 | com.apple.tzlink.allow 322 | 323 | com.apple.usernotification.notificationschedulerproxy 324 | 325 | com.apple.videoconference.allow-conferencing 326 | 327 | com.apple.visualvoicemail.client 328 | 329 | com.apple.voiceservices.tts.customvoice 330 | 331 | com.apple.voicetrigger.voicetriggerservice 332 | 333 | com.apple.wifi.manager-access 334 | 335 | fairplay-client 336 | 1172857363 337 | keychain-access-groups 338 | 339 | apple 340 | com.apple.preferences 341 | 342 | vm-pressure-level 343 | 344 | 345 | 346 | -------------------------------------------------------------------------------- /MJAppTools.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 48; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 2D08A4EB201DE08D000C227D /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2D08A4EA201DE08D000C227D /* Default-568h@2x.png */; }; 11 | 2D373959201DA389006B6054 /* MJPrintTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D373958201DA389006B6054 /* MJPrintTools.m */; }; 12 | 2DBBEB1D201C8C7000780B3C /* MJApp.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBBEAFB201C6F3800780B3C /* MJApp.m */; }; 13 | 2DBBEB1E201C8C7000780B3C /* MJAppTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBBEAFD201C6F3800780B3C /* MJAppTools.m */; }; 14 | 2DBBEB1F201C8C7000780B3C /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBBEAE5201C6E9C00780B3C /* main.m */; }; 15 | 2DBBEB23201C8EE900780B3C /* NSFileHandle+Extension.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBBEB21201C8EDD00780B3C /* NSFileHandle+Extension.m */; }; 16 | 2DBBEB27201C8FA200780B3C /* MJMachO.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBBEB26201C8FA200780B3C /* MJMachO.m */; }; 17 | /* End PBXBuildFile section */ 18 | 19 | /* Begin PBXFileReference section */ 20 | 2D08A4EA201DE08D000C227D /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; 21 | 2D373957201DA389006B6054 /* MJPrintTools.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MJPrintTools.h; sourceTree = ""; }; 22 | 2D373958201DA389006B6054 /* MJPrintTools.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MJPrintTools.m; sourceTree = ""; }; 23 | 2DBBEAE4201C6E9C00780B3C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 24 | 2DBBEAE5201C6E9C00780B3C /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 25 | 2DBBEAF6201C6F3800780B3C /* MJAppTools.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MJAppTools.h; sourceTree = ""; }; 26 | 2DBBEAF8201C6F3800780B3C /* LSApplicationProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LSApplicationProxy.h; sourceTree = ""; }; 27 | 2DBBEAF9201C6F3800780B3C /* LSApplicationWorkspace.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LSApplicationWorkspace.h; sourceTree = ""; }; 28 | 2DBBEAFA201C6F3800780B3C /* FBApplicationInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FBApplicationInfo.h; sourceTree = ""; }; 29 | 2DBBEAFB201C6F3800780B3C /* MJApp.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MJApp.m; sourceTree = ""; }; 30 | 2DBBEAFC201C6F3800780B3C /* MJApp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MJApp.h; sourceTree = ""; }; 31 | 2DBBEAFD201C6F3800780B3C /* MJAppTools.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MJAppTools.m; sourceTree = ""; }; 32 | 2DBBEB06201C8BB900780B3C /* MJAppTools.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MJAppTools.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33 | 2DBBEB21201C8EDD00780B3C /* NSFileHandle+Extension.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSFileHandle+Extension.m"; sourceTree = ""; }; 34 | 2DBBEB22201C8EDD00780B3C /* NSFileHandle+Extension.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSFileHandle+Extension.h"; sourceTree = ""; }; 35 | 2DBBEB25201C8FA200780B3C /* MJMachO.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MJMachO.h; sourceTree = ""; }; 36 | 2DBBEB26201C8FA200780B3C /* MJMachO.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MJMachO.m; sourceTree = ""; }; 37 | 2DFA8508201ECF5700F3F555 /* FBBundleInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FBBundleInfo.h; sourceTree = ""; }; 38 | /* End PBXFileReference section */ 39 | 40 | /* Begin PBXFrameworksBuildPhase section */ 41 | 2DBBEB03201C8BB900780B3C /* Frameworks */ = { 42 | isa = PBXFrameworksBuildPhase; 43 | buildActionMask = 2147483647; 44 | files = ( 45 | ); 46 | runOnlyForDeploymentPostprocessing = 0; 47 | }; 48 | /* End PBXFrameworksBuildPhase section */ 49 | 50 | /* Begin PBXGroup section */ 51 | 2D06C186201DF5CC00003BDD /* Tools */ = { 52 | isa = PBXGroup; 53 | children = ( 54 | 2D373957201DA389006B6054 /* MJPrintTools.h */, 55 | 2D373958201DA389006B6054 /* MJPrintTools.m */, 56 | 2DBBEAF6201C6F3800780B3C /* MJAppTools.h */, 57 | 2DBBEAFD201C6F3800780B3C /* MJAppTools.m */, 58 | ); 59 | path = Tools; 60 | sourceTree = ""; 61 | }; 62 | 2DBBEAAE201C6E7600780B3C = { 63 | isa = PBXGroup; 64 | children = ( 65 | 2DBBEB07201C8BB900780B3C /* MJAppTools */, 66 | 2DBBEAB8201C6E7600780B3C /* Products */, 67 | ); 68 | sourceTree = ""; 69 | }; 70 | 2DBBEAB8201C6E7600780B3C /* Products */ = { 71 | isa = PBXGroup; 72 | children = ( 73 | 2DBBEB06201C8BB900780B3C /* MJAppTools.app */, 74 | ); 75 | name = Products; 76 | sourceTree = ""; 77 | }; 78 | 2DBBEAF7201C6F3800780B3C /* SystemHeaders */ = { 79 | isa = PBXGroup; 80 | children = ( 81 | 2DBBEAF8201C6F3800780B3C /* LSApplicationProxy.h */, 82 | 2DBBEAF9201C6F3800780B3C /* LSApplicationWorkspace.h */, 83 | 2DBBEAFA201C6F3800780B3C /* FBApplicationInfo.h */, 84 | 2DFA8508201ECF5700F3F555 /* FBBundleInfo.h */, 85 | ); 86 | path = SystemHeaders; 87 | sourceTree = ""; 88 | }; 89 | 2DBBEB07201C8BB900780B3C /* MJAppTools */ = { 90 | isa = PBXGroup; 91 | children = ( 92 | 2D06C186201DF5CC00003BDD /* Tools */, 93 | 2DBBEB24201C8F5600780B3C /* Models */, 94 | 2DBBEB20201C8ECC00780B3C /* Extensions */, 95 | 2DBBEAF7201C6F3800780B3C /* SystemHeaders */, 96 | 2DBBEAE5201C6E9C00780B3C /* main.m */, 97 | 2DBBEAE4201C6E9C00780B3C /* Info.plist */, 98 | 2D08A4EA201DE08D000C227D /* Default-568h@2x.png */, 99 | ); 100 | path = MJAppTools; 101 | sourceTree = ""; 102 | }; 103 | 2DBBEB20201C8ECC00780B3C /* Extensions */ = { 104 | isa = PBXGroup; 105 | children = ( 106 | 2DBBEB22201C8EDD00780B3C /* NSFileHandle+Extension.h */, 107 | 2DBBEB21201C8EDD00780B3C /* NSFileHandle+Extension.m */, 108 | ); 109 | path = Extensions; 110 | sourceTree = ""; 111 | }; 112 | 2DBBEB24201C8F5600780B3C /* Models */ = { 113 | isa = PBXGroup; 114 | children = ( 115 | 2DBBEAFC201C6F3800780B3C /* MJApp.h */, 116 | 2DBBEAFB201C6F3800780B3C /* MJApp.m */, 117 | 2DBBEB25201C8FA200780B3C /* MJMachO.h */, 118 | 2DBBEB26201C8FA200780B3C /* MJMachO.m */, 119 | ); 120 | path = Models; 121 | sourceTree = ""; 122 | }; 123 | /* End PBXGroup section */ 124 | 125 | /* Begin PBXNativeTarget section */ 126 | 2DBBEB05201C8BB900780B3C /* MJAppTools */ = { 127 | isa = PBXNativeTarget; 128 | buildConfigurationList = 2DBBEB19201C8BB900780B3C /* Build configuration list for PBXNativeTarget "MJAppTools" */; 129 | buildPhases = ( 130 | 2DBBEB02201C8BB900780B3C /* Sources */, 131 | 2DBBEB03201C8BB900780B3C /* Frameworks */, 132 | 2DBBEB04201C8BB900780B3C /* Resources */, 133 | 2DBBEB1C201C8BD200780B3C /* ShellScript */, 134 | ); 135 | buildRules = ( 136 | ); 137 | dependencies = ( 138 | ); 139 | name = MJAppTools; 140 | productName = MJAppTools; 141 | productReference = 2DBBEB06201C8BB900780B3C /* MJAppTools.app */; 142 | productType = "com.apple.product-type.application"; 143 | }; 144 | /* End PBXNativeTarget section */ 145 | 146 | /* Begin PBXProject section */ 147 | 2DBBEAAF201C6E7600780B3C /* Project object */ = { 148 | isa = PBXProject; 149 | attributes = { 150 | LastUpgradeCheck = 0900; 151 | ORGANIZATIONNAME = "MJ Lee"; 152 | TargetAttributes = { 153 | 2DBBEB05201C8BB900780B3C = { 154 | CreatedOnToolsVersion = 9.0; 155 | ProvisioningStyle = Automatic; 156 | }; 157 | }; 158 | }; 159 | buildConfigurationList = 2DBBEAB2201C6E7600780B3C /* Build configuration list for PBXProject "MJAppTools" */; 160 | compatibilityVersion = "Xcode 8.0"; 161 | developmentRegion = en; 162 | hasScannedForEncodings = 0; 163 | knownRegions = ( 164 | en, 165 | Base, 166 | ); 167 | mainGroup = 2DBBEAAE201C6E7600780B3C; 168 | productRefGroup = 2DBBEAB8201C6E7600780B3C /* Products */; 169 | projectDirPath = ""; 170 | projectRoot = ""; 171 | targets = ( 172 | 2DBBEB05201C8BB900780B3C /* MJAppTools */, 173 | ); 174 | }; 175 | /* End PBXProject section */ 176 | 177 | /* Begin PBXResourcesBuildPhase section */ 178 | 2DBBEB04201C8BB900780B3C /* Resources */ = { 179 | isa = PBXResourcesBuildPhase; 180 | buildActionMask = 2147483647; 181 | files = ( 182 | 2D08A4EB201DE08D000C227D /* Default-568h@2x.png in Resources */, 183 | ); 184 | runOnlyForDeploymentPostprocessing = 0; 185 | }; 186 | /* End PBXResourcesBuildPhase section */ 187 | 188 | /* Begin PBXShellScriptBuildPhase section */ 189 | 2DBBEB1C201C8BD200780B3C /* ShellScript */ = { 190 | isa = PBXShellScriptBuildPhase; 191 | buildActionMask = 2147483647; 192 | files = ( 193 | ); 194 | inputPaths = ( 195 | ); 196 | outputPaths = ( 197 | ); 198 | runOnlyForDeploymentPostprocessing = 0; 199 | shellPath = /bin/sh; 200 | shellScript = make; 201 | }; 202 | /* End PBXShellScriptBuildPhase section */ 203 | 204 | /* Begin PBXSourcesBuildPhase section */ 205 | 2DBBEB02201C8BB900780B3C /* Sources */ = { 206 | isa = PBXSourcesBuildPhase; 207 | buildActionMask = 2147483647; 208 | files = ( 209 | 2DBBEB23201C8EE900780B3C /* NSFileHandle+Extension.m in Sources */, 210 | 2DBBEB1D201C8C7000780B3C /* MJApp.m in Sources */, 211 | 2DBBEB1E201C8C7000780B3C /* MJAppTools.m in Sources */, 212 | 2DBBEB27201C8FA200780B3C /* MJMachO.m in Sources */, 213 | 2D373959201DA389006B6054 /* MJPrintTools.m in Sources */, 214 | 2DBBEB1F201C8C7000780B3C /* main.m in Sources */, 215 | ); 216 | runOnlyForDeploymentPostprocessing = 0; 217 | }; 218 | /* End PBXSourcesBuildPhase section */ 219 | 220 | /* Begin XCBuildConfiguration section */ 221 | 2DBBEACB201C6E7700780B3C /* Debug */ = { 222 | isa = XCBuildConfiguration; 223 | buildSettings = { 224 | ALWAYS_SEARCH_USER_PATHS = NO; 225 | CLANG_ANALYZER_NONNULL = YES; 226 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 227 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 228 | CLANG_CXX_LIBRARY = "libc++"; 229 | CLANG_ENABLE_MODULES = YES; 230 | CLANG_ENABLE_OBJC_ARC = YES; 231 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 232 | CLANG_WARN_BOOL_CONVERSION = YES; 233 | CLANG_WARN_COMMA = YES; 234 | CLANG_WARN_CONSTANT_CONVERSION = YES; 235 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 236 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 237 | CLANG_WARN_EMPTY_BODY = YES; 238 | CLANG_WARN_ENUM_CONVERSION = YES; 239 | CLANG_WARN_INFINITE_RECURSION = YES; 240 | CLANG_WARN_INT_CONVERSION = YES; 241 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 242 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 243 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 244 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 245 | CLANG_WARN_STRICT_PROTOTYPES = YES; 246 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 247 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 248 | CLANG_WARN_UNREACHABLE_CODE = YES; 249 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 250 | CODE_SIGN_IDENTITY = "iPhone Developer"; 251 | COPY_PHASE_STRIP = NO; 252 | DEBUG_INFORMATION_FORMAT = dwarf; 253 | ENABLE_STRICT_OBJC_MSGSEND = YES; 254 | ENABLE_TESTABILITY = YES; 255 | GCC_C_LANGUAGE_STANDARD = gnu11; 256 | GCC_DYNAMIC_NO_PIC = NO; 257 | GCC_NO_COMMON_BLOCKS = YES; 258 | GCC_OPTIMIZATION_LEVEL = 0; 259 | GCC_PREPROCESSOR_DEFINITIONS = ( 260 | "DEBUG=1", 261 | "$(inherited)", 262 | ); 263 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 264 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 265 | GCC_WARN_UNDECLARED_SELECTOR = YES; 266 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 267 | GCC_WARN_UNUSED_FUNCTION = YES; 268 | GCC_WARN_UNUSED_VARIABLE = YES; 269 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 270 | MTL_ENABLE_DEBUG_INFO = YES; 271 | ONLY_ACTIVE_ARCH = YES; 272 | SDKROOT = iphoneos; 273 | }; 274 | name = Debug; 275 | }; 276 | 2DBBEACC201C6E7700780B3C /* Release */ = { 277 | isa = XCBuildConfiguration; 278 | buildSettings = { 279 | ALWAYS_SEARCH_USER_PATHS = NO; 280 | CLANG_ANALYZER_NONNULL = YES; 281 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 282 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 283 | CLANG_CXX_LIBRARY = "libc++"; 284 | CLANG_ENABLE_MODULES = YES; 285 | CLANG_ENABLE_OBJC_ARC = YES; 286 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 287 | CLANG_WARN_BOOL_CONVERSION = YES; 288 | CLANG_WARN_COMMA = YES; 289 | CLANG_WARN_CONSTANT_CONVERSION = YES; 290 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 291 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 292 | CLANG_WARN_EMPTY_BODY = YES; 293 | CLANG_WARN_ENUM_CONVERSION = YES; 294 | CLANG_WARN_INFINITE_RECURSION = YES; 295 | CLANG_WARN_INT_CONVERSION = YES; 296 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 297 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 298 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 299 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 300 | CLANG_WARN_STRICT_PROTOTYPES = YES; 301 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 302 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 303 | CLANG_WARN_UNREACHABLE_CODE = YES; 304 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 305 | CODE_SIGN_IDENTITY = "iPhone Developer"; 306 | COPY_PHASE_STRIP = NO; 307 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 308 | ENABLE_NS_ASSERTIONS = NO; 309 | ENABLE_STRICT_OBJC_MSGSEND = YES; 310 | GCC_C_LANGUAGE_STANDARD = gnu11; 311 | GCC_NO_COMMON_BLOCKS = YES; 312 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 313 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 314 | GCC_WARN_UNDECLARED_SELECTOR = YES; 315 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 316 | GCC_WARN_UNUSED_FUNCTION = YES; 317 | GCC_WARN_UNUSED_VARIABLE = YES; 318 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 319 | MTL_ENABLE_DEBUG_INFO = NO; 320 | SDKROOT = iphoneos; 321 | VALIDATE_PRODUCT = YES; 322 | }; 323 | name = Release; 324 | }; 325 | 2DBBEB1A201C8BB900780B3C /* Debug */ = { 326 | isa = XCBuildConfiguration; 327 | buildSettings = { 328 | CODE_SIGN_STYLE = Automatic; 329 | DEVELOPMENT_TEAM = ""; 330 | INFOPLIST_FILE = MJAppTools/Info.plist; 331 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 332 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 333 | PRODUCT_BUNDLE_IDENTIFIER = com.mj.mjapptools; 334 | PRODUCT_NAME = "$(TARGET_NAME)"; 335 | TARGETED_DEVICE_FAMILY = "1,2"; 336 | }; 337 | name = Debug; 338 | }; 339 | 2DBBEB1B201C8BB900780B3C /* Release */ = { 340 | isa = XCBuildConfiguration; 341 | buildSettings = { 342 | CODE_SIGN_STYLE = Automatic; 343 | DEVELOPMENT_TEAM = ""; 344 | INFOPLIST_FILE = MJAppTools/Info.plist; 345 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 346 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 347 | PRODUCT_BUNDLE_IDENTIFIER = com.mj.mjapptools; 348 | PRODUCT_NAME = "$(TARGET_NAME)"; 349 | TARGETED_DEVICE_FAMILY = "1,2"; 350 | }; 351 | name = Release; 352 | }; 353 | /* End XCBuildConfiguration section */ 354 | 355 | /* Begin XCConfigurationList section */ 356 | 2DBBEAB2201C6E7600780B3C /* Build configuration list for PBXProject "MJAppTools" */ = { 357 | isa = XCConfigurationList; 358 | buildConfigurations = ( 359 | 2DBBEACB201C6E7700780B3C /* Debug */, 360 | 2DBBEACC201C6E7700780B3C /* Release */, 361 | ); 362 | defaultConfigurationIsVisible = 0; 363 | defaultConfigurationName = Release; 364 | }; 365 | 2DBBEB19201C8BB900780B3C /* Build configuration list for PBXNativeTarget "MJAppTools" */ = { 366 | isa = XCConfigurationList; 367 | buildConfigurations = ( 368 | 2DBBEB1A201C8BB900780B3C /* Debug */, 369 | 2DBBEB1B201C8BB900780B3C /* Release */, 370 | ); 371 | defaultConfigurationIsVisible = 0; 372 | defaultConfigurationName = Release; 373 | }; 374 | /* End XCConfigurationList section */ 375 | }; 376 | rootObject = 2DBBEAAF201C6E7600780B3C /* Project object */; 377 | } 378 | --------------------------------------------------------------------------------