最近要写一个项目,需要获取本地应用程序的相关信息。发现在iphone上的设置-用量里可以找到本地应用程序的信息,求有什么代码上的方法实现获取应用信息,除了越狱以外,如果通过向苹果公司申请一些授权可以获取也请帮忙告诉我,多谢!
解决办法:
用到私有API:
BOOL APCheckIfAppInstalled(NSString *bundleIdentifier){
      static NSString *const cacheFileName = @"com.apple.mobile.installation.plist";
      NSString *relativeCachePath = [[@"Library" stringByAppendingPathComponent: @"Caches"] stringByAppendingPathComponent: cacheFileName];
      NSDictionary *cacheDict = nil;
      NSString *path = nil;
      NSLog(@"relativeCachePath:%@",relativeCachePath);
      // Loop through all possible paths the cache could be in
      for (short i = 0; 1; i++) {
            switch (i) {
                  case 0: // Jailbroken apps will find the cache here; their home directory is /var/mobile
                  path = [NSHomeDirectory() stringByAppendingPathComponent: relativeCachePath];
                  break;
                  case 1: // App Store apps and Simulator will find the cache here; home (/var/mobile/) is 2 directories above sandbox folder
                  path = [[NSHomeDirectory() stringByAppendingPathComponent: @"../.."] stringByAppendingPathComponent: relativeCachePath];
                  break;
                  case 2: // If the app is anywhere else, default to hardcoded /var/mobile/
                  path = [@"/var/mobile" stringByAppendingPathComponent: relativeCachePath];
                  break;
                  default: // Cache not found (loop not broken)
                  return NO;
                  break;
            }
            BOOL isDir = NO;
            NSLog(@"path:%@",path);
            // Ensure that file exists
            if ([[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&isDir] && !isDir){
                  cacheDict = [NSDictionary dictionaryWithContentsOfFile: path];
            }
            // If cache is loaded, then break the loop. If the loop is not "broken," it will return NO later (default: case)
            if (cacheDict){
                  NSLog(@"cacheDict:%@",cacheDict);
                  break;
            }
      }
      NSLog(@"gggg");
      // First check all system (jailbroken) apps
      NSDictionary *system = [cacheDict objectForKey: @"System"];
      NSLog(@"system:%@",system);
      if ([system objectForKey: bundleIdentifier]){
            return YES;
      }
      // Then all the user (App Store /var/mobile/Applications) apps
      NSDictionary *user = [cacheDict objectForKey: @"User"];
      NSLog(@"user:%@",user);
      if ([user objectForKey: bundleIdentifier]){
            return YES;
      }
      // If nothing returned YES already, we'll return NO now
      return NO;
}