├── .DS_Store ├── BundleIDsAppDelegate.h ├── BundleIDsAppDelegate.m ├── LICENSE ├── Makefile ├── README.md ├── Resources ├── Default-568h@2x.png ├── Default-667h@2x.png ├── Default-736h@3x.png ├── Default-812h@3x.png ├── Info.plist ├── icon.png ├── icon@2x.png ├── icon@2x~ipad.png ├── icon@3x.png └── icon~ipad.png ├── RootViewController.h ├── RootViewController.m ├── control └── main.m /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tdadvocate/BundleIDsXI/123ba51bdf22a6f69292653d311b0787642b984d/.DS_Store -------------------------------------------------------------------------------- /BundleIDsAppDelegate.h: -------------------------------------------------------------------------------- 1 | @interface BundleIDsAppDelegate : UIResponder 2 | 3 | @property (nonatomic, retain) UIWindow *window; 4 | @property (nonatomic, retain) UINavigationController *rootViewController; 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /BundleIDsAppDelegate.m: -------------------------------------------------------------------------------- 1 | #import "BundleIDsAppDelegate.h" 2 | #import "RootViewController.h" 3 | 4 | @implementation BundleIDsAppDelegate 5 | 6 | - (void)applicationDidFinishLaunching:(UIApplication *)application { 7 | _window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 8 | _rootViewController = [[UINavigationController alloc] initWithRootViewController:[[RootViewController alloc] init]]; 9 | _window.rootViewController = _rootViewController; 10 | [_window makeKeyAndVisible]; 11 | } 12 | 13 | - (void)dealloc { 14 | [_window release]; 15 | [_rootViewController release]; 16 | [super dealloc]; 17 | } 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Noah Saso 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 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | ARCHS = arm64 arm64e 2 | 3 | include $(THEOS)/makefiles/common.mk 4 | 5 | APPLICATION_NAME = BundleIDsXI 6 | BundleIDsXI_FILES = main.m BundleIDsAppDelegate.m RootViewController.m 7 | BundleIDsXI_FRAMEWORKS = UIKit CoreGraphics 8 | BundleIDsXI_LIBRARIES = applist 9 | 10 | include $(THEOS_MAKE_PATH)/application.mk 11 | 12 | after-install:: 13 | install.exec "killall \"BundleIDsXI\"" || true 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | BundleIDsXI 2 | =========== 3 | 4 | A Cydia application to retrieve the bundle ID of any of app on your device with the push of a button. 5 | 6 | This was originally created by Noah Saso (Sassoty) but updated for iOS 11 seeing as it is no longer being updated by noah and is only compiled for 32-bit. A huge thanks to @TheTomMetzger and @Skittyblock for all of their insane help on this project. Also a massive shoutout to Ethan Whited for helping resolve the crash on iOS 13 while still keeping the app icons within the app. This project should currently supports all devices that run iOS 11.0.0 - 13.3.1. 7 | -------------------------------------------------------------------------------- /Resources/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tdadvocate/BundleIDsXI/123ba51bdf22a6f69292653d311b0787642b984d/Resources/Default-568h@2x.png -------------------------------------------------------------------------------- /Resources/Default-667h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tdadvocate/BundleIDsXI/123ba51bdf22a6f69292653d311b0787642b984d/Resources/Default-667h@2x.png -------------------------------------------------------------------------------- /Resources/Default-736h@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tdadvocate/BundleIDsXI/123ba51bdf22a6f69292653d311b0787642b984d/Resources/Default-736h@3x.png -------------------------------------------------------------------------------- /Resources/Default-812h@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tdadvocate/BundleIDsXI/123ba51bdf22a6f69292653d311b0787642b984d/Resources/Default-812h@3x.png -------------------------------------------------------------------------------- /Resources/Info.plist: -------------------------------------------------------------------------------- 1 | { 2 | CFBundleExecutable = "BundleIDsXI"; 3 | CFBundleIconFile = "icon.png"; 4 | CFBundleIconFiles = ( 5 | "icon.png", 6 | "icon~ipad.png", 7 | "icon@2x.png", 8 | "icon@2x~ipad.png", 9 | "icon@3x.png", 10 | "icon@3x~ipad.png" 11 | ); 12 | CFBundleIdentifier = "com.wavelink.bundleidsxi"; 13 | CFBundleInfoDictionaryVersion = 6.0; 14 | CFBundlePackageType = APPL; 15 | CFBundleSignature = "????"; 16 | CFBundleSupportedPlatforms = ( 17 | iPhoneOS 18 | ); 19 | CFBundleVersion = 1.0; 20 | DTPlatformName = iphoneos; 21 | DTSDKName = iphoneos11.0; 22 | LSRequiresIPhoneOS = 1; 23 | MinimumOSVersion = 11.0; 24 | UILaunchImages = ( 25 | { 26 | UILaunchImageMinimumOSVersion = "8.0"; 27 | UILaunchImageName = "Default-667h"; 28 | UILaunchImageOrientation = "Portrait"; 29 | UILaunchImageSize = "{375, 667}"; 30 | }, 31 | { 32 | UILaunchImageMinimumOSVersion = "8.0"; 33 | UILaunchImageName = "Default-736h"; 34 | UILaunchImageOrientation = "Portrait"; 35 | UILaunchImageSize = "{414, 736}"; 36 | }, 37 | { 38 | UILaunchImageMinimumOSVersion = "11.0"; 39 | UILaunchImageName = "Default-812h"; 40 | UILaunchImageOrientation = "Portrait"; 41 | UILaunchImageSize = "{375, 812}"; 42 | }, 43 | { 44 | UILaunchImageMinimumOSVersion = "7.0"; 45 | UILaunchImageName = "Default-568h"; 46 | UILaunchImageOrientation = "Portrait"; 47 | UILaunchImageSize = "{320, 568}"; 48 | } 49 | ); 50 | } 51 | -------------------------------------------------------------------------------- /Resources/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tdadvocate/BundleIDsXI/123ba51bdf22a6f69292653d311b0787642b984d/Resources/icon.png -------------------------------------------------------------------------------- /Resources/icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tdadvocate/BundleIDsXI/123ba51bdf22a6f69292653d311b0787642b984d/Resources/icon@2x.png -------------------------------------------------------------------------------- /Resources/icon@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tdadvocate/BundleIDsXI/123ba51bdf22a6f69292653d311b0787642b984d/Resources/icon@2x~ipad.png -------------------------------------------------------------------------------- /Resources/icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tdadvocate/BundleIDsXI/123ba51bdf22a6f69292653d311b0787642b984d/Resources/icon@3x.png -------------------------------------------------------------------------------- /Resources/icon~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tdadvocate/BundleIDsXI/123ba51bdf22a6f69292653d311b0787642b984d/Resources/icon~ipad.png -------------------------------------------------------------------------------- /RootViewController.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @interface RootViewController: UIViewController { 4 | UITableView* tabView; 5 | NSMutableArray* appNames; 6 | NSMutableDictionary* theApps; 7 | } 8 | @end 9 | -------------------------------------------------------------------------------- /RootViewController.m: -------------------------------------------------------------------------------- 1 | //BundleIDs Originally created by @NoahSaso 2 | //Updated in 2018 by @TD_Advocate 3 | //Huge thanks to @TheTomMetzger and @Skittyblock for their massive amounts of help with updating and adding new features 4 | //Shoutout to @xerusdesign for making the new icon and @EthanWhited for helping resolve an iOS 13 crash w/app icons in the table view 5 | 6 | #import "RootViewController.h" 7 | #import 8 | 9 | //Determine device screen boundaries 10 | #define kBounds [[UIScreen mainScreen] bounds] 11 | 12 | @implementation RootViewController 13 | 14 | //Set showID alert to nil for auto dismiss 15 | UIAlertController *showID = nil; 16 | 17 | //Set copyAllAlert alert to nil for auto dismiss 18 | UIAlertController *copyAllAlert = nil; 19 | 20 | //Create array of bundleIDs to be used for copyAllButton 21 | NSMutableArray *bundleIDs; 22 | 23 | //Application view’s initial load? 24 | - (void)loadView { 25 | 26 | //Drawing tableView and it’s boundaries 27 | tabView = [[UITableView alloc] initWithFrame:(CGRect) kBounds]; 28 | tabView.delegate = self; 29 | tabView.dataSource = self; 30 | [tabView setAlwaysBounceVertical:YES]; 31 | //Displaying the tableView 32 | self.view = tabView; 33 | //Setting Navbar Title text 34 | self.title = @"Bundle IDs"; 35 | 36 | //Defining how the bundleIDs array works 37 | bundleIDs = [[NSMutableArray alloc] init]; 38 | 39 | 40 | } 41 | 42 | //Auto dismiss for the showID alert 43 | - (void) dismissIDAlert 44 | { 45 | if (showID != nil) 46 | { 47 | [showID dismissViewControllerAnimated:true completion:nil]; 48 | } 49 | else { 50 | NSLog(@"showID is nil"); 51 | } 52 | } 53 | 54 | //Auto dismiss for the copyAllAlert alert 55 | - (void) dismissAllAlert 56 | { 57 | if (copyAllAlert != nil) 58 | { 59 | [copyAllAlert dismissViewControllerAnimated:true completion:nil]; 60 | } 61 | else { 62 | NSLog(@"copyAllAlert is nil"); 63 | } 64 | } 65 | 66 | 67 | - (void)viewDidLoad { 68 | 69 | //Create copyAllButton on right side of the navbar 70 | UIBarButtonItem *copyAllButton = [[UIBarButtonItem alloc] 71 | initWithTitle:@"Copy All" 72 | style:UIBarButtonItemStylePlain 73 | target:self 74 | action:@selector(copyAllButton:)]; 75 | self.navigationItem.rightBarButtonItem = copyAllButton; 76 | 77 | //Apps that are to be hidden from the view as they aren’t normally meant to be seen by the end user 78 | NSArray* excludedApps = [[NSArray alloc] initWithObjects: 79 | @"AACredentialRecoveryDialog", 80 | @"AccountAuthenticationDialog", 81 | @"AskPermissionUI", 82 | @"AppSSOUIService", 83 | @"AuthKitUIService", 84 | @"AXUIViewService", 85 | @"Ad Platforms Diagnostics", 86 | @"BusinessChatViewService", 87 | @"CarPlaySplashScreen", 88 | @"CheckerBoard", 89 | @"CompassCalibrationViewService", 90 | @"Continuity Camera", 91 | @"CTCarrierSpaceAuth", 92 | @"CTNotifyUIService", 93 | @"DataActivation", 94 | @"DDActionsService", 95 | @"DemoApp", 96 | @"Diagnostics", 97 | @"DiagnosticsService", 98 | @"Do Not Disturb While Driving", 99 | @"FacebookAccountMigrationDialog", 100 | @"Family", 101 | @"FieldTest", 102 | @"FieldTestMenu", 103 | @"FontInstallViewService", 104 | @"FTMInternal-4", 105 | @"Game Center UI Service", 106 | @"HealthPrivacyService", 107 | @"HomeUIService", 108 | @"iAd", 109 | @"iAdOptOut", 110 | @"iCloud", 111 | @"iMessageAppsViewService", 112 | @"InCallService", 113 | @"iOS Diagnostics", 114 | @"iTunes", 115 | @"Magnifier", 116 | @"MailCompositionService", 117 | @"MessagesViewService", 118 | @"MusicUIService", 119 | @"PhotosViewService", 120 | @"PreBoard", 121 | @"Print Center", 122 | @"Print Centre", 123 | @"quicklookd", 124 | @"RemoteiCloudQuotaUI", 125 | @"SafariViewService", 126 | @"SafeMode", 127 | @"ScreenSharingViewService", 128 | @"Screenshots", 129 | @"ScreenshotServicesService", 130 | @"ScreenTimeUnlock", 131 | @"Server Drive", 132 | @"Setup", 133 | @"SharedWebCredentialViewService", 134 | @"SharingViewService", 135 | @"SIMSetupUIService", 136 | @"Siri", 137 | @"Siri Search", 138 | @"SLGoogleAuth", 139 | @"SLYahooAuth", 140 | @"SocialUIService", 141 | @"SoftwareUpdateUIService", 142 | @"SPNFCURL", 143 | @"StoreDemoViewService", 144 | @"TencentWeiboAccountMigrationDialog", 145 | @"TrustMe", 146 | @"TVAccessViewService", 147 | @"TVRemoteUIService", 148 | @"User Authentication", 149 | @"VideoSubscriberAccountViewService", 150 | @"Web", 151 | @"WebContentAnalysisUI", 152 | @"WebSheet", 153 | @"WebViewService", 154 | @"Workbench Ad Tester", 155 | @"WLAccessService", 156 | nil]; 157 | 158 | //Using applist to gather installed app information 159 | ALApplicationList* apps = [ALApplicationList sharedApplicationList]; 160 | 161 | //Creating Dictionary to pull app list 162 | theApps = [[NSMutableDictionary alloc] init]; 163 | for(int i = 0; i < [apps.applications allKeys].count; i++) { 164 | NSString* name = [[apps.applications allValues] objectAtIndex:i]; 165 | if([excludedApps containsObject:name]) { 166 | continue; 167 | } 168 | theApps[[[apps.applications allKeys] objectAtIndex:i]] = name; 169 | } 170 | 171 | appNames = [[NSMutableArray alloc] init]; 172 | 173 | for(NSString* i in [theApps allValues]) { 174 | [appNames addObject:i]; 175 | } 176 | 177 | appNames = [[appNames sortedArrayUsingSelector:@selector(compare:)] mutableCopy]; 178 | 179 | [tabView reloadData]; 180 | 181 | 182 | //How the full list of installed bundle IDs is grabbed and placed into the bundleIDs array 183 | for (int i = 0; i < [theApps count]; i++) 184 | { 185 | NSString *bundleID = [theApps allKeysForObject:[appNames objectAtIndex:i]][0]; 186 | bundleID = [NSString stringWithFormat:@"%@\n", bundleID]; 187 | [bundleIDs addObject: bundleID]; 188 | } 189 | 190 | } 191 | 192 | //Defining what happens when you tap on an app in the table view 193 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 194 | [tableView deselectRowAtIndexPath:indexPath animated:YES]; 195 | NSString* str = [theApps allKeysForObject:[appNames objectAtIndex:indexPath.row]][0]; 196 | //copy single selected application bundle ID to clipboard 197 | [UIPasteboard generalPasteboard].string = str; 198 | 199 | //show single bundle ID alert 200 | showID = [UIAlertController alertControllerWithTitle:str message:@"Copied to the clipboard" preferredStyle:UIAlertControllerStyleAlert]; 201 | 202 | //Adding this code back in due to popular demand. Comment out just the UIAlertAction code and after the showID if you are adding back the auto-dismiss 203 | //The manual dismissal prompt for the UIAlertView 204 | UIAlertAction *actionOK = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^ (UIAlertAction *_Nonnull action) { 205 | NSLog(@"OK button is pressed"); 206 | }]; 207 | [showID addAction:actionOK]; 208 | 209 | 210 | //Allowing the alert to actually be displayed 211 | [self presentViewController:showID animated:YES completion:nil]; 212 | 213 | //Commenting out due to popular demand but leaving in case someone prefers it to auto-dismiss 214 | //Setting the timer for auto dismissing the alert 215 | /*[NSTimer scheduledTimerWithTimeInterval:2.0 216 | target:self 217 | selector:NSSelectorFromString(@"dismissIDAlert") 218 | userInfo:nil 219 | repeats:NO];*/ 220 | 221 | } 222 | 223 | //Defining the amount of rows in the tableView based on installed application count 224 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 225 | return [appNames count]; 226 | } 227 | 228 | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 229 | return 1; 230 | } 231 | 232 | //Defining how the table cells work 233 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 234 | 235 | static NSString* CellIdentifier = @"Cell"; 236 | 237 | UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 238 | if (cell == nil) { 239 | cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 240 | } 241 | 242 | //Getting the name of the app for the table cell 243 | cell.textLabel.text = [appNames objectAtIndex:indexPath.row]; 244 | 245 | 246 | //Setting the app icon size, colour, shape, and image 247 | UIImageView *imgAppIcon=[[UIImageView alloc] initWithFrame:CGRectMake(30, 5, 30, 30)]; 248 | imgAppIcon.backgroundColor=[UIColor clearColor]; 249 | [imgAppIcon.layer setCornerRadius:0.0f]; 250 | [imgAppIcon.layer setMasksToBounds:YES]; 251 | [imgAppIcon setImage:[[ALApplicationList sharedApplicationList] iconOfSize:ALApplicationIconSizeSmall forDisplayIdentifier:[theApps allKeysForObject:[appNames objectAtIndex:indexPath.row]][0]]]; 252 | [cell.contentView addSubview:imgAppIcon]; 253 | 254 | //Show app icon on table 255 | cell.accessoryView = imgAppIcon; 256 | 257 | return cell; 258 | 259 | } 260 | 261 | //How the Copy All button works 262 | -(void)copyAllButton:(id)sender { 263 | 264 | //show copy all bundle IDs alert 265 | copyAllAlert = [UIAlertController alertControllerWithTitle:@"All Bundle IDs" message:@"Copied to the clipboard" preferredStyle:UIAlertControllerStyleAlert]; 266 | 267 | //Commenting out due to crash caused by OK button dismissing the alert and dismissAlert trying to dismiss something that is no longer there 268 | /* 269 | UIAlertAction *actionOK = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^ (UIAlertAction *_Nonnull action) { 270 | NSLog(@"OK button is pressed"); 271 | }]; 272 | [copyAllAlert addAction:actionOK]; 273 | */ 274 | 275 | 276 | //Allowing the alert to actually be displayed 277 | [self presentViewController:copyAllAlert animated:YES completion:nil]; 278 | //Setting the timer for auto dismissing the alert 279 | [NSTimer scheduledTimerWithTimeInterval:2.0 280 | target:self 281 | selector:NSSelectorFromString(@"dismissAllAlert") 282 | userInfo:nil 283 | repeats:NO]; 284 | 285 | //All non-hidden bundle IDs to be copied 286 | NSString* copiedAllString = @""; 287 | for (int i=0; i < bundleIDs.count; i ++) { 288 | //Create the string of all application names 289 | NSString *allNames = [NSString stringWithFormat:@"%@\n", appNames[i]]; 290 | //Add the string of application names to the copied all string 291 | copiedAllString = [copiedAllString stringByAppendingString:allNames]; 292 | //Create the string of all application bundle IDs 293 | NSString *allBundles = [NSString stringWithFormat:@"%@\n", bundleIDs[i]]; 294 | //Add the string of application bundle IDs to the copied all string 295 | copiedAllString = [copiedAllString stringByAppendingString:allBundles]; 296 | } 297 | 298 | //copy all bundle IDs to clipboard 299 | [UIPasteboard generalPasteboard].string = copiedAllString; 300 | 301 | } 302 | 303 | @end 304 | -------------------------------------------------------------------------------- /control: -------------------------------------------------------------------------------- 1 | Package: com.wavelink.bundleidsxi 2 | Name: BundleIDsXI 3 | Depends: applist 4 | Conflicts: com.td.bundleidsxi, com.wavelink.bundleidsxinoappicons 5 | Version: 1.4.0 6 | Architecture: iphoneos-arm 7 | Description: App to see installed app bundle IDs. 8 | Maintainer: TD 9 | Author: TD 10 | Section: Utilities 11 | Icon: https://wavelinkstudios.github.io/site/repo/packageIcons/bidsxi.png 12 | Depiction: https://wavelinkstudios.github.io/site/repo/depictions/bidsxi/bidsxi.html 13 | SileoDepiction: https://wavelinkstudios.github.io/site/repo/depictions/sileoNative/bidsxi.json -------------------------------------------------------------------------------- /main.m: -------------------------------------------------------------------------------- 1 | #import "BundleIDsAppDelegate.h" 2 | 3 | int main(int argc, char *argv[]) { 4 | @autoreleasepool { 5 | return UIApplicationMain(argc, argv, nil, NSStringFromClass(BundleIDsAppDelegate.class)); 6 | } 7 | } 8 | --------------------------------------------------------------------------------