Как проверить программно, если приложение установлено?

Я разрабатываю приложение для iPhone, которое будет устанавливать несколько сторонних приложений на предприятии. У меня есть информация о идентификаторах пакета. Есть ли способ проверить, установлено ли приложение, используя некоторые системные API? В настоящее время приложение снова устанавливается, перезаписывая текущую установку. Мне нужно как-то предотвратить это. (Приложение Apple AppStore отключает параметр установки, если приложение уже установлено.)

Я думаю, что это невозможно напрямую, но если приложения регистрируют схемы uri, вы можете проверить это.

Схема URI, например, fb:// для приложения facebook. Вы можете зарегистрировать это в info.plist вашего приложения. [UIApplication canOpenURL:url] сообщит вам, будет или не будет открыт какой-либо URL-адрес. Таким образом, если будет открыто fb:// , будет указано, что установлено приложение, которое зарегистрировало fb:// – это хороший совет для приложения facebook.

 // check whether facebook is (likely to be) installed or not if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fb://"]]) { // Safe to launch the facebook app [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"fb://profile/200538917420"]]; } 

Вот пример, чтобы проверить, установлено ли приложение facebook

 if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fb://"]]) { // Facebook app is installed } 

Для тех, кто пытается это сделать с помощью iOS 9 / Swift 2:

Во-первых, вам нужно «переименовать белый список», добавив следующее в ваш файл Info.plist (функция безопасности – см . Ответ Льва Натана ):

 LSApplicationQueriesSchemes  fb  

После этого вы можете узнать, доступно ли приложение и имеет ли зарегистрированная схема:

 guard UIApplication.sharedApplication().canOpenURL(NSURL(string: "fb://")!) else { NSLog("No Facebook? You're a better man than I am, Charlie Brown.") return } 

Swift 3.1, Swift 3.2, Swift 4

 if let urlFromStr = URL(string: "fb://") { if UIApplication.shared.canOpenURL(urlFromStr) { if #available(iOS 10.0, *) { UIApplication.shared.open(urlFromStr, options: [:], completionHandler: nil) } else { UIApplication.shared.openURL(urlFromStr) } } } 

Добавьте их в Info.plist:

 LSApplicationQueriesSchemes  fb  

Когда дело доходит до социальных сетей, лучше всего проверить несколько схем. (Поскольку схема «fb» устарела для SDK IOS9, например.):

 NSArray* fbSchemes = @[ @"fbapi://", @"fb-messenger-api://", @"fbauth2://", @"fbshareextension://"]; BOOL isInstalled = false; for (NSString* fbScheme in fbSchemes) { isInstalled = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:fbScheme]]; if(isInstalled) break; } if (!isInstalled) { // code return; } 

Конечно, Info.plist также должен содержать все необходимые схемы:

 LSApplicationQueriesSchemes  fbapi fb-messenger-api fbauth2 fbshareextension  

iOS 9 и более новое обновление:

Из-за некоторых изменений безопасности, сделанных Apple в iOS 9, в дополнение к canOpenURL, упомянутому в других ответах, вам также необходимо добавить массив LSApplicationQueriesSchemes со строками в info.plist. Смотрите скриншот для примера с помощью Twitter.

info.plist Массив LSApplicationQueriesSchemes

Если вы хотите добавить Facebook, вы просто добавите еще один элемент в массив со строковым значением «fb».

  • Может ли iPhone приложение блокировать телефонные звонки?
  • NSMutableString как сохранить / скопировать
  • как получить ip-адрес iphone программно
  • Правильный способ выхода из приложения iPhone?
  • В чем разница между «отображаемым именем пакета» и «именем пакета» в информационном plist приложения cocoa
  • Что означает подчеркивание в имени переменной-члена в Objective-C?
  • View-based NSTableView с строками с динамическими высотами
  • NSDateFormatter dateFromString возвращает nil
  • Что делает флаг компоновщика -all_load?
  • `` соглашение
  • Комплект iPhone Store «Не удается подключиться к iTunes Store»
  • Давайте будем гением компьютера.