Swift: Как получить иконку другого приложения?
Хочу добавить в приложение возможность при построении маршрута до координат, дать возможность пользователю выбирать приложение. Столкнулся с проблемой: мне нужно получить актуальные иконки приложений, например, Яндекс.Карт, чтобы отобразить их в окне. Вопрос: как можно получить текущую иконку другого приложения?
Ответы (2 шт):
Иконки других приложений получить насколько я знаю невозможно, и Вам это скорее всего не нужно. Если вы хотите добавить функцию пересылки в другое приложение, то смотрите в сторону UIActivityViewController, если вам нужно отобразить в приложении карту, то используйте соответствующие библиотеки
Дополнение
Вдогонку к комментарию о загрузке иконок написал пример получения иконок с айтюнса
class ViewController: UIViewController {
@IBOutlet var iconImageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
getIconUrl {
self.loadIcon(from: $0)
}
}
let yandexMapsId = "313877526"
/// https://affiliate.itunes.apple.com/resources/documentation/itunes-store-web-service-search-api/
func getIconUrl(_ completion: @escaping (URL) -> Void) {
guard let url = URL(string: "http://itunes.apple.com/lookup?id=\(yandexMapsId)") else {
return
}
let session = URLSession(configuration: .default)
session.dataTask(with: url) { (data, response, error) in
if let error = error {
print(error.localizedDescription)
return
}
guard let data = data else {
return
}
guard let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] else {
return
}
if json["results_count"] as? Int == 0 {
return
}
print(json)
guard let results = json["results"] as? Array<Any>, let result = results.first as? [String : Any] else {
return
}
guard let urlString = result["artworkUrl100"] as? String, let url = URL(string: urlString) else {
return
}
completion(url)
}.resume()
}
func loadIcon(from url: URL) {
let session = URLSession(configuration: .default)
session.dataTask(with: url) { (data, response, error) in
if let error = error {
print(error.localizedDescription)
return
}
guard let data = data else {
return
}
DispatchQueue.main.async {
self.iconImageView.image = UIImage(data: data)
}
}.resume()
}
}
В комментариях мне дали наводку на исходники Telegram. В общем-то, там просто идет обращение к https://itunes.apple.com/lookup?id=id, где id - id приложения в App Store. По ссылке возвращается JSON, в котором можно получить ссылку на иконку приложения (и некоторую другую информацию).