Загрузить внутреннее приложение из другого приложения программно

у нас есть много внутренних приложений, и мы хотим такое приложение, как AppStore. Мы сделали демо. Мы можем открывать установленные приложения, но приложения, не установленные на iPhone, не могут быть загружены с наших серверов на iPhone.

We do:

if([UIApplication sharedApplication] canOpenURL:..] == false){
    NSString *schemelink = [NSString stringWithFormat:@"itms-services://?action=download-manifest&url=%@",**plist_url**];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:schemelink]]
}

Что мы делаем, чтобы найти причину:

  1. Скопируйте и вставьте URL-адрес plist в Mac Safari, и я проверю plist, и все будет правильно (ссылки ipa и другие). Они все на одном пути.
  2. Скопируйте и вставьте только URL-адрес ipa. Он начал загружаться на Mac.
  3. Скопируйте и вставьте URL-адрес ipa с itms-services://?action=download-manifest&url=, он говорит

Не установлено приложение для открытия URL-адреса ......ipa Найдите в App Store приложение, которое может открыть этот документ, или выберите существующее приложение на вашем компьютере.

Как я могу это решить?

.plist:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">
<dict>
    <key>items</key>
    <array>
        <dict>
            <key>assets</key>
            <array>
                <dict>
                    <key>kind</key>
                    <string>software-package</string>
                    <key>url</key>
                    <string>https://....../AppName.ipa</string>
                </dict>
            </array>
            <key>metadata</key>
            <dict>
                <key>bundle-identifier</key>
                <string>com.company.AppName</string>
                <key>bundle-version</key>
                <string>1.3</string>
                <key>kind</key>
                <string>software</string>
                <key>title</key>
                <string>AppName</string>
            </dict>
        </dict>
    </array>
</dict>
</plist>

person eceall    schedule 11.05.2016    source источник
comment
Ваш файл manifest.plist размещен на сервере с поддержкой SSL? если нет, то не получится.   -  person Dipen Panchasara    schedule 11.05.2016


Ответы (1)


Ваш plist файл должен быть размещен на сервере с поддержкой HTTPS SSL, иначе вы не сможете его установить.

Я приложил пример файла manifest.plist с примерами данных, которые вы можете изменить с помощью исходного файла.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>items</key>
    <array>
        <dict>
            <key>assets</key>
            <array>
                <dict>
                    <key>kind</key>
                    <string>software-package</string>
                    <key>url</key>
                    <string>https://127.0.0.0/app/App.ipa</string>
                </dict>
                <dict>
                    <key>kind</key>
                    <string>display-image</string>
                    <key>url</key>
                    <string>https://127.0.0.0/app/icon57.png</string>
                </dict>
                <dict>
                    <key>kind</key>
                    <string>full-size-image</string>
                    <key>url</key>
                    <string>https://127.0.0.0/app/icon512.jpg</string>
                </dict>
            </array>
            <key>metadata</key>
            <dict>
                <key>bundle-identifier</key>
                <string>com.companyname.appname</string>
                <key>bundle-version</key>
                <string>1.0</string>
                <key>kind</key>
                <string>software</string>
                <key>title</key>
                <string>Your application name</string>
            </dict>
        </dict>
    </array>
</dict>
</plist>

Поместите все следующие файлы в один каталог на вашем сервере.

  • App.ipa
  • значок57.png
  • значок512.jpg
  • manifest.plist

Ваш URL-адрес загрузки должен выглядеть следующим образом.

itms-services://?action=download-manifest&url=https://127.0.0.0/app/manifest.plist

Пример Нажмите здесь, чтобы загрузить приложение.< /а>

Также убедитесь, что ваш сервер поддерживает тип MIME application/octet-stream для ipa и text/xml для plist.

person Dipen Panchasara    schedule 11.05.2016
comment
Все они правильные, но результат тот же; ничего: / Я добавляю содержимое своего plist к вопросу. Теперь в приложении нет значка. - person eceall; 11.05.2016
comment
Да, это сервер с поддержкой SSL, и типы MIME одинаковы. - person eceall; 11.05.2016
comment
он всегда пытается загрузить внутреннее приложение с AppStore - person eceall; 11.05.2016
comment
Он не должен попадать в AppStore. Ваш URL-адрес загрузки такой же, как показано в примере, и указывает на файл .plist? Вы получаете какую-либо ошибку? - person Dipen Panchasara; 11.05.2016
comment
Вы можете сделать одно: загрузить пакет приложений, plist и все остальное в Dropbox. Укажите там ссылку для скачивания. если это работает, значит, у вас проблемы с сервером. - person Dipen Panchasara; 11.05.2016
comment
Еще одна вещь, которую вам не хватает, это ваше отображаемое изображение и маленькое изображение для приложения в plist. Все файлы должны быть там .plist, .ipa, icon57 и icon512. Добавьте их, если они отсутствуют. - person Dipen Panchasara; 11.05.2016
comment
Да, это правда и не ошибка. itms-services://?action=download-manifest&url=https://.........plist - person eceall; 11.05.2016
comment
у нас есть несколько собственных приложений в Dropbox, но и для них тоже самое. но я могу скачать URL-адрес ipa через сафари на iphone. Но itms-service.... plist url для сафари просит открыть его в магазине приложений. как заставить его просто скачать и не открывать в магазине приложений? - person eceall; 11.05.2016
comment
Мое приложение позволяет загружать другое приложение внутри приложения по нажатию кнопки, оно отлично работает без каких-либо проблем. - person Dipen Panchasara; 11.05.2016
comment
проблема была на стороне сервера. Парень не сказал мне, почему, но после того, как он что-то сделал, это разрешилось. Все равно спасибо. Извините за поздний ответ. - person eceall; 25.05.2016