alex_lip
alex_lipҚаң. 14, 2018, 2:15 Т.Қ.

iOS үшін Qt жүйесінде әзірлеу

Кіріспе

Әлемдегі ең демократиялық ел ең тоталитарлық операциялық жүйені құрды. Сондықтан, егер сіз бағдарламалық жасақтаманы iPad немесе iPhone құрылғысында сынағыңыз келсе, сайтта тіркелуіңіз керек. https://developer.apple.com/ әзірлеуші ретінде. Бірінші кезеңде ақша төлеудің қажеті жоқ. Good Uncle Jobs сізге 7 (жеті) күн мерзімге тестілеу үшін өз құрылғыңызды пайдалану туралы сертификат береді. Сертификаттың соңында бағдарламалық құрал іске қосылмайды және оны компьютерден қайта жүктеп алу қажет болады. Бағдарламалық жасақтаманы басқа адамның құрылғысына орнатқыңыз келсе, оның Apple ID идентификаторы сіздікі сияқты Xcode жүйесінде тіркелуі керек.


Мәселелер

Qt үйрену үшін мен тест тапсырмасы үшін жұмыс процесі үшін мобильді жұмыс орнын әзірлеуді шештім. Өйткені құжаттар word , pdf , jpg , т.б. Мен оларды серверден жүктеп алғаннан кейін оларды бір нәрсемен ашуым керек. Qt керемет құрылымы бар

QDesktopServices :: openUrl ( QUrl :: fromLocalFile ( QStandardPaths :: writableLocation ( QStandardPaths :: GenericDataLocation ) + "/temp_esd/file." + file_ext ));
// File _ ext я вытаскиваю в соответствии с MIME типом
if ( head == "Content-Type" ) {
    if ( content_from_url == "image/jpeg" )
        file_ext = "jpg";
    else if ( content_from_url == "application/pdf" )
        file_ext = "pdf";
    else if ( content_from_url == "application/vnd.openxmlformats-officedocument.wordprocessingml.document" )
        file_ext = "docx";
    else if ( content_from_url == "application/msword" )
        file_ext = "doc";
    else if ( content_from_url == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" )
        file_ext = "xlsx";
    else if ( content_from_url == "application/vnd.ms-excel" )
        file_ext = "xls";
    else if ( content_from_url == "application/vnd.oasis.opendocument.text" )
        file_ext = "odt";
    else if ( content_from_url == "application/vnd.oasis.opendocument.spreadsheet" )
        file_ext = "ods";
    else if ( content_from_url == "application/octet-stream" )
        file_ext = "7z";
    else if ( content_from_url == "video/x-msvideo" )
        file_ext = "avi";
    else if ( content_from_url == "image/bmp" )
        file_ext = "bmp";
    else if ( content_from_url == "application/cdr" )
        file_ext = "cdr";
    else if ( content_from_url == "image/gif" )
        file_ext = "gif";
    else if ( content_from_url == "video/quicktime" )
        file_ext = "mov";
    else if ( content_from_url == "audio/mpeg" )
        file_ext = "mp3";
    else if ( content_from_url == "image/png" )
        file_ext = "png";
    else if ( content_from_url == "application/vnd.ms-powerpoint" )
        file_ext = "ppt";
    else if ( content_from_url == "application/vnd.openxmlformats-officedocument.presentationml.presentation" )
        file_ext = "pptx";
    else if ( content_from_url == "application/x-rar-compressed" )
        file_ext = "rar" ;
    else if ( content_from_url == "application/rtf" )
        file_ext = "rtf";
    else if ( content_from_url == "image/tiff" )
        file_ext = "tif";
    else if ( content_from_url == "text/plain" )
        file_ext = "txt" ;
    else if ( content_from_url == "audio/x-ms-wma" )
        file_ext = "wma";
    else if ( content_from_url == "application/zip" )
        file_ext = "zip";
}

Бірақ IOS жүйесінде - жақында қабылданған қауіпсіздік стандарттарына сәйкес, бір қолданбада жергілікті URL мекенжайын екіншісін іске қосу арқылы ашуға тыйым салынады. Сондықтан, IOS жағдайында бұл құрылымды пайдалану қате тудырды

бұл плагинге қолдау көрсетілмейді

Алдымен мен Info.plist-ті пайдалану бағытында жүрдім - әсіресе IOS кезінде ол әлі де қажет болғандықтан. бөлімінде тіркелген

<key>LSApplicationQueriesSchemes</key>
    <array>
        <string>ms-word</string> 
        <string>ms-powerpoint</string> 
        <string>ms-excel</string>
    </array>

Бірақ бұл файлдар жергілікті түрде ЕМЕС, бірақ Интернет сілтемесі арқылы ашылғанда ғана жұмыс істейді. Мәселені одан әрі зерттегеннен кейін мен мақаланы таптым https://code.tutsplus.com/tutorials/ios-sdk-previewing-and-opening-documents--mobile-15130 ол iOS қолданбасының құм жәшігіндегі файлдарды ашу үшін UIDocumentInteractionController пайдалану жолын сипаттайды. Сондай-ақ Ekkehard Gentz қалай жасау керектігін егжей-тегжейлі сипаттайтын керемет блог үшін үлкен рахмет. Qt-де жоғарыдағы функцияларды пайдаланыңыз.

Шешім

Сонымен, бізде дереккөздерді құрастыруға арналған MAC MINI және тестілеуге арналған IPAD бар. MAC MINI жүйесіне Qt орнатыңыз. Орнату кезінде сізге XCODE жүктеп алу ұсынылады - біз келісеміз. Барлығы тамаша реттелген. Әрі қарай, Xcode - Теңшелімдер - Тіркелгілер ішінде Apple тіркелгіңізді қосыңыз және сертификатты сұраңыз (Сертификаттарды басқару арқылы). Әрине, алдымен Apple веб-сайтында әзірлеуші ретінде тіркелу керек. Әрі қарай, IPAD құрылғысын қосыңыз және «Параметрлер» - Әзірлеуші - UI АВТОМАШЫЛЫҒЫ бөлімінде - UI автоматтандыруын қосуды қосыңыз. Осылайша, біз iPad-ты отладка қосылған режимге қойдық.

Xcode - Терезе - Құрылғылар мен симуляторларда қосылған құрылғыны тексеруге болады. Әрине, қосылу процесінде сізден компьютерді құрылғыға және құрылғыны компьютерге сену туралы бірнеше рет сұралады - ИӘ деп айтыңыз.

Жоба файлындағы QT ішінде келесі бөлімді қосыңыз

ios {
OBJECTIVE_SOURCES += ios/iosshareutils.mm \
ios/docviewcontroller.mm

QMAKE_INFO_PLIST = ios/Info.plist

LIBS += - framework UIKit
}

Бұл бөлімде біз Info.plist орнын көрсетеміз - бұл қолмен өңдеуге болатын мәтінге негізделген конфигурация файлы.

OBJECTIVE_SOURCES — біздің OBJECTIVE-C файлдарымыз

LIBS директивасы ескірген шығар. Бірақ мен оны тазаламадым.

Дереккөздердің өзінде директиваны пайдалану өте ыңғайлы

#if defined( Q_OS_IOS )

QString temp_url= QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + "/temp_esd/file." +file_ext;
qDebug() << "path_file " << temp_url;
IosShareUtils ios;
ios.viewFile(temp_url, "View File" , "application/pdf" , 21 );

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

Блогта бастапқы мәтіндерді көре аласыз https://blog.qt.io/blog/2017/12/01/sharing-files-android-ios-qt-app/

Жалпы, бастапқы мәтіндер дайын болғаннан кейін біз орналастыруға көшеміз. Qt Creator қолданбасында iOS үшін Qt 5.10 нұсқасында шығарылған кезде телефон белгішесінің төменгі оң жағында алма бар жасыл нүкте жанып тұрғанын ескеріңіз. Тінтуірді оның үстіне апарсаңыз, құрылғы туралы ақпаратты және бұл құрылғы әзірлеуші режимінде жұмыс істеп тұрғанын көресіз. Осыдан кейін біз дереккөздерді құрастырамыз және оларды телефонға жүктеп алуға тырысамыз. Бұл бірінші рет жұмыс істемейді. Біз Release қалтасына өтіп, қолданбамыздың Xcode жобасын ашамыз. Схемаңыздың аты көрсетілген жоғарғы жағында компьютерге қосылған құрылғының белсенді схемасын таңдаңыз. Содан кейін «Құру, содан кейін ағымдағы схеманы іске қосу» белгішесін басыңыз. Бірақ бұл бәрі емес. Қолданбаның белгішесі құрылғыда пайда болады, бірақ ол іске қосылмайды. Немесе ол басталады, бірақ тез жабылады. Ipad ашыңыз - параметрлерге өтіңіз - негізгі - құрылғыны басқару - әзірлеуші бағдарламасы - алма идентификаторын таңдаңыз - содан кейін біз бұл әзірлеушіге сенетінімізді айтамыз. Барлық осы әрекеттерден кейін қолданбаны тікелей Qt Creator қолданбасынан қауіпсіз орналастыруға болады.

Менің ақымақ сұрақтарыма шыдамдылықпен жауап берген интернеттегі барлық адамдарға рахмет. Ал менен ақшаны сілкіп алмақ болғандарды Құдай кешіреді. Меніңше, әрбір маманның альтруизмі болуы керек сияқты.

iOS жүйесінің ескі нұсқалары үшін жобаны құрастыру туралы шағын қосымша (8-9)

Мен өз жобамды Qt 5.10 жүйесінде iOS 10 және arm64 архитектурасы (Xcode9 көмегімен) бойынша құрастырдым - бәрі жақсы. Бірақ iOS 9 және armv7 архитектурасы бар ескі iPad үшін бірдей жобаны қолдануға тырысқанда, мен шеше алмайтын көптеген мәселелерге тап болдым. Мен Xcode ішінде архитектураны орнатуға тырыстым - сияқты қателер пайда болды - LibQt5Core_debu.a файлын елемеу, LibQt5Core_debu.a файлында armv7 талап етілетін архитектурасы жоқ, директивалар қолданылды.

 QMAKE_IOS_DEVICE_ARCHS = armv7
 CONFIG += armv7
 QMAKE_IOS_DEPLOYMENT_TARGET = 9.0

Мен Xcode 7-ге қайта оралдым - бәрі нәтиже бермеді. Ақырында, бірнеше күндік сәтсіз әрекеттерден кейін мен мұны оқыдым

https://bugreports.qt.io/browse/QTBUG-65544

Сипаттама Qt 5.10 нұсқасымен құрастырылған кез келген қолданбаға кем дегенде iOS 10 қажет және ескі құрылғыларға (iPad 1, iPhone 5, т.б.) қолданылмайды.

Тіпті AppStore дүкеніне жүктеп салынған қолданбалар iOS < 10 жүйесі бар құрылғыларға орнатылмайды.

iOS 9 жүйесі бар құрылғылар тым көп, оны қолдауды тоқтату үшін.

Qt 5.9.3 нұсқасымен жинақталған бірдей қолданбалар барлық құрылғыларда жақсы жұмыс істейді.

Eskil Abrahamsen Blomfeldt пікір қосты - 03 қаңтар '18 10:43 Qt 5.9 ұзақ мерзімді қолдау көрсетілетін шығарылым болып табылады және оны жалғастыруда. қолданбаңыз ескі құрылғыларға қолдау көрсетуді қажет етсе, iOS 9 жүйесіне қолдау көрсетіңіз.

Qt 5.10 үшін ең төменгі мақсатты нұсқасы сіз айтқандай iOS 10 болып табылады. Қолдау көрсетілетін платформалардың толық тізімін мына жерден көре аласыз: http://doc.qt.io/qt-5/supported-platforms.html

Apple мәліметтері бойынша, белсенді құрылғылардың 92% қазір iOS 10 немесе iOS 11 жүйесінде.

Осылайша, iOS жүйесінің ескі нұсқаларына қолдау көрсеткіңіз келсе - Qt 5.9.3 пайдаланыңыз - бәрі қалаған архитектура үшін бірден жақсы құрастырылады.

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

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

BlinCT
  • Қаң. 14, 2018, 2:28 Т.Қ.

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

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз
AD

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:50ұпай,
  • Бағалау ұпайлары-4
m
  • molni99
  • Қаз. 26, 2024, 1:37 Т.Ж.

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:80ұпай,
  • Бағалау ұпайлары4
m
  • molni99
  • Қаз. 26, 2024, 1:29 Т.Ж.

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:20ұпай,
  • Бағалау ұпайлары-10
Соңғы пікірлер
ИМ
Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas5Шілде 5, 2024, 11:02 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Енді форумда талқылаңыз
m
moogoҚар. 22, 2024, 7:17 Т.Ж.
Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
Evgenii Legotckoi
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProjectМаусым 4, 2022, 3:49 Т.Ж.
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

Бізді әлеуметтік желілерде бақылаңыз