Как сделать поиск любого объема в macOS - PullRequest
0 голосов
/ 04 мая 2019
 - (void)readFolder:(NSString *)str :(NSMutableDictionary *)dict {
    NSArray *appFolderContents = [[NSArray alloc] init];
    appFolderContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:str error:nil];
    for (NSString *app in appFolderContents) {
        if ([app containsString:@".app"])
        {
            NSString *appName = [[app lastPathComponent] stringByDeletingPathExtension];
            NSString *appPath = [NSString stringWithFormat:@"%@/%@", str, app];
            NSString *appBundle = [[NSBundle bundleWithPath:appPath] bundleIdentifier];
//            NSLog(@"%@ -- %@", appPath, appBundle);
            NSArray *jumboTron = [NSArray arrayWithObjects:appName, appPath, appBundle, nil];
            [dict setObject:jumboTron forKey:appName];
        }
    }
}

//This searches for apps
- (void)getAPPList {
    NSMutableDictionary *myDict = [[NSMutableDictionary alloc] init];

    [self readFolder:@"/Applications" :myDict];
    [self readFolder:@"/Applications/Utilities" :myDict];
    [self readFolder:@"/System/Library/CoreServices" :myDict];
    [self readFolder:@"/Volumes/Macintosh HD/Applications" :myDict ];

// Volumes not named 'Macintosh HD' doesn't work, I'm trying to make it work
    [self readFolder:@"/Volumes/*/Applications" :myDict ];
//Some apps are stored in the user's Application folder instead of the main one
    [self readFolder:[NSString stringWithFormat:@"%@/Applications", NSHomeDirectory()] :myDict];
//Sometimes people keep apps in Downloads
    [self readFolder:[NSString stringWithFormat:@"%@/Downloads", NSHomeDirectory()] :myDict];
//Some apps are stored in the user's Library/Application Support sometimes
    [self readFolder:[NSString stringWithFormat:@"%@/Library/Application Support", NSHomeDirectory()] :myDict];

Я пытаюсь заставить строку 26 ([self readFolder:@"/Volumes/*/Applications" :myDict ]) выполнять поиск по всем томам, а не только по поиску тома с соответствующим / конкретным именем.Как я могу это сделать?

Я использую Xcode 9.2

1 Ответ

0 голосов
/ 07 мая 2019

что-то вроде этого должно сделать свое дело (не проверено)

   NSArray *keys = [NSArray arrayWithObjects:NSURLVolumeURLKey, NSURLIsVolumeKey, nil];
   NSArray *volumeUrls = [[NSFileManager defaultManager] mountedVolumeURLsIncludingResourceValuesForKeys:keys options:NSVolumeEnumerationSkipHiddenVolumes];
  for (NSURL *volumeUrl in volumeUrls)
  {
     BOOL mayBeBootVolume = NO;
     NSString* pathToVolume = [volumeUrl path];
     [self readFolder: [pathToVolume stringByAppendingString: @"/Applications"];
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...