├── .gitignore ├── AppList ├── AppList.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ └── contents.xcworkspacedata └── AppList │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── AppInfo.h │ ├── AppInfo.m │ ├── AppInfoViewController.h │ ├── AppInfoViewController.m │ ├── Assets.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ ├── ViewController.h │ ├── ViewController.m │ └── main.m ├── AppListConsole ├── AppListConsole.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ └── contents.xcworkspacedata └── AppListConsole │ ├── AppInfo.h │ ├── AppInfo.m │ ├── Info.plist │ ├── LSApplicationProxy.h │ ├── LSApplicationWorkspace.h │ ├── LSBundleProxy.h │ └── main.m └── README.md /.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 | *.DS_Store 25 | 26 | ## Obj-C/Swift specific 27 | *.hmap 28 | *.ipa 29 | *.dSYM.zip 30 | *.dSYM 31 | 32 | # CocoaPods 33 | # 34 | # We recommend against adding the Pods directory to your .gitignore. However 35 | # you should judge for yourself, the pros and cons are mentioned at: 36 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 37 | # 38 | # Pods/ 39 | 40 | # Carthage 41 | # 42 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 43 | # Carthage/Checkouts 44 | 45 | Carthage/Build 46 | 47 | # fastlane 48 | # 49 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 50 | # screenshots whenever they are needed. 51 | # For more information about the recommended setup visit: 52 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 53 | 54 | fastlane/report.xml 55 | fastlane/Preview.html 56 | fastlane/screenshots 57 | fastlane/test_output 58 | 59 | # Code Injection 60 | # 61 | # After new code Injection tools there's a generated folder /iOSInjectionProject 62 | # https://github.com/johnno1962/injectionforxcode 63 | 64 | iOSInjectionProject/ 65 | -------------------------------------------------------------------------------- /AppList/AppList.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 48; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | E84365ED1FA188F400BCEC88 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E84365EC1FA188F400BCEC88 /* AppDelegate.m */; }; 11 | E84365F01FA188F400BCEC88 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E84365EF1FA188F400BCEC88 /* ViewController.m */; }; 12 | E84365F31FA188F400BCEC88 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E84365F11FA188F400BCEC88 /* Main.storyboard */; }; 13 | E84365F51FA188F400BCEC88 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E84365F41FA188F400BCEC88 /* Assets.xcassets */; }; 14 | E84365F81FA188F400BCEC88 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E84365F61FA188F400BCEC88 /* LaunchScreen.storyboard */; }; 15 | E84365FB1FA188F400BCEC88 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E84365FA1FA188F400BCEC88 /* main.m */; }; 16 | E860A4CE1FF49DDA00642995 /* AppInfoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E860A4CD1FF49DDA00642995 /* AppInfoViewController.m */; }; 17 | E8D1B1F41FF39E6C000645EA /* AppInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = E8D1B1F31FF39E6C000645EA /* AppInfo.m */; }; 18 | /* End PBXBuildFile section */ 19 | 20 | /* Begin PBXFileReference section */ 21 | E84365E81FA188F400BCEC88 /* AppList.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AppList.app; sourceTree = BUILT_PRODUCTS_DIR; }; 22 | E84365EB1FA188F400BCEC88 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 23 | E84365EC1FA188F400BCEC88 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 24 | E84365EE1FA188F400BCEC88 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 25 | E84365EF1FA188F400BCEC88 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 26 | E84365F21FA188F400BCEC88 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 27 | E84365F41FA188F400BCEC88 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 28 | E84365F71FA188F400BCEC88 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 29 | E84365F91FA188F400BCEC88 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 30 | E84365FA1FA188F400BCEC88 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 31 | E860A4CC1FF49DDA00642995 /* AppInfoViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppInfoViewController.h; sourceTree = ""; }; 32 | E860A4CD1FF49DDA00642995 /* AppInfoViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppInfoViewController.m; sourceTree = ""; }; 33 | E8D1B1F21FF39E6C000645EA /* AppInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppInfo.h; sourceTree = ""; }; 34 | E8D1B1F31FF39E6C000645EA /* AppInfo.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppInfo.m; sourceTree = ""; }; 35 | /* End PBXFileReference section */ 36 | 37 | /* Begin PBXFrameworksBuildPhase section */ 38 | E84365E51FA188F400BCEC88 /* Frameworks */ = { 39 | isa = PBXFrameworksBuildPhase; 40 | buildActionMask = 2147483647; 41 | files = ( 42 | ); 43 | runOnlyForDeploymentPostprocessing = 0; 44 | }; 45 | /* End PBXFrameworksBuildPhase section */ 46 | 47 | /* Begin PBXGroup section */ 48 | E84365DF1FA188F400BCEC88 = { 49 | isa = PBXGroup; 50 | children = ( 51 | E84365EA1FA188F400BCEC88 /* AppList */, 52 | E84365E91FA188F400BCEC88 /* Products */, 53 | ); 54 | sourceTree = ""; 55 | }; 56 | E84365E91FA188F400BCEC88 /* Products */ = { 57 | isa = PBXGroup; 58 | children = ( 59 | E84365E81FA188F400BCEC88 /* AppList.app */, 60 | ); 61 | name = Products; 62 | sourceTree = ""; 63 | }; 64 | E84365EA1FA188F400BCEC88 /* AppList */ = { 65 | isa = PBXGroup; 66 | children = ( 67 | E84365EB1FA188F400BCEC88 /* AppDelegate.h */, 68 | E84365EC1FA188F400BCEC88 /* AppDelegate.m */, 69 | E8D1B1F21FF39E6C000645EA /* AppInfo.h */, 70 | E8D1B1F31FF39E6C000645EA /* AppInfo.m */, 71 | E84365EE1FA188F400BCEC88 /* ViewController.h */, 72 | E84365EF1FA188F400BCEC88 /* ViewController.m */, 73 | E860A4CC1FF49DDA00642995 /* AppInfoViewController.h */, 74 | E860A4CD1FF49DDA00642995 /* AppInfoViewController.m */, 75 | E84365F11FA188F400BCEC88 /* Main.storyboard */, 76 | E84365F41FA188F400BCEC88 /* Assets.xcassets */, 77 | E84365F61FA188F400BCEC88 /* LaunchScreen.storyboard */, 78 | E84365F91FA188F400BCEC88 /* Info.plist */, 79 | E84365FA1FA188F400BCEC88 /* main.m */, 80 | ); 81 | path = AppList; 82 | sourceTree = ""; 83 | }; 84 | /* End PBXGroup section */ 85 | 86 | /* Begin PBXNativeTarget section */ 87 | E84365E71FA188F400BCEC88 /* AppList */ = { 88 | isa = PBXNativeTarget; 89 | buildConfigurationList = E84365FE1FA188F400BCEC88 /* Build configuration list for PBXNativeTarget "AppList" */; 90 | buildPhases = ( 91 | E84365E41FA188F400BCEC88 /* Sources */, 92 | E84365E51FA188F400BCEC88 /* Frameworks */, 93 | E84365E61FA188F400BCEC88 /* Resources */, 94 | ); 95 | buildRules = ( 96 | ); 97 | dependencies = ( 98 | ); 99 | name = AppList; 100 | productName = DataContainer; 101 | productReference = E84365E81FA188F400BCEC88 /* AppList.app */; 102 | productType = "com.apple.product-type.application"; 103 | }; 104 | /* End PBXNativeTarget section */ 105 | 106 | /* Begin PBXProject section */ 107 | E84365E01FA188F400BCEC88 /* Project object */ = { 108 | isa = PBXProject; 109 | attributes = { 110 | LastUpgradeCheck = 0900; 111 | ORGANIZATIONNAME = DeviLeo; 112 | TargetAttributes = { 113 | E84365E71FA188F400BCEC88 = { 114 | CreatedOnToolsVersion = 9.0; 115 | ProvisioningStyle = Automatic; 116 | }; 117 | }; 118 | }; 119 | buildConfigurationList = E84365E31FA188F400BCEC88 /* Build configuration list for PBXProject "AppList" */; 120 | compatibilityVersion = "Xcode 8.0"; 121 | developmentRegion = en; 122 | hasScannedForEncodings = 0; 123 | knownRegions = ( 124 | en, 125 | Base, 126 | ); 127 | mainGroup = E84365DF1FA188F400BCEC88; 128 | productRefGroup = E84365E91FA188F400BCEC88 /* Products */; 129 | projectDirPath = ""; 130 | projectRoot = ""; 131 | targets = ( 132 | E84365E71FA188F400BCEC88 /* AppList */, 133 | ); 134 | }; 135 | /* End PBXProject section */ 136 | 137 | /* Begin PBXResourcesBuildPhase section */ 138 | E84365E61FA188F400BCEC88 /* Resources */ = { 139 | isa = PBXResourcesBuildPhase; 140 | buildActionMask = 2147483647; 141 | files = ( 142 | E84365F81FA188F400BCEC88 /* LaunchScreen.storyboard in Resources */, 143 | E84365F51FA188F400BCEC88 /* Assets.xcassets in Resources */, 144 | E84365F31FA188F400BCEC88 /* Main.storyboard in Resources */, 145 | ); 146 | runOnlyForDeploymentPostprocessing = 0; 147 | }; 148 | /* End PBXResourcesBuildPhase section */ 149 | 150 | /* Begin PBXSourcesBuildPhase section */ 151 | E84365E41FA188F400BCEC88 /* Sources */ = { 152 | isa = PBXSourcesBuildPhase; 153 | buildActionMask = 2147483647; 154 | files = ( 155 | E84365F01FA188F400BCEC88 /* ViewController.m in Sources */, 156 | E860A4CE1FF49DDA00642995 /* AppInfoViewController.m in Sources */, 157 | E8D1B1F41FF39E6C000645EA /* AppInfo.m in Sources */, 158 | E84365FB1FA188F400BCEC88 /* main.m in Sources */, 159 | E84365ED1FA188F400BCEC88 /* AppDelegate.m in Sources */, 160 | ); 161 | runOnlyForDeploymentPostprocessing = 0; 162 | }; 163 | /* End PBXSourcesBuildPhase section */ 164 | 165 | /* Begin PBXVariantGroup section */ 166 | E84365F11FA188F400BCEC88 /* Main.storyboard */ = { 167 | isa = PBXVariantGroup; 168 | children = ( 169 | E84365F21FA188F400BCEC88 /* Base */, 170 | ); 171 | name = Main.storyboard; 172 | sourceTree = ""; 173 | }; 174 | E84365F61FA188F400BCEC88 /* LaunchScreen.storyboard */ = { 175 | isa = PBXVariantGroup; 176 | children = ( 177 | E84365F71FA188F400BCEC88 /* Base */, 178 | ); 179 | name = LaunchScreen.storyboard; 180 | sourceTree = ""; 181 | }; 182 | /* End PBXVariantGroup section */ 183 | 184 | /* Begin XCBuildConfiguration section */ 185 | E84365FC1FA188F400BCEC88 /* Debug */ = { 186 | isa = XCBuildConfiguration; 187 | buildSettings = { 188 | ALWAYS_SEARCH_USER_PATHS = NO; 189 | CLANG_ANALYZER_NONNULL = YES; 190 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 191 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 192 | CLANG_CXX_LIBRARY = "libc++"; 193 | CLANG_ENABLE_MODULES = YES; 194 | CLANG_ENABLE_OBJC_ARC = YES; 195 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 196 | CLANG_WARN_BOOL_CONVERSION = YES; 197 | CLANG_WARN_COMMA = YES; 198 | CLANG_WARN_CONSTANT_CONVERSION = YES; 199 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 200 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 201 | CLANG_WARN_EMPTY_BODY = YES; 202 | CLANG_WARN_ENUM_CONVERSION = YES; 203 | CLANG_WARN_INFINITE_RECURSION = YES; 204 | CLANG_WARN_INT_CONVERSION = YES; 205 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 206 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 207 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 208 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 209 | CLANG_WARN_STRICT_PROTOTYPES = YES; 210 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 211 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 212 | CLANG_WARN_UNREACHABLE_CODE = YES; 213 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 214 | CODE_SIGN_IDENTITY = "iPhone Developer"; 215 | COPY_PHASE_STRIP = NO; 216 | DEBUG_INFORMATION_FORMAT = dwarf; 217 | ENABLE_STRICT_OBJC_MSGSEND = YES; 218 | ENABLE_TESTABILITY = YES; 219 | GCC_C_LANGUAGE_STANDARD = gnu11; 220 | GCC_DYNAMIC_NO_PIC = NO; 221 | GCC_NO_COMMON_BLOCKS = YES; 222 | GCC_OPTIMIZATION_LEVEL = 0; 223 | GCC_PREPROCESSOR_DEFINITIONS = ( 224 | "DEBUG=1", 225 | "$(inherited)", 226 | ); 227 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 228 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 229 | GCC_WARN_UNDECLARED_SELECTOR = YES; 230 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 231 | GCC_WARN_UNUSED_FUNCTION = YES; 232 | GCC_WARN_UNUSED_VARIABLE = YES; 233 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 234 | MTL_ENABLE_DEBUG_INFO = YES; 235 | ONLY_ACTIVE_ARCH = YES; 236 | SDKROOT = iphoneos; 237 | }; 238 | name = Debug; 239 | }; 240 | E84365FD1FA188F400BCEC88 /* Release */ = { 241 | isa = XCBuildConfiguration; 242 | buildSettings = { 243 | ALWAYS_SEARCH_USER_PATHS = NO; 244 | CLANG_ANALYZER_NONNULL = YES; 245 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 246 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 247 | CLANG_CXX_LIBRARY = "libc++"; 248 | CLANG_ENABLE_MODULES = YES; 249 | CLANG_ENABLE_OBJC_ARC = YES; 250 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 251 | CLANG_WARN_BOOL_CONVERSION = YES; 252 | CLANG_WARN_COMMA = YES; 253 | CLANG_WARN_CONSTANT_CONVERSION = YES; 254 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 255 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 256 | CLANG_WARN_EMPTY_BODY = YES; 257 | CLANG_WARN_ENUM_CONVERSION = YES; 258 | CLANG_WARN_INFINITE_RECURSION = YES; 259 | CLANG_WARN_INT_CONVERSION = YES; 260 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 261 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 262 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 263 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 264 | CLANG_WARN_STRICT_PROTOTYPES = YES; 265 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 266 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 267 | CLANG_WARN_UNREACHABLE_CODE = YES; 268 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 269 | CODE_SIGN_IDENTITY = "iPhone Developer"; 270 | COPY_PHASE_STRIP = NO; 271 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 272 | ENABLE_NS_ASSERTIONS = NO; 273 | ENABLE_STRICT_OBJC_MSGSEND = YES; 274 | GCC_C_LANGUAGE_STANDARD = gnu11; 275 | GCC_NO_COMMON_BLOCKS = YES; 276 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 277 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 278 | GCC_WARN_UNDECLARED_SELECTOR = YES; 279 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 280 | GCC_WARN_UNUSED_FUNCTION = YES; 281 | GCC_WARN_UNUSED_VARIABLE = YES; 282 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 283 | MTL_ENABLE_DEBUG_INFO = NO; 284 | SDKROOT = iphoneos; 285 | VALIDATE_PRODUCT = YES; 286 | }; 287 | name = Release; 288 | }; 289 | E84365FF1FA188F400BCEC88 /* Debug */ = { 290 | isa = XCBuildConfiguration; 291 | buildSettings = { 292 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 293 | CODE_SIGN_STYLE = Automatic; 294 | DEVELOPMENT_TEAM = ""; 295 | INFOPLIST_FILE = "$(SRCROOT)/AppList/Info.plist"; 296 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 297 | PRODUCT_BUNDLE_IDENTIFIER = cn.devileo.AppList; 298 | PRODUCT_NAME = "$(TARGET_NAME)"; 299 | TARGETED_DEVICE_FAMILY = "1,2"; 300 | }; 301 | name = Debug; 302 | }; 303 | E84366001FA188F400BCEC88 /* Release */ = { 304 | isa = XCBuildConfiguration; 305 | buildSettings = { 306 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 307 | CODE_SIGN_STYLE = Automatic; 308 | DEVELOPMENT_TEAM = ""; 309 | INFOPLIST_FILE = "$(SRCROOT)/AppList/Info.plist"; 310 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 311 | PRODUCT_BUNDLE_IDENTIFIER = cn.devileo.AppList; 312 | PRODUCT_NAME = "$(TARGET_NAME)"; 313 | TARGETED_DEVICE_FAMILY = "1,2"; 314 | }; 315 | name = Release; 316 | }; 317 | /* End XCBuildConfiguration section */ 318 | 319 | /* Begin XCConfigurationList section */ 320 | E84365E31FA188F400BCEC88 /* Build configuration list for PBXProject "AppList" */ = { 321 | isa = XCConfigurationList; 322 | buildConfigurations = ( 323 | E84365FC1FA188F400BCEC88 /* Debug */, 324 | E84365FD1FA188F400BCEC88 /* Release */, 325 | ); 326 | defaultConfigurationIsVisible = 0; 327 | defaultConfigurationName = Release; 328 | }; 329 | E84365FE1FA188F400BCEC88 /* Build configuration list for PBXNativeTarget "AppList" */ = { 330 | isa = XCConfigurationList; 331 | buildConfigurations = ( 332 | E84365FF1FA188F400BCEC88 /* Debug */, 333 | E84366001FA188F400BCEC88 /* Release */, 334 | ); 335 | defaultConfigurationIsVisible = 0; 336 | defaultConfigurationName = Release; 337 | }; 338 | /* End XCConfigurationList section */ 339 | }; 340 | rootObject = E84365E01FA188F400BCEC88 /* Project object */; 341 | } 342 | -------------------------------------------------------------------------------- /AppList/AppList.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /AppList/AppList/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // DataContainer 4 | // 5 | // Created by Liu Junqi on 10/26/17. 6 | // Copyright © 2017 DeviLeo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /AppList/AppList/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // DataContainer 4 | // 5 | // Created by Liu Junqi on 10/26/17. 6 | // Copyright © 2017 DeviLeo. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | @interface AppDelegate () 12 | 13 | @end 14 | 15 | @implementation AppDelegate 16 | 17 | 18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 19 | // Override point for customization after application launch. 20 | return YES; 21 | } 22 | 23 | 24 | - (void)applicationWillResignActive:(UIApplication *)application { 25 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 26 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 27 | } 28 | 29 | 30 | - (void)applicationDidEnterBackground:(UIApplication *)application { 31 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 32 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 33 | } 34 | 35 | 36 | - (void)applicationWillEnterForeground:(UIApplication *)application { 37 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 38 | } 39 | 40 | 41 | - (void)applicationDidBecomeActive:(UIApplication *)application { 42 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 43 | } 44 | 45 | 46 | - (void)applicationWillTerminate:(UIApplication *)application { 47 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 48 | } 49 | 50 | 51 | @end 52 | -------------------------------------------------------------------------------- /AppList/AppList/AppInfo.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppInfo.h 3 | // DataContainer 4 | // 5 | // Created by Liu Junqi on 12/27/17. 6 | // Copyright © 2017 DeviLeo. All rights reserved. 7 | // 8 | 9 | /* 10 | * localizedName: 腾讯新闻 11 | * shortVersionString: 5.5.20 12 | * vendorName: Tencent Technology (Beijing) Company Limited 13 | * applicationIdentifier: com.tencent.info 14 | * itemID: 399363156 15 | * itemName: 腾讯新闻-事实派的热点资讯娱乐短视频软件 16 | * teamID: 73CRRD7Y4Y 17 | * bundleURL: file:///private/var/containers/Bundle/Application/5511B8AB-E652-4853-82F4-82571ED34B74/QQNews.app 18 | * dataContainerURL: file:///private/var/mobile/Containers/Data/Application/5FA59CF1-DD65-4665-A30E-853629E5B805 19 | * applicationType: User 20 | */ 21 | 22 | #import 23 | 24 | #define ApplicationTypeUser @"User" 25 | #define ApplicationTypeSystem @"System" 26 | 27 | @interface AppInfo : NSObject 28 | 29 | @property (nonatomic, strong) NSString *localizedName; 30 | @property (nonatomic, strong) NSString *shortVersionString; 31 | @property (nonatomic, strong) NSString *vendorName; 32 | @property (nonatomic, strong) NSString *applicationIdentifier; 33 | @property (nonatomic, strong) NSString *itemID; 34 | @property (nonatomic, strong) NSString *itemName; 35 | @property (nonatomic, strong) NSString *teamID; 36 | @property (nonatomic, strong) NSString *bundleURL; 37 | @property (nonatomic, strong) NSString *dataContainerURL; 38 | @property (nonatomic, strong) NSString *applicationType; 39 | 40 | - (instancetype)initWithLSApplicationProxy:(id)proxy; 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /AppList/AppList/AppInfo.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppInfo.m 3 | // DataContainer 4 | // 5 | // Created by Liu Junqi on 12/27/17. 6 | // Copyright © 2017 DeviLeo. All rights reserved. 7 | // 8 | 9 | #import "AppInfo.h" 10 | 11 | @implementation AppInfo 12 | 13 | - (instancetype)initWithLSApplicationProxy:(id)proxy { 14 | self = [super init]; 15 | if (self) { 16 | [self parseInfo:proxy]; 17 | } 18 | return self; 19 | } 20 | 21 | - (void)parseInfo:(id)proxy { 22 | SEL sel_localizedName = NSSelectorFromString(@"localizedName"); 23 | self.localizedName = [proxy performSelector:sel_localizedName]; 24 | 25 | SEL sel_shortVersionString = NSSelectorFromString(@"shortVersionString"); 26 | self.shortVersionString = [proxy performSelector:sel_shortVersionString]; 27 | 28 | SEL sel_vendorName = NSSelectorFromString(@"vendorName"); 29 | self.vendorName = [proxy performSelector:sel_vendorName]; 30 | 31 | SEL sel_applicationIdentifier = NSSelectorFromString(@"applicationIdentifier"); 32 | self.applicationIdentifier = [proxy performSelector:sel_applicationIdentifier]; 33 | 34 | SEL sel_itemID = NSSelectorFromString(@"itemID"); 35 | self.itemID = [proxy performSelector:sel_itemID]; 36 | 37 | SEL sel_itemName = NSSelectorFromString(@"itemName"); 38 | self.itemName = [proxy performSelector:sel_itemName]; 39 | 40 | SEL sel_teamID = NSSelectorFromString(@"teamID"); 41 | self.teamID = [proxy performSelector:sel_teamID]; 42 | 43 | SEL sel_bundleURL = NSSelectorFromString(@"bundleURL"); 44 | self.bundleURL = [proxy performSelector:sel_bundleURL]; 45 | 46 | SEL sel_dataContainerURL = NSSelectorFromString(@"dataContainerURL"); 47 | self.dataContainerURL = [proxy performSelector:sel_dataContainerURL]; 48 | 49 | SEL sel_applicationType = NSSelectorFromString(@"applicationType"); 50 | self.applicationType = [proxy performSelector:sel_applicationType]; 51 | } 52 | 53 | - (NSString *)description { 54 | NSString *s = [NSString stringWithFormat: 55 | @"localizedName: \n%@\n\n" 56 | @"shortVersionString: \n%@\n\n" 57 | @"vendorName: \n%@\n\n" 58 | @"applicationIdentifier: \n%@\n\n" 59 | @"itemID: \n%@\n\n" 60 | @"itemName: \n%@\n\n" 61 | @"teamID: \n%@\n\n" 62 | @"bundleURL: \n%@\n\n" 63 | @"dataContainerURL: \n%@\n\n" 64 | @"applicationType: \n%@\n\n", 65 | _localizedName, 66 | _shortVersionString, 67 | _vendorName, 68 | _applicationIdentifier, 69 | _itemID, 70 | _itemName, 71 | _teamID, 72 | _bundleURL, 73 | _dataContainerURL, 74 | _applicationType]; 75 | return s; 76 | } 77 | 78 | @end 79 | -------------------------------------------------------------------------------- /AppList/AppList/AppInfoViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppInfoViewController.h 3 | // DataContainer 4 | // 5 | // Created by Liu Junqi on 12/28/17. 6 | // Copyright © 2017 DeviLeo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class AppInfo; 12 | 13 | @interface AppInfoViewController : UIViewController 14 | 15 | @property (nonatomic) AppInfo *appInfo; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /AppList/AppList/AppInfoViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppInfoViewController.m 3 | // DataContainer 4 | // 5 | // Created by Liu Junqi on 12/28/17. 6 | // Copyright © 2017 DeviLeo. All rights reserved. 7 | // 8 | 9 | #import "AppInfoViewController.h" 10 | #import "AppInfo.h" 11 | 12 | @interface AppInfoViewController () 13 | 14 | @property (nonatomic, weak) IBOutlet UITextView *tvDetail; 15 | 16 | @end 17 | 18 | @implementation AppInfoViewController 19 | 20 | - (void)viewDidLoad { 21 | [super viewDidLoad]; 22 | // Do any additional setup after loading the view. 23 | self.tvDetail.text = [_appInfo description]; 24 | } 25 | 26 | - (void)didReceiveMemoryWarning { 27 | [super didReceiveMemoryWarning]; 28 | // Dispose of any resources that can be recreated. 29 | } 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /AppList/AppList/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | } 88 | ], 89 | "info" : { 90 | "version" : 1, 91 | "author" : "xcode" 92 | } 93 | } -------------------------------------------------------------------------------- /AppList/AppList/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /AppList/AppList/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | -------------------------------------------------------------------------------- /AppList/AppList/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 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /AppList/AppList/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // DataContainer 4 | // 5 | // Created by Liu Junqi on 10/26/17. 6 | // Copyright © 2017 DeviLeo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /AppList/AppList/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // DataContainer 4 | // 5 | // Created by Liu Junqi on 10/26/17. 6 | // Copyright © 2017 DeviLeo. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | #import "AppInfo.h" 11 | #import "AppInfoViewController.h" 12 | 13 | @interface ViewController () { 14 | AppInfo *_appInfoForSegue; 15 | } 16 | 17 | @property (nonatomic, weak) IBOutlet UITableView *tvTableView; 18 | 19 | @property (nonatomic, strong) NSArray *userApps; 20 | @property (nonatomic, strong) NSArray *systemApps; 21 | @property (nonatomic, strong) NSArray *otherApps; 22 | 23 | @end 24 | 25 | @implementation ViewController 26 | 27 | - (void)viewDidLoad { 28 | [super viewDidLoad]; 29 | // Do any additional setup after loading the view, typically from a nib. 30 | [self displayAllInstalledApps]; 31 | } 32 | 33 | - (void)didReceiveMemoryWarning { 34 | [super didReceiveMemoryWarning]; 35 | // Dispose of any resources that can be recreated. 36 | } 37 | 38 | - (NSArray *)listAllInstalledApps { 39 | Class c = NSClassFromString(@"LSApplicationWorkspace"); 40 | SEL sel = NSSelectorFromString(@"defaultWorkspace"); 41 | NSObject *workspace = [c performSelector:sel]; 42 | SEL selAll = NSSelectorFromString(@"allInstalledApplications"); 43 | NSArray *allInstalledApps = [workspace performSelector:selAll]; // NSArray * 44 | return allInstalledApps; 45 | } 46 | 47 | - (void)displayAllInstalledApps { 48 | NSArray *apps = [self listAllInstalledApps]; 49 | NSMutableArray *userApps = [NSMutableArray arrayWithCapacity:apps.count]; 50 | NSMutableArray *systemApps = [NSMutableArray arrayWithCapacity:apps.count]; 51 | NSMutableArray *otherApps = [NSMutableArray array]; 52 | for (id proxy in apps) { 53 | AppInfo *info = [[AppInfo alloc] initWithLSApplicationProxy:proxy]; 54 | if ([info.applicationType isEqualToString:ApplicationTypeUser]) { 55 | [userApps addObject:info]; 56 | } else if ([info.applicationType isEqualToString:ApplicationTypeSystem]) { 57 | [systemApps addObject:info]; 58 | } else { 59 | [otherApps addObject:info]; 60 | } 61 | } 62 | 63 | NSComparator cmptr = ^NSComparisonResult(AppInfo * _Nonnull obj1, AppInfo * _Nonnull obj2) { 64 | NSString *name1 = obj1.itemName ? : obj1.localizedName; 65 | NSString *name2 = obj2.itemName ? : obj2.localizedName; 66 | NSComparisonResult result = [name1 compare:name2]; 67 | return result; 68 | }; 69 | 70 | [userApps sortUsingComparator:cmptr]; 71 | [systemApps sortUsingComparator:cmptr]; 72 | [otherApps sortUsingComparator:cmptr]; 73 | 74 | self.userApps = userApps; 75 | self.systemApps = systemApps; 76 | self.otherApps = otherApps; 77 | [self.tvTableView reloadData]; 78 | } 79 | 80 | 81 | #pragma mark - UITableViewDataSource 82 | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 83 | if (_otherApps.count == 0) return 2; 84 | else return 3; 85 | } 86 | 87 | - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 88 | if (section == 0) return @"User"; 89 | else if (section == 1) return @"System"; 90 | else return @"Other"; 91 | } 92 | 93 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 94 | if (section == 0) return _userApps.count; 95 | else if (section == 1) return _systemApps.count; 96 | else if (section == 2) return _otherApps.count; 97 | return 0; 98 | } 99 | 100 | - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 101 | return UITableViewAutomaticDimension; 102 | } 103 | 104 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 105 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"BasicCell" forIndexPath:indexPath]; 106 | 107 | NSInteger section = indexPath.section; 108 | NSArray *apps = nil; 109 | if (section == 0) apps = _userApps; 110 | else if (section == 1) apps = _systemApps; 111 | else if (section == 2) apps = _otherApps; 112 | AppInfo *info = apps[indexPath.row]; 113 | cell.textLabel.numberOfLines = 0; 114 | 115 | NSString *name = info.itemName ? : info.localizedName; 116 | cell.textLabel.text = [NSString stringWithFormat:@"%@\n%@", name, info.shortVersionString]; 117 | 118 | return cell; 119 | } 120 | 121 | #pragma mark - UITableViewDelegate 122 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 123 | [tableView deselectRowAtIndexPath:indexPath animated:YES]; 124 | 125 | NSInteger section = indexPath.section; 126 | NSArray *apps = nil; 127 | if (section == 0) apps = _userApps; 128 | else if (section == 1) apps = _systemApps; 129 | else if (section == 2) apps = _otherApps; 130 | AppInfo *info = apps[indexPath.row]; 131 | _appInfoForSegue = info; 132 | 133 | [self performSegueWithIdentifier:@"A2D" sender:self]; 134 | } 135 | 136 | #pragma mark - Navigation 137 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 138 | AppInfoViewController *vc = segue.destinationViewController; 139 | vc.appInfo = _appInfoForSegue; 140 | } 141 | 142 | @end 143 | -------------------------------------------------------------------------------- /AppList/AppList/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // DataContainer 4 | // 5 | // Created by Liu Junqi on 10/26/17. 6 | // Copyright © 2017 DeviLeo. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /AppListConsole/AppListConsole.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 48; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | E853DD6C2005B3BC00151766 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E853DD6B2005B3BC00151766 /* main.m */; }; 11 | E853DD742005B41000151766 /* AppInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = E853DD732005B41000151766 /* AppInfo.m */; }; 12 | E853DD952005DCE500151766 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E853DD942005DCE500151766 /* Foundation.framework */; }; 13 | E853DD992005E80500151766 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E853DD982005E80500151766 /* MobileCoreServices.framework */; }; 14 | /* End PBXBuildFile section */ 15 | 16 | /* Begin PBXFileReference section */ 17 | E853DD592005B3BC00151766 /* AppListConsole.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AppListConsole.app; sourceTree = BUILT_PRODUCTS_DIR; }; 18 | E853DD6A2005B3BC00151766 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 19 | E853DD6B2005B3BC00151766 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 20 | E853DD722005B41000151766 /* AppInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppInfo.h; sourceTree = ""; }; 21 | E853DD732005B41000151766 /* AppInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppInfo.m; sourceTree = ""; }; 22 | E853DD942005DCE500151766 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 23 | E853DD962005E2CF00151766 /* LSApplicationProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LSApplicationProxy.h; sourceTree = ""; }; 24 | E853DD972005E2CF00151766 /* LSApplicationWorkspace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LSApplicationWorkspace.h; sourceTree = ""; }; 25 | E853DD982005E80500151766 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; }; 26 | E853DD9A2005EB0000151766 /* LSBundleProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LSBundleProxy.h; sourceTree = ""; }; 27 | /* End PBXFileReference section */ 28 | 29 | /* Begin PBXFrameworksBuildPhase section */ 30 | E853DD562005B3BC00151766 /* Frameworks */ = { 31 | isa = PBXFrameworksBuildPhase; 32 | buildActionMask = 2147483647; 33 | files = ( 34 | E853DD992005E80500151766 /* MobileCoreServices.framework in Frameworks */, 35 | E853DD952005DCE500151766 /* Foundation.framework in Frameworks */, 36 | ); 37 | runOnlyForDeploymentPostprocessing = 0; 38 | }; 39 | /* End PBXFrameworksBuildPhase section */ 40 | 41 | /* Begin PBXGroup section */ 42 | E853DD502005B3BC00151766 = { 43 | isa = PBXGroup; 44 | children = ( 45 | E853DD5B2005B3BC00151766 /* AppListConsole */, 46 | E853DD5A2005B3BC00151766 /* Products */, 47 | E853DD932005DCE500151766 /* Frameworks */, 48 | ); 49 | sourceTree = ""; 50 | }; 51 | E853DD5A2005B3BC00151766 /* Products */ = { 52 | isa = PBXGroup; 53 | children = ( 54 | E853DD592005B3BC00151766 /* AppListConsole.app */, 55 | ); 56 | name = Products; 57 | sourceTree = ""; 58 | }; 59 | E853DD5B2005B3BC00151766 /* AppListConsole */ = { 60 | isa = PBXGroup; 61 | children = ( 62 | E853DD962005E2CF00151766 /* LSApplicationProxy.h */, 63 | E853DD972005E2CF00151766 /* LSApplicationWorkspace.h */, 64 | E853DD9A2005EB0000151766 /* LSBundleProxy.h */, 65 | E853DD722005B41000151766 /* AppInfo.h */, 66 | E853DD732005B41000151766 /* AppInfo.m */, 67 | E853DD6A2005B3BC00151766 /* Info.plist */, 68 | E853DD6B2005B3BC00151766 /* main.m */, 69 | ); 70 | path = AppListConsole; 71 | sourceTree = ""; 72 | }; 73 | E853DD932005DCE500151766 /* Frameworks */ = { 74 | isa = PBXGroup; 75 | children = ( 76 | E853DD982005E80500151766 /* MobileCoreServices.framework */, 77 | E853DD942005DCE500151766 /* Foundation.framework */, 78 | ); 79 | name = Frameworks; 80 | sourceTree = ""; 81 | }; 82 | /* End PBXGroup section */ 83 | 84 | /* Begin PBXNativeTarget section */ 85 | E853DD582005B3BC00151766 /* AppListConsole */ = { 86 | isa = PBXNativeTarget; 87 | buildConfigurationList = E853DD6F2005B3BC00151766 /* Build configuration list for PBXNativeTarget "AppListConsole" */; 88 | buildPhases = ( 89 | E853DD552005B3BC00151766 /* Sources */, 90 | E853DD562005B3BC00151766 /* Frameworks */, 91 | E853DD572005B3BC00151766 /* Resources */, 92 | ); 93 | buildRules = ( 94 | ); 95 | dependencies = ( 96 | ); 97 | name = AppListConsole; 98 | productName = AppListConsole; 99 | productReference = E853DD592005B3BC00151766 /* AppListConsole.app */; 100 | productType = "com.apple.product-type.application"; 101 | }; 102 | /* End PBXNativeTarget section */ 103 | 104 | /* Begin PBXProject section */ 105 | E853DD512005B3BC00151766 /* Project object */ = { 106 | isa = PBXProject; 107 | attributes = { 108 | LastUpgradeCheck = 0920; 109 | ORGANIZATIONNAME = DeviLeo; 110 | TargetAttributes = { 111 | E853DD582005B3BC00151766 = { 112 | CreatedOnToolsVersion = 9.2; 113 | ProvisioningStyle = Automatic; 114 | }; 115 | }; 116 | }; 117 | buildConfigurationList = E853DD542005B3BC00151766 /* Build configuration list for PBXProject "AppListConsole" */; 118 | compatibilityVersion = "Xcode 8.0"; 119 | developmentRegion = en; 120 | hasScannedForEncodings = 0; 121 | knownRegions = ( 122 | en, 123 | Base, 124 | ); 125 | mainGroup = E853DD502005B3BC00151766; 126 | productRefGroup = E853DD5A2005B3BC00151766 /* Products */; 127 | projectDirPath = ""; 128 | projectRoot = ""; 129 | targets = ( 130 | E853DD582005B3BC00151766 /* AppListConsole */, 131 | ); 132 | }; 133 | /* End PBXProject section */ 134 | 135 | /* Begin PBXResourcesBuildPhase section */ 136 | E853DD572005B3BC00151766 /* Resources */ = { 137 | isa = PBXResourcesBuildPhase; 138 | buildActionMask = 2147483647; 139 | files = ( 140 | ); 141 | runOnlyForDeploymentPostprocessing = 0; 142 | }; 143 | /* End PBXResourcesBuildPhase section */ 144 | 145 | /* Begin PBXSourcesBuildPhase section */ 146 | E853DD552005B3BC00151766 /* Sources */ = { 147 | isa = PBXSourcesBuildPhase; 148 | buildActionMask = 2147483647; 149 | files = ( 150 | E853DD6C2005B3BC00151766 /* main.m in Sources */, 151 | E853DD742005B41000151766 /* AppInfo.m in Sources */, 152 | ); 153 | runOnlyForDeploymentPostprocessing = 0; 154 | }; 155 | /* End PBXSourcesBuildPhase section */ 156 | 157 | /* Begin XCBuildConfiguration section */ 158 | E853DD6D2005B3BC00151766 /* Debug */ = { 159 | isa = XCBuildConfiguration; 160 | buildSettings = { 161 | ALWAYS_SEARCH_USER_PATHS = NO; 162 | CLANG_ANALYZER_NONNULL = YES; 163 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 164 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 165 | CLANG_CXX_LIBRARY = "libc++"; 166 | CLANG_ENABLE_MODULES = YES; 167 | CLANG_ENABLE_OBJC_ARC = YES; 168 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 169 | CLANG_WARN_BOOL_CONVERSION = YES; 170 | CLANG_WARN_COMMA = YES; 171 | CLANG_WARN_CONSTANT_CONVERSION = YES; 172 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 173 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 174 | CLANG_WARN_EMPTY_BODY = YES; 175 | CLANG_WARN_ENUM_CONVERSION = YES; 176 | CLANG_WARN_INFINITE_RECURSION = YES; 177 | CLANG_WARN_INT_CONVERSION = YES; 178 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 179 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 180 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 181 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 182 | CLANG_WARN_STRICT_PROTOTYPES = YES; 183 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 184 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 185 | CLANG_WARN_UNREACHABLE_CODE = YES; 186 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 187 | CODE_SIGN_IDENTITY = "iPhone Developer"; 188 | COPY_PHASE_STRIP = NO; 189 | DEBUG_INFORMATION_FORMAT = dwarf; 190 | ENABLE_STRICT_OBJC_MSGSEND = YES; 191 | ENABLE_TESTABILITY = YES; 192 | GCC_C_LANGUAGE_STANDARD = gnu11; 193 | GCC_DYNAMIC_NO_PIC = NO; 194 | GCC_NO_COMMON_BLOCKS = YES; 195 | GCC_OPTIMIZATION_LEVEL = 0; 196 | GCC_PREPROCESSOR_DEFINITIONS = ( 197 | "DEBUG=1", 198 | "$(inherited)", 199 | ); 200 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 201 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 202 | GCC_WARN_UNDECLARED_SELECTOR = YES; 203 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 204 | GCC_WARN_UNUSED_FUNCTION = YES; 205 | GCC_WARN_UNUSED_VARIABLE = YES; 206 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 207 | MTL_ENABLE_DEBUG_INFO = YES; 208 | ONLY_ACTIVE_ARCH = YES; 209 | SDKROOT = iphoneos; 210 | }; 211 | name = Debug; 212 | }; 213 | E853DD6E2005B3BC00151766 /* Release */ = { 214 | isa = XCBuildConfiguration; 215 | buildSettings = { 216 | ALWAYS_SEARCH_USER_PATHS = NO; 217 | CLANG_ANALYZER_NONNULL = YES; 218 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 219 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 220 | CLANG_CXX_LIBRARY = "libc++"; 221 | CLANG_ENABLE_MODULES = YES; 222 | CLANG_ENABLE_OBJC_ARC = YES; 223 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 224 | CLANG_WARN_BOOL_CONVERSION = YES; 225 | CLANG_WARN_COMMA = YES; 226 | CLANG_WARN_CONSTANT_CONVERSION = YES; 227 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 228 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 229 | CLANG_WARN_EMPTY_BODY = YES; 230 | CLANG_WARN_ENUM_CONVERSION = YES; 231 | CLANG_WARN_INFINITE_RECURSION = YES; 232 | CLANG_WARN_INT_CONVERSION = YES; 233 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 234 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 235 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 236 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 237 | CLANG_WARN_STRICT_PROTOTYPES = YES; 238 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 239 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 240 | CLANG_WARN_UNREACHABLE_CODE = YES; 241 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 242 | CODE_SIGN_IDENTITY = "iPhone Developer"; 243 | COPY_PHASE_STRIP = NO; 244 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 245 | ENABLE_NS_ASSERTIONS = NO; 246 | ENABLE_STRICT_OBJC_MSGSEND = YES; 247 | GCC_C_LANGUAGE_STANDARD = gnu11; 248 | GCC_NO_COMMON_BLOCKS = YES; 249 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 250 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 251 | GCC_WARN_UNDECLARED_SELECTOR = YES; 252 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 253 | GCC_WARN_UNUSED_FUNCTION = YES; 254 | GCC_WARN_UNUSED_VARIABLE = YES; 255 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 256 | MTL_ENABLE_DEBUG_INFO = NO; 257 | SDKROOT = iphoneos; 258 | VALIDATE_PRODUCT = YES; 259 | }; 260 | name = Release; 261 | }; 262 | E853DD702005B3BC00151766 /* Debug */ = { 263 | isa = XCBuildConfiguration; 264 | buildSettings = { 265 | CODE_SIGN_STYLE = Automatic; 266 | DEVELOPMENT_TEAM = ""; 267 | INFOPLIST_FILE = AppListConsole/Info.plist; 268 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 269 | PRODUCT_BUNDLE_IDENTIFIER = cn.devileo.AppListConsole; 270 | PRODUCT_NAME = "$(TARGET_NAME)"; 271 | TARGETED_DEVICE_FAMILY = "1,2"; 272 | }; 273 | name = Debug; 274 | }; 275 | E853DD712005B3BC00151766 /* Release */ = { 276 | isa = XCBuildConfiguration; 277 | buildSettings = { 278 | CODE_SIGN_STYLE = Automatic; 279 | DEVELOPMENT_TEAM = ""; 280 | INFOPLIST_FILE = AppListConsole/Info.plist; 281 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 282 | PRODUCT_BUNDLE_IDENTIFIER = cn.devileo.AppListConsole; 283 | PRODUCT_NAME = "$(TARGET_NAME)"; 284 | TARGETED_DEVICE_FAMILY = "1,2"; 285 | }; 286 | name = Release; 287 | }; 288 | /* End XCBuildConfiguration section */ 289 | 290 | /* Begin XCConfigurationList section */ 291 | E853DD542005B3BC00151766 /* Build configuration list for PBXProject "AppListConsole" */ = { 292 | isa = XCConfigurationList; 293 | buildConfigurations = ( 294 | E853DD6D2005B3BC00151766 /* Debug */, 295 | E853DD6E2005B3BC00151766 /* Release */, 296 | ); 297 | defaultConfigurationIsVisible = 0; 298 | defaultConfigurationName = Release; 299 | }; 300 | E853DD6F2005B3BC00151766 /* Build configuration list for PBXNativeTarget "AppListConsole" */ = { 301 | isa = XCConfigurationList; 302 | buildConfigurations = ( 303 | E853DD702005B3BC00151766 /* Debug */, 304 | E853DD712005B3BC00151766 /* Release */, 305 | ); 306 | defaultConfigurationIsVisible = 0; 307 | defaultConfigurationName = Release; 308 | }; 309 | /* End XCConfigurationList section */ 310 | }; 311 | rootObject = E853DD512005B3BC00151766 /* Project object */; 312 | } 313 | -------------------------------------------------------------------------------- /AppListConsole/AppListConsole.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /AppListConsole/AppListConsole/AppInfo.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppInfo.h 3 | // DataContainer 4 | // 5 | // Created by Liu Junqi on 12/27/17. 6 | // Copyright © 2017 DeviLeo. All rights reserved. 7 | // 8 | 9 | /* 10 | * localizedName: 腾讯新闻 11 | * shortVersionString: 5.5.20 12 | * vendorName: Tencent Technology (Beijing) Company Limited 13 | * applicationIdentifier: com.tencent.info 14 | * itemID: 399363156 15 | * itemName: 腾讯新闻-事实派的热点资讯娱乐短视频软件 16 | * teamID: 73CRRD7Y4Y 17 | * bundleURL: file:///private/var/containers/Bundle/Application/5511B8AB-E652-4853-82F4-82571ED34B74/QQNews.app 18 | * dataContainerURL: file:///private/var/mobile/Containers/Data/Application/5FA59CF1-DD65-4665-A30E-853629E5B805 19 | * applicationType: User 20 | */ 21 | 22 | #import 23 | 24 | @class LSApplicationProxy; 25 | 26 | #define ApplicationTypeUser @"User" 27 | #define ApplicationTypeSystem @"System" 28 | 29 | @interface AppInfo : NSObject 30 | 31 | @property (nonatomic, strong) NSString *localizedName; 32 | @property (nonatomic, strong) NSString *shortVersionString; 33 | @property (nonatomic, strong) NSString *vendorName; 34 | @property (nonatomic, strong) NSString *applicationIdentifier; 35 | @property (nonatomic, strong) NSString *itemID; 36 | @property (nonatomic, strong) NSString *itemName; 37 | @property (nonatomic, strong) NSString *teamID; 38 | @property (nonatomic, strong) NSString *bundleURL; 39 | @property (nonatomic, strong) NSString *dataContainerURL; 40 | @property (nonatomic, strong) NSString *applicationType; 41 | 42 | - (instancetype)initWithLSApplicationProxy:(LSApplicationProxy *)proxy; 43 | - (NSString *)shortDescription; 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /AppListConsole/AppListConsole/AppInfo.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppInfo.m 3 | // DataContainer 4 | // 5 | // Created by Liu Junqi on 12/27/17. 6 | // Copyright © 2017 DeviLeo. All rights reserved. 7 | // 8 | 9 | #import "AppInfo.h" 10 | #import "LSApplicationProxy.h" 11 | 12 | @implementation AppInfo 13 | 14 | - (instancetype)initWithLSApplicationProxy:(LSApplicationProxy *)proxy { 15 | self = [super init]; 16 | if (self) { 17 | [self parseInfo:proxy]; 18 | } 19 | return self; 20 | } 21 | 22 | - (void)parseInfo:(LSApplicationProxy *)proxy { 23 | self.localizedName = proxy.localizedName; 24 | self.shortVersionString = proxy.shortVersionString; 25 | self.vendorName = proxy.vendorName; 26 | self.applicationIdentifier = proxy.applicationIdentifier; 27 | self.itemID = [proxy.itemID stringValue]; 28 | self.itemName = proxy.itemName; 29 | self.teamID = proxy.teamID; 30 | self.bundleURL = [proxy.bundleURL absoluteString]; 31 | self.dataContainerURL = [proxy.dataContainerURL absoluteString]; 32 | self.applicationType = proxy.applicationType; 33 | } 34 | 35 | - (NSString *)shortDescription { 36 | NSString *s = [NSString stringWithFormat:@"%@(%@)\n", 37 | _itemName ? : _localizedName, 38 | _applicationIdentifier]; 39 | return s; 40 | } 41 | 42 | - (NSString *)description { 43 | NSString *s = [NSString stringWithFormat: 44 | @"localizedName: \n%@\n\n" 45 | @"shortVersionString: \n%@\n\n" 46 | @"vendorName: \n%@\n\n" 47 | @"applicationIdentifier: \n%@\n\n" 48 | @"itemID: \n%@\n\n" 49 | @"itemName: \n%@\n\n" 50 | @"teamID: \n%@\n\n" 51 | @"bundleURL: \n%@\n\n" 52 | @"dataContainerURL: \n%@\n\n" 53 | @"applicationType: \n%@\n\n", 54 | _localizedName, 55 | _shortVersionString, 56 | _vendorName, 57 | _applicationIdentifier, 58 | _itemID, 59 | _itemName, 60 | _teamID, 61 | _bundleURL, 62 | _dataContainerURL, 63 | _applicationType]; 64 | return s; 65 | } 66 | 67 | @end 68 | -------------------------------------------------------------------------------- /AppListConsole/AppListConsole/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 | UISupportedInterfaceOrientations 28 | 29 | UISupportedInterfaceOrientations~ipad 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationPortraitUpsideDown 33 | UIInterfaceOrientationLandscapeLeft 34 | UIInterfaceOrientationLandscapeRight 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /AppListConsole/AppListConsole/LSApplicationProxy.h: -------------------------------------------------------------------------------- 1 | /* Generated by RuntimeBrowser 2 | Image: /System/Library/Frameworks/MobileCoreServices.framework/MobileCoreServices 3 | */ 4 | 5 | #import "LSBundleProxy.h" 6 | 7 | @interface LSApplicationProxy : LSBundleProxy { 8 | NSArray * _activityTypes; 9 | id _appState; 10 | NSString * _applicationVariant; 11 | long _bundleModTime; 12 | NSString * _companionApplicationIdentifier; 13 | NSString * _complicationPrincipalClass; 14 | NSArray * _deviceFamily; 15 | NSString * _deviceIdentifierVendorName; 16 | id _diskUsage; 17 | NSNumber * _downloaderDSID; 18 | NSNumber * _familyID; 19 | NSString * _genre; 20 | NSNumber * _genreID; 21 | unsigned int _installType; 22 | NSNumber * _itemID; 23 | NSString * _itemName; 24 | NSString * _minimumSystemVersion; 25 | unsigned int _originalInstallType; 26 | NSArray * _plugInKitPlugins; 27 | NSArray * _pluginUUIDs; 28 | NSString * _preferredArchitecture; 29 | NSArray * _privateDocumentIconNames; 30 | LSApplicationProxy * _privateDocumentTypeOwner; 31 | NSNumber * _purchaserDSID; 32 | NSString * _ratingLabel; 33 | NSNumber * _ratingRank; 34 | NSDate * _registeredDate; 35 | NSString * _sdkVersion; 36 | NSString * _shortVersionString; 37 | NSString * _sourceAppIdentifier; 38 | NSNumber * _storeFront; 39 | NSArray * _supportedComplicationFamilies; 40 | NSString * _teamID; 41 | BOOL _userInitiatedUninstall; 42 | NSString * _vendorName; 43 | NSNumber * _versionID; 44 | NSString * _watchKitVersion; 45 | } 46 | 47 | @property (nonatomic, readonly) NSNumber *ODRDiskUsage; 48 | @property (nonatomic, readonly) NSArray *UIBackgroundModes; 49 | @property (nonatomic, readonly) NSArray *VPNPlugins; 50 | @property (nonatomic, readonly) NSArray *activityTypes; 51 | @property (nonatomic, readonly) id appState; 52 | @property (nonatomic, readonly) NSArray *appTags; 53 | @property (nonatomic, readonly) NSString *applicationDSID; 54 | @property (nonatomic, readonly) NSString *applicationIdentifier; 55 | @property (nonatomic, readonly) NSString *applicationType; 56 | @property (nonatomic, readonly) NSString *applicationVariant; 57 | @property (nonatomic, readonly) NSArray *audioComponents; 58 | @property (nonatomic, readonly) NSNumber *betaExternalVersionIdentifier; 59 | @property (nonatomic, readonly) long bundleModTime; 60 | @property (nonatomic, readonly) NSString *companionApplicationIdentifier; 61 | @property (readonly) NSString *complicationPrincipalClass; 62 | @property (nonatomic, readonly) NSArray *deviceFamily; 63 | @property (nonatomic, readonly) NSUUID *deviceIdentifierForAdvertising; 64 | @property (nonatomic, readonly) NSUUID *deviceIdentifierForVendor; 65 | @property (nonatomic, readonly) NSArray *directionsModes; 66 | @property (nonatomic, readonly) id diskUsage; 67 | @property (nonatomic, readonly) NSNumber *downloaderDSID; 68 | @property (nonatomic, readonly) NSNumber *dynamicDiskUsage; 69 | @property (nonatomic, readonly) NSArray *externalAccessoryProtocols; 70 | @property (nonatomic, readonly) NSNumber *externalVersionIdentifier; 71 | @property (nonatomic, readonly) NSNumber *familyID; 72 | @property (nonatomic, readonly) BOOL fileSharingEnabled; 73 | @property (getter=isGameCenterEnabled, nonatomic, readonly) BOOL gameCenterEnabled; 74 | @property (nonatomic, readonly) BOOL gameCenterEverEnabled; 75 | @property (nonatomic, readonly) NSString *genre; 76 | @property (nonatomic, readonly) NSNumber *genreID; 77 | @property (readonly) BOOL hasComplication; 78 | @property (nonatomic, readonly) BOOL hasCustomNotification; 79 | @property (nonatomic, readonly) BOOL hasGlance; 80 | @property (nonatomic, readonly) BOOL hasMIDBasedSINF; 81 | @property (nonatomic, readonly) BOOL hasSettingsBundle; 82 | @property (nonatomic, readonly) BOOL iconIsPrerendered; 83 | @property (nonatomic, readonly) NSProgress *installProgress; 84 | @property (nonatomic, readonly) unsigned int installType; 85 | @property (nonatomic, readonly) BOOL isAdHocCodeSigned; 86 | @property (nonatomic, readonly) BOOL isAppUpdate; 87 | @property (nonatomic, readonly) BOOL isBetaApp; 88 | @property (nonatomic, readonly) BOOL isInstalled; 89 | @property (nonatomic, readonly) BOOL isLaunchProhibited; 90 | @property (nonatomic, readonly) BOOL isNewsstandApp; 91 | @property (nonatomic, readonly) BOOL isPlaceholder; 92 | @property (nonatomic, readonly) BOOL isPurchasedReDownload; 93 | @property (nonatomic, readonly) BOOL isRestricted; 94 | @property (nonatomic, readonly) BOOL isStickerProvider; 95 | @property (nonatomic, readonly) BOOL isWatchKitApp; 96 | @property (nonatomic, readonly) NSNumber *itemID; 97 | @property (nonatomic, readonly) NSString *itemName; 98 | @property (nonatomic, readonly) NSString *minimumSystemVersion; 99 | @property (nonatomic, readonly) BOOL missingRequiredSINF; 100 | @property (nonatomic, readonly) unsigned int originalInstallType; 101 | @property (nonatomic, readonly) NSArray *plugInKitPlugins; 102 | @property (nonatomic, readonly) NSString *preferredArchitecture; 103 | @property (nonatomic, readonly) NSNumber *purchaserDSID; 104 | @property (nonatomic, readonly) NSString *ratingLabel; 105 | @property (nonatomic, readonly) NSNumber *ratingRank; 106 | @property (nonatomic, readonly) NSDate *registeredDate; 107 | @property (getter=isRemoveableSystemApp, nonatomic, readonly) BOOL removeableSystemApp; 108 | @property (getter=isRemovedSystemApp, nonatomic, readonly) BOOL removedSystemApp; 109 | @property (nonatomic, readonly) NSArray *requiredDeviceCapabilities; 110 | @property (nonatomic, readonly) NSString *sdkVersion; 111 | @property (nonatomic, readonly) NSString *shortVersionString; 112 | @property (nonatomic, readonly) BOOL shouldSkipWatchAppInstall; 113 | @property (nonatomic, readonly) NSString *sourceAppIdentifier; 114 | @property (nonatomic, readonly) NSNumber *staticDiskUsage; 115 | @property (nonatomic, readonly) NSArray *staticShortcutItems; 116 | @property (nonatomic, readonly) NSString *storeCohortMetadata; 117 | @property (nonatomic, readonly) NSNumber *storeFront; 118 | @property (nonatomic, readonly) NSArray *subgenres; 119 | @property (readonly) NSArray *supportedComplicationFamilies; 120 | @property (nonatomic, readonly) BOOL supportsAudiobooks; 121 | @property (nonatomic, readonly) BOOL supportsExternallyPlayableContent; 122 | @property (nonatomic, readonly) BOOL supportsODR; 123 | @property (nonatomic, readonly) BOOL supportsOpenInPlace; 124 | @property (nonatomic, readonly) BOOL supportsPurgeableLocalStorage; 125 | @property (nonatomic, readonly) NSString *teamID; 126 | @property (nonatomic) BOOL userInitiatedUninstall; 127 | @property (nonatomic, readonly) NSString *vendorName; 128 | @property (nonatomic, readonly) NSString *watchKitVersion; 129 | @property (getter=isWhitelisted, nonatomic, readonly) BOOL whitelisted; 130 | 131 | // Image: /System/Library/Frameworks/MobileCoreServices.framework/MobileCoreServices 132 | 133 | + (id)applicationProxyForBundleURL:(id)arg1; 134 | + (id)applicationProxyForCompanionIdentifier:(id)arg1; 135 | + (id)applicationProxyForIdentifier:(id)arg1; 136 | + (id)applicationProxyForIdentifier:(id)arg1 placeholder:(BOOL)arg2; 137 | + (id)applicationProxyForItemID:(id)arg1; 138 | + (id)applicationProxyWithBundleUnitID:(unsigned int)arg1; 139 | + (id)iconQueue; 140 | + (BOOL)supportsSecureCoding; 141 | 142 | - (id)ODRDiskUsage; 143 | - (id)UIBackgroundModes; 144 | - (BOOL)UPPValidated; 145 | - (id)VPNPlugins; 146 | - (id)_initWithBundleUnit:(unsigned int)arg1 applicationIdentifier:(id)arg2; 147 | - (id)activityTypes; 148 | - (id)alternateIconName; 149 | - (id)appState; 150 | - (id)appTags; 151 | - (id)applicationDSID; 152 | - (id)applicationIdentifier; 153 | - (id)applicationType; 154 | - (id)applicationVariant; 155 | - (id)audioComponents; 156 | - (id)betaExternalVersionIdentifier; 157 | - (long)bundleModTime; 158 | - (void)clearAdvertisingIdentifier; 159 | - (id)companionApplicationIdentifier; 160 | - (id)complicationPrincipalClass; 161 | - (void)dealloc; 162 | - (id)description; 163 | - (id)deviceFamily; 164 | - (id)deviceIdentifierForAdvertising; 165 | - (id)deviceIdentifierForVendor; 166 | - (id)directionsModes; 167 | - (id)diskUsage; 168 | - (id)downloaderDSID; 169 | - (id)dynamicDiskUsage; 170 | - (void)encodeWithCoder:(id)arg1; 171 | - (id)externalAccessoryProtocols; 172 | - (id)externalVersionIdentifier; 173 | - (id)familyID; 174 | - (BOOL)fileSharingEnabled; 175 | - (BOOL)gameCenterEverEnabled; 176 | - (id)genre; 177 | - (id)genreID; 178 | - (BOOL)hasComplication; 179 | - (BOOL)hasCustomNotification; 180 | - (BOOL)hasGlance; 181 | - (BOOL)hasMIDBasedSINF; 182 | - (BOOL)hasSettingsBundle; 183 | - (id)iconDataForVariant:(int)arg1; 184 | - (id)iconDataForVariant:(int)arg1 preferredIconName:(id)arg2 withOptions:(int)arg3; 185 | - (id)iconDataForVariant:(int)arg1 withOptions:(int)arg2; 186 | - (BOOL)iconIsPrerendered; 187 | - (id)iconStyleDomain; 188 | - (id)initWithCoder:(id)arg1; 189 | - (id)installProgress; 190 | - (id)installProgressSync; 191 | - (unsigned int)installType; 192 | - (BOOL)isAdHocCodeSigned; 193 | - (BOOL)isAppUpdate; 194 | - (BOOL)isBetaApp; 195 | - (BOOL)isGameCenterEnabled; 196 | - (BOOL)isInstalled; 197 | - (BOOL)isLaunchProhibited; 198 | - (BOOL)isNewsstandApp; 199 | - (BOOL)isPlaceholder; 200 | - (BOOL)isPurchasedReDownload; 201 | - (BOOL)isRemoveableSystemApp; 202 | - (BOOL)isRemovedSystemApp; 203 | - (BOOL)isRestricted; 204 | - (BOOL)isStickerProvider; 205 | - (BOOL)isSystemOrInternalApp; 206 | - (BOOL)isWatchKitApp; 207 | - (BOOL)isWhitelisted; 208 | - (id)itemID; 209 | - (id)itemName; 210 | - (id)localizedName; 211 | - (id)localizedNameForContext:(id)arg1; 212 | - (id)localizedShortName; 213 | - (id)minimumSystemVersion; 214 | - (BOOL)missingRequiredSINF; 215 | - (unsigned int)originalInstallType; 216 | - (id)plugInKitPlugins; 217 | - (id)preferredArchitecture; 218 | - (id)primaryIconDataForVariant:(int)arg1; 219 | - (id)privateDocumentIconNames; 220 | - (id)privateDocumentTypeOwner; 221 | - (BOOL)profileValidated; 222 | - (id)purchaserDSID; 223 | - (id)ratingLabel; 224 | - (id)ratingRank; 225 | - (id)registeredDate; 226 | - (id)requiredDeviceCapabilities; 227 | - (id)resourcesDirectoryURL; 228 | - (id)sdkVersion; 229 | - (void)setAlternateIconName:(id)arg1 withResult:(id /* block */)arg2; 230 | - (void)setPrivateDocumentIconNames:(id)arg1; 231 | - (void)setPrivateDocumentTypeOwner:(id)arg1; 232 | - (void)setUserInitiatedUninstall:(BOOL)arg1; 233 | - (id)shortVersionString; 234 | - (BOOL)shouldSkipWatchAppInstall; 235 | - (id)sourceAppIdentifier; 236 | - (id)staticDiskUsage; 237 | - (id)staticShortcutItems; 238 | - (id)storeCohortMetadata; 239 | - (id)storeFront; 240 | - (id)subgenres; 241 | - (id)supportedComplicationFamilies; 242 | - (BOOL)supportsAudiobooks; 243 | - (BOOL)supportsExternallyPlayableContent; 244 | - (BOOL)supportsODR; 245 | - (BOOL)supportsOpenInPlace; 246 | - (BOOL)supportsPurgeableLocalStorage; 247 | - (id)teamID; 248 | - (id)uniqueIdentifier; 249 | - (BOOL)userInitiatedUninstall; 250 | - (id)vendorName; 251 | - (id)watchKitVersion; 252 | 253 | @end 254 | -------------------------------------------------------------------------------- /AppListConsole/AppListConsole/LSApplicationWorkspace.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This header is generated by classdump-dyld 0.7 3 | * on Sunday, November 22, 2015 at 10:24:36 PM Eastern Standard Time 4 | * Operating System: Version 9.0.2 (Build 13A452) 5 | * Image Source: /System/Library/Frameworks/MobileCoreServices.framework/MobileCoreServices 6 | * classdump-dyld is licensed under GPLv3, Copyright © 2013 by Elias Limneos. 7 | */ 8 | 9 | 10 | @interface LSApplicationWorkspace : NSObject 11 | +(id)defaultWorkspace; 12 | -(void)_sf_openURL:(id)arg1 withOptions:(id)arg2 completionHandler:(/*^block*/id)arg3 ; 13 | -(id)operationToOpenResource:(id)arg1 usingApplication:(id)arg2 userInfo:(id)arg3 ; 14 | -(BOOL)establishConnection; 15 | -(id)remoteObserver; 16 | -(id)pluginsWithIdentifiers:(id)arg1 protocols:(id)arg2 version:(id)arg3 applyFilter:(/*^block*/id)arg4 ; 17 | -(id)operationToOpenResource:(id)arg1 usingApplication:(id)arg2 uniqueDocumentIdentifier:(id)arg3 userInfo:(id)arg4 ; 18 | -(BOOL)installApplication:(id)arg1 withOptions:(id)arg2 error:(id*)arg3 usingBlock:(/*^block*/id)arg4 ; 19 | -(id)installProgressForApplication:(id)arg1 withPhase:(unsigned long long)arg2 ; 20 | -(BOOL)registerApplicationDictionary:(id)arg1 withObserverNotification:(int)arg2 ; 21 | -(BOOL)installPhaseFinishedForProgress:(id)arg1 ; 22 | -(unsigned long long)getInstallTypeForOptions:(id)arg1 andApp:(id)arg2 ; 23 | -(id)installBundle:(id)arg1 withOptions:(id)arg2 usingBlock:(/*^block*/id)arg3 forApp:(id)arg4 withError:(id*)arg5 outInstallProgress:(id*)arg6 ; 24 | -(BOOL)uninstallApplication:(id)arg1 withOptions:(id)arg2 usingBlock:(/*^block*/id)arg3 ; 25 | -(BOOL)registerBundleWithInfo:(id)arg1 options:(id)arg2 type:(unsigned long long)arg3 progress:(id)arg4 ; 26 | -(void)clearCreatedProgressForBundleID:(id)arg1 ; 27 | -(void)removeInstallProgressForBundleID:(id)arg1 ; 28 | -(void)getKnowledgeUUID:(id*)arg1 andSequenceNumber:(id*)arg2 ; 29 | -(id)delegateProxy; 30 | -(id)directionsApplications; 31 | -(id)applicationsWithAudioComponents; 32 | -(id)applicationsWithSettingsBundle; 33 | -(id)applicationsWithVPNPlugins; 34 | -(id)applicationsWithExternalAccessoryProtocols; 35 | -(id)applicationForUserActivityType:(id)arg1 ; 36 | -(id)applicationForUserActivityDomainName:(id)arg1 ; 37 | -(id)pluginsWithIdentifiers:(id)arg1 protocols:(id)arg2 version:(id)arg3 withFilter:(/*^block*/id)arg4 ; 38 | -(id)pluginsWithIdentifiers:(id)arg1 protocols:(id)arg2 version:(id)arg3 ; 39 | -(void)openUserActivity:(id)arg1 withApplicationProxy:(id)arg2 completionHandler:(/*^block*/id)arg3 ; 40 | -(id)installedVPNPlugins; 41 | -(id)unrestrictedApplications; 42 | -(id)publicURLSchemes; 43 | -(BOOL)getClaimedActivityTypes:(id*)arg1 domains:(id*)arg2 ; 44 | -(BOOL)installApplication:(id)arg1 withOptions:(id)arg2 ; 45 | -(BOOL)installApplication:(id)arg1 withOptions:(id)arg2 error:(id*)arg3 ; 46 | -(BOOL)downgradeApplicationToPlaceholder:(id)arg1 withOptions:(id)arg2 error:(id*)arg3 ; 47 | -(BOOL)registerApplicationDictionary:(id)arg1 ; 48 | -(BOOL)registerApplication:(id)arg1 ; 49 | -(BOOL)unregisterApplication:(id)arg1 ; 50 | -(BOOL)registerPlugin:(id)arg1 ; 51 | -(BOOL)unregisterPlugin:(id)arg1 ; 52 | -(BOOL)updateSINFWithData:(id)arg1 forApplication:(id)arg2 options:(id)arg3 error:(id*)arg4 ; 53 | -(BOOL)invalidateIconCache:(id)arg1 ; 54 | -(void)_clearCachedAdvertisingIdentifier; 55 | -(id)deviceIdentifierForAdvertising; 56 | -(id)installProgressForBundleID:(id)arg1 makeSynchronous:(unsigned char)arg2 ; 57 | -(BOOL)_LSPrivateRebuildApplicationDatabasesForSystemApps:(BOOL)arg1 internal:(BOOL)arg2 user:(BOOL)arg3 ; 58 | -(id)applicationForOpeningResource:(id)arg1 ; 59 | -(void)addObserver:(id)arg1 ; 60 | -(BOOL)isApplicationAvailableToOpenURL:(id)arg1 error:(id*)arg2 ; 61 | -(id)applicationsAvailableForHandlingURLScheme:(id)arg1 ; 62 | -(id)privateURLSchemes; 63 | -(id)URLOverrideForURL:(id)arg1 ; 64 | -(BOOL)openURL:(id)arg1 ; 65 | -(void)removeObserver:(id)arg1 ; 66 | -(id)operationToOpenResource:(id)arg1 usingApplication:(id)arg2 uniqueDocumentIdentifier:(id)arg3 userInfo:(id)arg4 delegate:(id)arg5 ; 67 | -(id)deviceIdentifierForVendor; 68 | -(id)applicationsAvailableForOpeningDocument:(id)arg1 ; 69 | -(id)operationToOpenResource:(id)arg1 usingApplication:(id)arg2 uniqueDocumentIdentifier:(id)arg3 sourceIsManaged:(BOOL)arg4 userInfo:(id)arg5 delegate:(id)arg6 ; 70 | -(BOOL)openURL:(id)arg1 withOptions:(id)arg2 ; 71 | -(BOOL)openSensitiveURL:(id)arg1 withOptions:(id)arg2 ; 72 | -(id)allInstalledApplications; 73 | -(id)applicationsOfType:(unsigned long long)arg1 ; 74 | -(void)enumerateBundlesOfType:(unsigned long long)arg1 usingBlock:(/*^block*/id)arg2 ; 75 | -(BOOL)uninstallApplication:(id)arg1 withOptions:(id)arg2 ; 76 | -(id)placeholderApplications; 77 | -(BOOL)applicationIsInstalled:(id)arg1 ; 78 | -(id)installedPlugins; 79 | -(void)_LSClearSchemaCaches; 80 | -(void)clearAdvertisingIdentifier; 81 | -(id)applicationsWithUIBackgroundModes; 82 | -(id)allApplications; 83 | -(BOOL)openApplicationWithBundleID:(id)arg1 ; 84 | -(BOOL)openSensitiveURL:(id)arg1 withOptions:(id)arg2 error:(id*)arg3 ; 85 | -(BOOL)openURL:(id)arg1 withOptions:(id)arg2 error:(id*)arg3 ; 86 | @end 87 | -------------------------------------------------------------------------------- /AppListConsole/AppListConsole/LSBundleProxy.h: -------------------------------------------------------------------------------- 1 | /* Generated by RuntimeBrowser 2 | Image: /System/Library/Frameworks/MobileCoreServices.framework/MobileCoreServices 3 | */ 4 | 5 | @interface LSBundleProxy : NSObject { 6 | BOOL _UPPValidated; 7 | id __entitlements; 8 | id __environmentVariables; 9 | id __groupContainers; 10 | id __infoDictionary; 11 | NSString * _bundleExecutable; 12 | unsigned long long _bundleFlags; 13 | NSString * _bundleType; 14 | NSURL * _bundleURL; 15 | NSString * _bundleVersion; 16 | NSUUID * _cacheGUID; 17 | BOOL _foundBackingBundle; 18 | BOOL _isContainerized; 19 | NSString * _localizedShortName; 20 | NSArray * _machOUUIDs; 21 | unsigned long _plistContentFlags; 22 | BOOL _profileValidated; 23 | unsigned int _sequenceNumber; 24 | NSString * _signerIdentity; 25 | } 26 | 27 | @property (nonatomic, readonly) BOOL UPPValidated; 28 | @property (setter=_setEntitlements:, nonatomic, copy) id _entitlements; 29 | @property (setter=_setEnvironmentVariables:, nonatomic, copy) id _environmentVariables; 30 | @property (setter=_setGroupContainers:, nonatomic, copy) id _groupContainers; 31 | @property (setter=_setInfoDictionary:, nonatomic, copy) id _infoDictionary; 32 | @property (nonatomic, readonly) NSURL *appStoreReceiptURL; 33 | @property (nonatomic, readonly) NSURL *bundleContainerURL; 34 | @property (nonatomic, readonly) NSString *bundleExecutable; 35 | @property (nonatomic, readonly) NSString *bundleIdentifier; 36 | @property (nonatomic, readonly) NSString *bundleType; 37 | @property (nonatomic, readonly) NSURL *bundleURL; 38 | @property (nonatomic, readonly) NSString *bundleVersion; 39 | @property (nonatomic, readonly) NSUUID *cacheGUID; 40 | @property (nonatomic, readonly) NSString *canonicalExecutablePath; 41 | @property (nonatomic, readonly) NSURL *containerURL; 42 | @property (nonatomic, readonly) NSURL *dataContainerURL; 43 | @property (nonatomic, readonly) NSDictionary *entitlements; 44 | @property (nonatomic, readonly) NSDictionary *environmentVariables; 45 | @property (nonatomic, readonly) BOOL foundBackingBundle; 46 | @property (nonatomic, readonly) NSDictionary *groupContainerURLs; 47 | @property (nonatomic, readonly) BOOL isContainerized; 48 | @property (nonatomic, readonly) NSString *localizedShortName; 49 | @property (nonatomic, copy) NSArray *machOUUIDs; 50 | @property (nonatomic, readonly) BOOL profileValidated; 51 | @property (nonatomic, readonly) unsigned int sequenceNumber; 52 | @property (nonatomic, readonly) NSString *signerIdentity; 53 | 54 | // Image: /System/Library/Frameworks/MobileCoreServices.framework/MobileCoreServices 55 | 56 | + (id)bundleProxyForCurrentProcess; 57 | + (id)bundleProxyForIdentifier:(id)arg1; 58 | + (id)bundleProxyForURL:(id)arg1; 59 | + (BOOL)supportsSecureCoding; 60 | 61 | - (BOOL)UPPValidated; 62 | - (unsigned long long)_containerClassForLSBundleType:(id)arg1; 63 | - (id)_dataContainerURLFromContainerManager; 64 | - (id)_entitlements; 65 | - (id)_environmentVariables; 66 | - (id)_environmentVariablesFromContainerManager; 67 | - (id)_groupContainerURLsFromContainerManager; 68 | - (id)_groupContainers; 69 | - (id)_infoDictionary; 70 | - (id)_initWithBundleUnit:(unsigned int)arg1 bundleType:(unsigned int)arg2 bundleID:(id)arg3 localizedName:(id)arg4 bundleContainerURL:(id)arg5 dataContainerURL:(id)arg6 resourcesDirectoryURL:(id)arg7 iconsDictionary:(id)arg8 iconFileNames:(id)arg9 version:(id)arg10; 71 | - (void)_setEntitlements:(id)arg1; 72 | - (void)_setEnvironmentVariables:(id)arg1; 73 | - (void)_setGroupContainers:(id)arg1; 74 | - (void)_setInfoDictionary:(id)arg1; 75 | - (id)_valueForEqualityTesting; 76 | - (id)appStoreReceiptURL; 77 | - (id)bundleContainerURL; 78 | - (id)bundleExecutable; 79 | - (id)bundleIdentifier; 80 | - (id)bundleType; 81 | - (id)bundleURL; 82 | - (id)bundleVersion; 83 | - (id)cacheGUID; 84 | - (id)canonicalExecutablePath; 85 | - (id)containerURL; 86 | - (id)dataContainerURL; 87 | - (void)dealloc; 88 | - (void)encodeWithCoder:(id)arg1; 89 | - (id)entitlementValueForKey:(id)arg1 ofClass:(Class)arg2; 90 | - (id)entitlementValueForKey:(id)arg1 ofClass:(Class)arg2 valuesOfClass:(Class)arg3; 91 | - (id)entitlementValuesForKeys:(id)arg1; 92 | - (id)entitlements; 93 | - (id)environmentVariables; 94 | - (BOOL)foundBackingBundle; 95 | - (id)groupContainerURLs; 96 | - (unsigned int)hash; 97 | - (id)initWithCoder:(id)arg1; 98 | - (BOOL)isContainerized; 99 | - (BOOL)isEqual:(id)arg1; 100 | - (id)localizedShortName; 101 | - (id)localizedValuesForKeys:(id)arg1 fromTable:(id)arg2; 102 | - (id)machOUUIDs; 103 | - (id)objectForInfoDictionaryKey:(id)arg1 ofClass:(Class)arg2; 104 | - (id)objectForInfoDictionaryKey:(id)arg1 ofClass:(Class)arg2 valuesOfClass:(Class)arg3; 105 | - (id)objectsForInfoDictionaryKeys:(id)arg1; 106 | - (BOOL)profileValidated; 107 | - (unsigned int)sequenceNumber; 108 | - (void)setLocalizedShortName:(id)arg1; 109 | - (void)setMachOUUIDs:(NSArray *)arg1; 110 | - (void)setPropertyListCachingStrategy:(unsigned int)arg1; 111 | - (id)signerIdentity; 112 | - (id)uniqueIdentifier; 113 | 114 | // Image: /System/Library/Frameworks/HealthKit.framework/HealthKit 115 | 116 | + (id)_hk_appExtensionContainerBundleProxyWithProperties:(id)arg1; 117 | + (id)hk_appExtensionContainerBundleForConnection:(id)arg1; 118 | + (id)hk_appExtensionContainerBundleForCurrentTask; 119 | 120 | // Image: /System/Library/Frameworks/UserNotifications.framework/UserNotifications 121 | 122 | - (id)_un_applicationBundleURL; 123 | - (id)un_applicationBundle; 124 | 125 | // Image: /System/Library/PrivateFrameworks/ChatKit.framework/ChatKit 126 | 127 | - (id)__ck_icon; 128 | 129 | @end 130 | -------------------------------------------------------------------------------- /AppListConsole/AppListConsole/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // AppListConsole 4 | // 5 | // Created by Liu Junqi on 1/10/18. 6 | // Copyright © 2018 DeviLeo. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppInfo.h" 11 | #import "LSApplicationWorkspace.h" 12 | #import "LSApplicationProxy.h" 13 | 14 | NSArray * listAllInstalledApps() { 15 | LSApplicationWorkspace *workspace = [LSApplicationWorkspace defaultWorkspace]; 16 | NSArray *allInstalledApps = [workspace allInstalledApplications]; // NSArray * 17 | return allInstalledApps; 18 | } 19 | 20 | NSString *descriptionOfAppInfo(AppInfo *appInfo, BOOL verbose, NSInteger index) { 21 | NSString *infoString = nil; 22 | if (verbose) infoString = [NSString stringWithFormat:@"---> %zd\n%@", index, [appInfo description]]; 23 | else infoString = [NSString stringWithFormat:@"%zd. %@", index, [appInfo shortDescription]]; 24 | return infoString; 25 | } 26 | 27 | NSString *descriptionOfAppsInfo(NSArray *appsInfo, BOOL verbose) { 28 | NSMutableString *ms = [NSMutableString stringWithCapacity:2048]; 29 | NSInteger i = 1; 30 | for (AppInfo *info in appsInfo) { 31 | [ms appendString:descriptionOfAppInfo(info, verbose, i++)]; 32 | } 33 | return ms; 34 | } 35 | 36 | void displayAllInstalledApps(BOOL verbose, BOOL showUserApps, BOOL showSystemApps, BOOL showOtherApps) { 37 | NSArray *apps = listAllInstalledApps(); 38 | NSMutableArray *userApps = showUserApps ? [NSMutableArray arrayWithCapacity:apps.count] : nil; 39 | NSMutableArray *systemApps = showSystemApps ? [NSMutableArray arrayWithCapacity:apps.count] : nil; 40 | NSMutableArray *otherApps = showOtherApps ? [NSMutableArray array] : nil; 41 | for (LSApplicationProxy *proxy in apps) { 42 | AppInfo *info = [[AppInfo alloc] initWithLSApplicationProxy:proxy]; 43 | if ([info.applicationType isEqualToString:ApplicationTypeUser]) { 44 | if (showUserApps) [userApps addObject:info]; 45 | } else if ([info.applicationType isEqualToString:ApplicationTypeSystem]) { 46 | if (showSystemApps) [systemApps addObject:info]; 47 | } else { 48 | if (showOtherApps) [otherApps addObject:info]; 49 | } 50 | } 51 | 52 | NSComparator cmptr = ^NSComparisonResult(AppInfo * _Nonnull obj1, AppInfo * _Nonnull obj2) { 53 | NSString *name1 = obj1.itemName ? : obj1.localizedName; 54 | NSString *name2 = obj2.itemName ? : obj2.localizedName; 55 | NSComparisonResult result = [name1 compare:name2]; 56 | return result; 57 | }; 58 | 59 | if (showUserApps) [userApps sortUsingComparator:cmptr]; 60 | if (showSystemApps) [systemApps sortUsingComparator:cmptr]; 61 | if (showOtherApps) [otherApps sortUsingComparator:cmptr]; 62 | 63 | NSMutableString *printString = [NSMutableString stringWithCapacity:8192]; 64 | if (showUserApps) { 65 | [printString appendString:@"=====> User\n"]; 66 | if (userApps.count > 0) { 67 | [printString appendString:descriptionOfAppsInfo(userApps, verbose)]; 68 | } else { 69 | [printString appendString:@"No user apps\n"]; 70 | } 71 | } 72 | if (showSystemApps) { 73 | [printString appendString:@"=====> System\n"]; 74 | if (systemApps.count > 0) { 75 | [printString appendString:descriptionOfAppsInfo(systemApps, verbose)]; 76 | } else { 77 | [printString appendString:@"No system apps\n"]; 78 | } 79 | } 80 | if (showOtherApps) { 81 | [printString appendString:@"=====> Other\n"]; 82 | if (otherApps.count > 0) { 83 | [printString appendString:descriptionOfAppsInfo(otherApps, verbose)]; 84 | } else { 85 | [printString appendString:@"No other apps\n"]; 86 | } 87 | } 88 | printf("%s", [printString UTF8String]); 89 | } 90 | 91 | void displaySpecifiedApp(char *strBundleID) { 92 | if (strBundleID == NULL) return; 93 | NSString *bundleID = [NSString stringWithUTF8String:strBundleID]; 94 | if (bundleID.length == 0) return; 95 | 96 | NSArray *apps = listAllInstalledApps(); 97 | for (LSApplicationProxy * proxy in apps) { 98 | AppInfo *info = [[AppInfo alloc] initWithLSApplicationProxy:proxy]; 99 | if ([info.applicationIdentifier isEqualToString:bundleID]) { 100 | printf("%s", [[info description] UTF8String]); 101 | return; 102 | } 103 | } 104 | 105 | printf("Not found!\n"); 106 | } 107 | 108 | void displayHelp() { 109 | printf("applst -vausoh\n" 110 | "applst \n\n" 111 | "-v List apps with details\n" 112 | "-a List all apps\n" 113 | "-u List user apps\n" 114 | "-s List system apps\n" 115 | "-o List other apps\n" 116 | "-h Show help\n"); 117 | } 118 | 119 | int main(int argc, char * argv[]) { 120 | @autoreleasepool { 121 | BOOL verbose = NO; 122 | BOOL showUserApps = YES; 123 | BOOL showSystemApps = NO; 124 | BOOL showOtherApps = NO; 125 | if (argc == 1) displayAllInstalledApps(verbose, showUserApps, showSystemApps, showOtherApps); 126 | else if (argc > 1) { 127 | char *arg = argv[1]; 128 | if (arg[0] == '-') { 129 | BOOL showAll = NO, showHelp = NO; 130 | showUserApps = showSystemApps = showOtherApps = NO; 131 | int count = (int)strlen(arg); 132 | for (int i = 1; i < count; ++i) { 133 | char p = arg[i]; 134 | switch (p) { 135 | case 'a': 136 | showAll = showUserApps = showSystemApps = showOtherApps = YES; 137 | break; 138 | case 'v': 139 | verbose = YES; 140 | break; 141 | case 'u': 142 | if (!showAll) showUserApps = YES; break; 143 | case 's': 144 | if (!showAll) showSystemApps = YES; break; 145 | case 'o': 146 | if (!showAll) showOtherApps = YES; break; 147 | case 'h': 148 | showHelp = YES; break; 149 | default: 150 | break; 151 | } 152 | } 153 | // Use default 154 | if (showHelp == YES || (showUserApps == NO && showSystemApps == NO && showOtherApps == NO)) { 155 | displayHelp(); 156 | } else { 157 | displayAllInstalledApps(verbose, showUserApps, showSystemApps, showOtherApps); 158 | } 159 | } else { 160 | displaySpecifiedApp(arg); 161 | } 162 | } 163 | return 0; 164 | } 165 | } 166 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AppList 2 | List all apps with details on __jailbroken__ i-Devices. 3 | 4 | You can get __\__ and __\__ from the list with __"-v"__ argument. 5 | 6 | ## AppList with UI 7 | #### Notices 8 | Tested on jailed iOS 10. 9 | Tested on __jailbroken iOS 11__. 10 | Not tested on tvOS. 11 | 12 | #### Usage 13 | Just run it. 14 | 15 | #### How to install on iOS 11 16 | 1. scp __AppList.app__ file to the device. 17 | ```bash 18 | scp -r -P 22 AppList.app root@:~/ 19 | ``` 20 | 2. ssh device and use jtool to sign __AppList__. 21 | ```bash 22 | # ssh 23 | ssh root@ -p 22 24 | 25 | # get the entitlement from AppStore.app 26 | jtool --ent /Applications/AppStore.app/AppStore > appstore.ent 27 | 28 | # sign 29 | jtool --sign --ent appstore.ent --inplace AppList.app/AppList 30 | ``` 31 | 3. cp __AppList.app__ to __/Applications__ folder 32 | ```bash 33 | cp -rf AppList.app /Applications/ 34 | ``` 35 | 4. Restart Springboard 36 | ```bash 37 | killall -9 SpringBoard 38 | uicache 39 | ``` 40 | 41 | ## AppList for console 42 | #### Notices 43 | Tested on __jailbroken iOS 11__. 44 | Not tested on tvOS. 45 | 46 | #### Usage 47 | ```bash 48 | applst -vausoh 49 | applst 50 | 51 | -v List apps with details 52 | -a List all apps 53 | -u List user apps 54 | -s List system apps 55 | -o List other apps 56 | -h Show help 57 | ``` 58 | 59 | #### How to install on iOS 11 60 | 1. scp __AppList__ file to the device. 61 | ```bash 62 | scp -r -P 22 AppListConsole.app/AppListConsole root@:~/applst 63 | ``` 64 | 2. ssh device and use jtool to sign __AppList__. 65 | ```bash 66 | # ssh 67 | ssh root@ -p 22 68 | 69 | # get the entitlement from /jb/bin/ls 70 | jtool --ent /jb/bin/ls > plat.ent 71 | 72 | # sign 73 | jtool --sign --ent plat.ent --inplace applst 74 | ``` 75 | 3. cp __applst__ to __/jb/usr/bin/__ folder 76 | ```bash 77 | cp applst /jb/usr/bin/ 78 | ``` 79 | --------------------------------------------------------------------------------