Открыть приложение по нажатию кнопки с идентификатором пакета (без схемы url)

#ios #swift #api

#iOS #swift #API

Вопрос:

В настоящее время я разрабатываю приложение и пытаюсь добавить кнопку, которая откроет другое приложение, установленное на моем телефоне, при нажатии кнопки

Я пытался найти схему URL для приложения, но не могу ее найти. Единственное, что я могу найти, это идентификатор пакета. Итак, я подумал, может быть, есть способ использовать идентификатор пакета для открытия приложения через частные API в Swift? Мой телефон взломан, если это поможет. Ниже приведен мой код

     @IBAction func openAppTapped(_ sender: Any) {
        UIApplication.shared.openURL(NSURL(string: "itms-apps://itunes.apple.com/us/app/apspace/id1413678891?mt=8")! as URL)      

    }
 

Мне удалось запустить приложение в appstore при нажатии на кнопку, но я хочу, чтобы способ открыть приложение напрямую, не используя схемы URL, а вместо этого используя идентификатор пакета и / или частные API. Любая помощь была бы очень признательна!

Ответ №1:

Чтобы открыть другое приложение, вам либо придется использовать какое-то расширение, предоставляемое этим приложением, либо выяснить их схему URL и перепроектировать ее.

Первое, что вы могли бы попробовать, это просмотреть Info.plist приложения и посмотреть, определили ли они схему URL для своего приложения. Если нет, и они не внедрили расширение, то я думаю, что вы SOL.

Если они определили его, попробуйте использовать его для открытия своего приложения и посмотрите, что произойдет, у них может быть какой-то код, который отклоняет или принимает запрос на открытие их приложения на основе формата URL после их схемы. Если вы не можете понять это методом проб и ошибок, вы можете использовать тот факт, что ваш телефон взломан, чтобы декомпилировать их приложение и найти логику синтаксического анализа URL, которая, вероятно, находится в их AppDelegate. Оттуда вы можете попытаться создать URL-адрес, который вы можете использовать для успешного открытия своего приложения каждый раз.

Комментарии:

1. Как я уже упоминал в своем посте, в приложении нет схемы URL, поэтому я пытаюсь найти способ открыть его с помощью идентификатора пакета, потому что, по-видимому, есть способ сделать это с помощью частных API

2. Извините, я подумал, что, когда вы сказали «… Я не могу его найти …» вы имели в виду, что не знали, где искать. Если схемы URL нет, то невозможно открыть другое приложение в производственной среде без использования сумасшедшего взлома, такого как импорт XCTest, импорт частных заголовков из XCUIApplication, а затем использовать их для открытия другого приложения по идентификатору пакета.

3. Я думаю, что есть способ сделать это, импортировав файл заголовка LSApplicationWorkspace, но опять же этот файл заголовка находится в Objective C, и я не уверен, как импортировать его в Swift. Я мог бы использовать что-то вроде openApplicationWithBundleID:(id)arg1