alex_lip
alex_lip27 декабря 2017 г. 16:43

QDesktopServices::openUrl не работает под IOS

Открываю локальный файл следующим образом

QDesktopServices::openUrl(QUrl::fromLocalFile(QStandardPaths::
writableLocation(QStandardPaths::GenericDataLocation) + "/temp_esd/file."+file_ext));

После установки на ipad вылезает ошибка - this plugin does not support. В доке по QT написано

Warning: URLs passed to this function on iOS will not load unless their schemes are listed in the LSApplicationQueriesSchemes key of the application's Info.plist file. For more information, see the Apple Developer Documentation for canOpenURL(_:) . For example, the following lines enable URLs with the HTTPS scheme:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>https</string>
</array>

Во первых - непонятно что и где прописать. А во вторых - может другой способ есть?



Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

18
Evgenii Legotckoi
  • 27 декабря 2017 г. 18:23

Я с iOS не работаю, но судя по информации в доках, нужно добавить в pro файл платформозависимую информацию о Info.plist.

ios {
    QMAKE_INFO_PLIST = ios/Info.plist
}
Подробнее посмотрите в доках по платформе iOS на этой странице
Ну и судя по всему информация записывается таким образом в этом листе.
<key>CFBundleIcons</key>
<dict>
    <key>CFBundlePrimaryIcon</key>
    <dict>
        <key>CFBundleIconFiles</key>
        <array>
            <string>AppIcon29x29.png</string>
            <string>AppIcon29x29@2x.png</string>
            <string>AppIcon40x40@2x.png</string>
            <string>AppIcon57x57.png</string>
            <string>AppIcon57x57@2x.png</string>
            <string>AppIcon60x60@2x.png</string>
        </array>
    </dict>
</dict>
<key>CFBundleIcons~ipad</key>
<dict>
    <key>CFBundlePrimaryIcon</key>
    <dict>
        <key>CFBundleIconFiles</key>
        <array>
            <string>AppIcon29x29.png</string>
            <string>AppIcon29x29@2x.png</string>
            <string>AppIcon40x40@2x.png</string>
            <string>AppIcon57x57.png</string>
            <string>AppIcon57x57@2x.png</string>
            <string>AppIcon60x60@2x.png</string>
            <string>AppIcon29x29~ipad.png</string>
            <string>AppIcon29x29@2x~ipad.png</string>
            <string>AppIcon40x40~ipad.png</string>
            <string>AppIcon40x40@2x~ipad.png</string>
            <string>AppIcon50x50~ipad.png</string>
            <string>AppIcon50x50@2x~ipad.png</string>
            <string>AppIcon72x72~ipad.png</string>
            <string>AppIcon72x72@2x~ipad.png</string>
            <string>AppIcon76x76~ipad.png</string>
            <string>AppIcon76x76@2x~ipad.png</string>
        </array>
    </dict>
</dict>
То есть, если я понял правильно, то ваш URL не удастся открыть, если о нём нет информации в данном листе.

    alex_lip
    • 27 декабря 2017 г. 18:53

    В доках говорится что qt сам генерит этот list. Поэтому хотелось бы через qt указывать необходимые параметры, а не перезаписывать каждый раз его заново. И непонятно что для xls прописывать, а что для word или pdf.

      Evgenii Legotckoi
      • 27 декабря 2017 г. 19:06

      А ещё там же написано, что желательно заменить данный файл своим собственным, чтобы избежать постоянной генерации файла утилитой qmake, а соответственно и настроить данный файл потребуется руками и самостоятельно.

      It is advisable to replace the generated Info.plist with your own copy, to prevent it from being overwritten the next time qmake is run. You can define a custom information property list with QMAKE_INFO_PLIST variable in your .pro file.
        alex_lip
        • 27 декабря 2017 г. 19:11
        • (ред.)

        так фраза
        You can define a custom information property list with QMAKE_INFO_PLIST variable in your .pro file.
        как раз и говорит, что можно настроить данный файл через QMAKE_INFO_PLIST variable in your .pro file

        Забавно - в одном абзаце две противоречащих друг другу рекомендации

          Evgenii Legotckoi
          • 27 декабря 2017 г. 19:14
          а не перезаписывать каждый раз его заново.
          я это к тому, что его нужно переписать только один раз своим файлом. В документации сказано, что как только файл сгенерен, заменяете его своей копией и работаете. qmake не должен его переписывать при дальнейших запусках.
          Там уже определяете свои собственные параметры.
          Я очень сомневаюсь, что в Qt Creator есть утилита для настройки в стиле мышкотыканья, учитывая, что в документации написано, что можете прописать все кастомные параметры самостоятельно.

            alex_lip
            • 27 декабря 2017 г. 19:14

            вот пример со всякими социальными сетям. А как называется word, excel and pdf - вот вопрос.

            <key>LSApplicationQueriesSchemes</key>
                <array>
                 <string>fb</string>
                 <string>fbapi</string>
                 <string>fbauth2</string>
                 <string>fbshareextension</string>
                 <string>fb-messenger-api</string>
                 <string>twitter</string>
                 <string>viber</string>
                 <string>whatsapp</string>
                 <string>wechat</string>
                 <string>line</string>
                 <string>instagram</string>
                 <string>kakaotalk</string>
                 <string>mqq</string>
                 <string>vk</string>
                 <string>comgooglemaps</string>
                 <string>googlephotos</string>
                 <string>ha</string>
                </array>
              alex_lip
              • 27 декабря 2017 г. 19:58

              вот здесь тема обсуждалась
              http://www.cyberforum.ru/qt/thread1919853.html
              сам все проверю - если что-то получится - отпишусь.


                alex_lip
                • 28 декабря 2017 г. 14:54

                Похоже что директива

                ios {

                QMAKE_INFO_PLIST= ios/Info.plist
                }
                защищает info.plist от автоматической перезаписи. Смотрел через xcode - проект компилится с нужным info.plist.
                Для word и excel http://wopi.readthedocs.io/projects/officewopi/en/latest/scenarios/from_app.html
                https://msdn.microsoft.com/en-us/library/office/dn911482.aspx#sectionSection1
                прописал
                <key>LsApplicationQueriesSchemes</key>
                <array>
                <string>ms-word:</string>
                <string>ms-powerpoint:</string>
                <string>ms-excel:</string>
                </array>

                Безрезультатно.
                ОЧЕНЬ сильно напрягает вот эта инфа https://stackoverflow.com/questions/38528983/cannot-connect-to-url-ms-word-url-scheme   - For the ms-word url scheme to work, the document must live in SharePoint or OneDrive
                получается чтобы открыть эти файлы надо их в специальное место поместить?????
                Думаю может как-нибудь их броузеру подсунуть через
                 QWebView view
                или openUrlExternally.





                  alex_lip
                  • 28 декабря 2017 г. 17:08
                  • Ответ был помечен как решение.

                  Due to the security model of iOS applications, it’s not possible to directly open a local file from an application to another application.

                  - вот ведь...

                    alex_lip
                    • 28 декабря 2017 г. 20:21

                    вот здесь интересный вариант https://code.tutsplus.com/tutorials/ios-sdk-previewing-and-opening-documents--mobile-15130
                    У вас был опыт работы с UIDocumentInteractionController
                    - в QT есть возможность его использовать?

                      alex_lip
                      • 11 января 2018 г. 12:23

                      В общем разработка под IOS та еще песня... Конкретно мою задачу можно решить только на Objective-C. Благо в QT можно делать нативные вставки. Вот в этом блоге все детально расписано. https://blog.qt.io/blog/2017/12/01/sharing-files-android-ios-qt-app/

                        Evgenii Legotckoi
                        • 11 января 2018 г. 13:25

                        Да уж...
                        Надо будет тогда хотя бы перевод этой статьи сделать, раз уж такие проблемы, а под iOS я не работаю.
                        Хорошо, что у Вас разрешился вопрос.

                          alex_lip
                          • 11 января 2018 г. 16:34

                          В этом блоге задача более широко поставлена. Но факт остается фактом - отдельно процедура под андроид - отдельно под ios.

                            Evgenii Legotckoi
                            • 11 января 2018 г. 17:22

                            Ясно. Было бы здорово, если бы Вы описали в виде статьи свой опыт с этой задачей, если, конечно, у вас будет время и желание.

                              alex_lip
                              • 11 января 2018 г. 18:09

                              Я боюсь без матерных выражений мою встречу с apple не описать. Сам процесс разработки - то что ты должен идти на поклон к apple за временным сертификатом даже для того чтобы оттестировать свою прогу на своем же устройстве(ipad или iphone) - это нечто! Когда все домучаю - постараюсь коротко описать основные этапы.

                                Evgenii Legotckoi
                                • 11 января 2018 г. 18:11

                                Вау... Прикол с сертификатом для своего же устройства - это действительно что-то вон выходящее за рамки...
                                Жду с нетерпением этой эпической повести!

                                  alex_lip
                                  • 12 января 2018 г. 19:38

                                  Написал текст - посмотрите

                                    Evgenii Legotckoi
                                    • 12 января 2018 г. 19:57

                                    Всё отлично!
                                    Единственное, только Qt вместо QT.
                                    На сайте в правом верхнем углу есть ссылка "Написать статью", там будет редактор, создадите статью, перенесите текст туда, и нажмите Опубликовать. После публикации будет первичная модерация, на которой я поправлю огрехи вёрстки, если такие будут и подготовлю финальную версию.
                                    Хорошо пишите, с душой ))))

                                      Комментарии

                                      Только авторизованные пользователи могут публиковать комментарии.
                                      Пожалуйста, авторизуйтесь или зарегистрируйтесь
                                      Ua

                                      Qt - Тест 001. Сигналы и слоты

                                      • Результат:84баллов,
                                      • Очки рейтинга4
                                      Ua

                                      Qt - Тест 001. Сигналы и слоты

                                      • Результат:42баллов,
                                      • Очки рейтинга-8
                                      ОК

                                      Qt - Тест 001. Сигналы и слоты

                                      • Результат:47баллов,
                                      • Очки рейтинга-6
                                      Последние комментарии
                                      ИМ
                                      Игорь Максимов22 ноября 2024 г. 21:51
                                      Django - Урок 017. Кастомизированная страница авторизации на Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                                      Evgenii Legotckoi
                                      Evgenii Legotckoi31 октября 2024 г. 23:37
                                      Django - Урок 064. Как написать расширение для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                                      A
                                      ALO1ZE19 октября 2024 г. 17:19
                                      Читалка fb3-файлов на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                                      ИМ
                                      Игорь Максимов5 октября 2024 г. 16:51
                                      Django - Урок 064. Как написать расширение для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                                      d
                                      dblas55 июля 2024 г. 20:02
                                      QML - Урок 016. База данных SQLite и работа с ней в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                                      Сейчас обсуждают на форуме
                                      f
                                      firstlunoxod15 февраля 2025 г. 13:46
                                      Рисование на QGraphicsScene при зажатой кнопке мыши Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
                                      Дмитрий
                                      Дмитрий3 февраля 2025 г. 16:24
                                      Создание deb-пакета. Как создать ярлык на рабочем столе после установки собственного deb-пакета? Всем привет. Сделал свой deb-пакет с программой. Всё устанавливается и работает. Ставлю по пути /usr/bin/my_application. Как для пользователя при установке пакета сразу создать ярлык на раб…
                                      NW
                                      Nayo Wai30 января 2025 г. 19:22
                                      не запускается компьютер!!! Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
                                      n
                                      nkly3 января 2025 г. 12:52
                                      Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
                                      M
                                      Marsel17 августа 2023 г. 0:26
                                      OAuth2.0 через VK, получение email Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.

                                      Следите за нами в социальных сетях