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 Т.Қ.

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

Пікірлер

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

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

  • Нәтиже:66ұпай,
  • Бағалау ұпайлары-1
t

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

  • Нәтиже:33ұпай,
  • Бағалау ұпайлары-10
t

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

  • Нәтиже:52ұпай,
  • Бағалау ұпайлары-4
Соңғы пікірлер
G
GoattRockҚыр. 3, 2024, 1:50 Т.Қ.
Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
d
dblas5Шілде 5, 2024, 11:02 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssrАқп. 8, 2024, 6:43 Т.Қ.
Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Енді форумда талқылаңыз
Evgenii Legotckoi
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
F
FynjyШілде 22, 2024, 4:15 Т.Ж.
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
BlinCT
BlinCTМаусым 25, 2024, 1 Т.Ж.
Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
BlinCT
BlinCTМамыр 5, 2024, 5:46 Т.Ж.
Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
Evgenii Legotckoi
Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

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