Реклама
  • 27 декабря 2017 г. 10: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>

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



  • #
  • 27 декабря 2017 г. 12: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 не удастся открыть, если о нём нет информации в данном листе.

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

А ещё там же написано, что желательно заменить данный файл своим собственным, чтобы избежать постоянной генерации файла утилитой 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.
  • #
  • отредактировано 27 декабря 2017 г. 13:12
  • 27 декабря 2017 г. 13: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

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

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

вот пример со всякими социальными сетям. А как называется 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>

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


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

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.





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

- вот ведь...

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

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

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

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

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

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

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

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

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

Реклама

Ответы

Только авторизованные пользователи могут отвечать на форуме.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
  • falcon
  • 16 января 2018 г. 17:25

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

  • Результат 100 баллов
  • Очки рейтинга 10
  • falcon
  • 16 января 2018 г. 17:22

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

  • Результат 68 баллов
  • Очки рейтинга -1
  • falcon
  • 16 января 2018 г. 17:18

C++ - Тест 001. Первая программа и типы данных

  • Результат 73 баллов
  • Очки рейтинга 1
Последние комментарии

QML - Урок 021. Переключение между окнами в QML

Спасибо всем. Все получилось. Прикручиваю логику.

  • BlinCT
  • 14 января 2018 г. 19:28

Разработка на Qt под iOS

Вот честно, на сколько же муторно под огрызок что то делать. Куча проблем) А вод линь или под Андроид все просто и тривиально))

  • folax
  • 12 января 2018 г. 9:16

QML - Урок 021. Переключение между окнами в QML

Ничего сложного, делаете по тех заданию 3 файла qml, называете их как указанно в тех задании, потом из первого окна через Loader их переключаете, в окне 2 и 3 делаете сигналы которые при закры...

QML - Урок 021. Переключение между окнами в QML

Все верно, я и не говорил что этот кусок кода лично мое произведение. Это тоже верно: Это задание для прохождения на собеседование в одну из крупных украинских IT компаний. Логику ...

  • folax
  • 12 января 2018 г. 8:13

QML - Урок 021. Переключение между окнами в QML

int main(int argc, char *argv[]){ QApplication app(argc, argv); Logic logic; QQmlApplicationEngine engine; engine.rootContext()->setContextProperty("logic", &logic)...

Сейчас обсуждают на форуме

Как проверить доступность сервера

Точно!!! Я сейчас так пробую QNetworkReply *replay_news = networkManager_news->get(QNetworkRequest(QUrl(url_news)));connect(networkManager_news, &QNetworkAccessManager::...

ChartView. Отображение метки данных точки серии при наведении курсора

Спасибо большущее за советы! Все получилось через ScatterSeries. Методы remove() как-то сходу не дались, удаляет в первый раз, а потом программа падает... Не стал тратить время и воспользовалс...

QGraphicsScene

спасибо, за подробное объяснение строчки, а с зумом я разобрался, все работает

  • EVILEG
  • 15 января 2018 г. 17:21

Qt webgl

Насчёт проверки подключения клиента я не в курсе. Что касается экземпляров приложения, то из того, что я читал получается, что нет необходимости в нескольких экземплярах для нескольких кл...

  • EVILEG
  • 15 января 2018 г. 11:39

Проблема добавления #DEFINE при сборке CMak'ом

А Вы не пробовали сделать предкомпилированные библиотеки boost под свою систему, а потом уже подключать собранные библиотеки Boost`а? Просто один только boost может собираться на пару гиг...