Swift: Как получить иконку другого приложения?

Хочу добавить в приложение возможность при построении маршрута до координат, дать возможность пользователю выбирать приложение. Столкнулся с проблемой: мне нужно получить актуальные иконки приложений, например, Яндекс.Карт, чтобы отобразить их в окне. Вопрос: как можно получить текущую иконку другого приложения?


Ответы (2 шт):

Автор решения: schmidt9

Иконки других приложений получить насколько я знаю невозможно, и Вам это скорее всего не нужно. Если вы хотите добавить функцию пересылки в другое приложение, то смотрите в сторону 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()
    }

}
→ Ссылка
Автор решения: WGPavell

В комментариях мне дали наводку на исходники Telegram. В общем-то, там просто идет обращение к https://itunes.apple.com/lookup?id=id, где id - id приложения в App Store. По ссылке возвращается JSON, в котором можно получить ссылку на иконку приложения (и некоторую другую информацию).

→ Ссылка