© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
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>

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



Я с 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 не удастся открыть, если о нём нет информации в данном листе.

Для Django рекомендую VDS-хостинг TIMEWEB

В доках говорится что 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.

Для Django рекомендую VDS-хостинг TIMEWEB

так фраза
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 есть утилита для настройки в стиле мышкотыканья, учитывая, что в документации написано, что можете прописать все кастомные параметры самостоятельно.

Для Django рекомендую VDS-хостинг TIMEWEB

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





  • #
  • Ответ был помечен как решение
  • 28 декабря 2017 г. 11: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.

- вот ведь...

вот здесь интересный вариант 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 я не работаю.
Хорошо, что у Вас разрешился вопрос.

Для Django рекомендую VDS-хостинг TIMEWEB

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

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

Для Django рекомендую VDS-хостинг TIMEWEB

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

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

Для Django рекомендую VDS-хостинг TIMEWEB

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

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

Для Django рекомендую VDS-хостинг TIMEWEB

Ответы

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

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

  • Результат 100баллов,
  • Очки рейтинга10
24 сентября 2018 г. 17:37
edorofeeva

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

  • Результат 66баллов,
  • Очки рейтинга-1
23 сентября 2018 г. 14:38
No Names

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

  • Результат 60баллов,
  • Очки рейтинга-1
Последние комментарии
24 сентября 2018 г. 15:09
Евгений Легоцкой

Qt Linux - Урок 001. Автозапуск Qt приложения под Linux

А вот здесь у меня есть пример использования supervisor. https://evileg.com/ru/post/3/ Вся статья вам там не интересна, интересен только шаг с настройкой supervisor. Он получается ...
24 сентября 2018 г. 15:00
avovana

Qt Linux - Урок 001. Автозапуск Qt приложения под Linux

Не могли бы дать ссылку на пример? Какое-то рабочее использование. Т.е. у меня есть Qt Gui App, которое я бы хотел запускать при старте системы и в случае, если оно грохнется. Если о чем Вы го...
24 сентября 2018 г. 14:55
Евгений Легоцкой

Qt Linux - Урок 001. Автозапуск Qt приложения под Linux

Если честно, то я не уверен, что это вообще можно реализовать через *.desktop файл. Я сделал предположение на основе того, что вы сказали про *.desktop и рестарт. Все варианты, котор...
24 сентября 2018 г. 14:47
avovana

Qt Linux - Урок 001. Автозапуск Qt приложения под Linux

Просто сейчас правлю сам файл example.desktop. Пытаюсь понять какую пару key=value мне нужно дописать.
24 сентября 2018 г. 14:42
Евгений Легоцкой

Qt Linux - Урок 001. Автозапуск Qt приложения под Linux

Ну я имел ввиду, что дописать в коде вот сюда то, о чём вы говорили про рестарт QString autorunContent("[Desktop Entry]\n" "Type=Application\n" ...
Сейчас обсуждают на форуме
24 сентября 2018 г. 16:47
Евгений_Канусовский@1981

Чтение файлов в python

Добрый вечер Евгений и форумчане! Столкнулся с проблемой чтения файлов в python: файлы с обычным текстом в формате las и txt читаются, например: ~Version information VERS.          ...
24 сентября 2018 г. 13:29
Евгений Легоцкой

Трансляция видео с помощью VLC по RTP

Добрый день! Я не сталкивался, но предположу, что нужно настроить Input Codec в VLC. В настройках есть секция Input Codec, возможно, что там установлено низкое разрешение. ...
21 сентября 2018 г. 8:25
Евгений Легоцкой

Прокси-модель, содержащая на 1 столбец больше, чем модель-источник.

Попробуйте ещё PySide 2 - это официально поддерживаемый пакет привязок Python к Qt, возможно, что там не будет таких проблем.
20 сентября 2018 г. 20:06
Евгений Легоцкой

Qt Installer Framework

Добрый день. Зачем собирать Qt Installer Framework-то из исходников? Я ещё понимаю Qt собирают из исходников статически (хотя тоже считаю по большей части бесполезной тратой времени),...
Присоединяйтесь к нам в социальных сетях