Кіріспе
Әлемдегі ең демократиялық ел ең тоталитарлық операциялық жүйені құрды. Сондықтан, егер сіз бағдарламалық жасақтаманы 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 пайдаланыңыз - бәрі қалаған архитектура үшін бірден жақсы құрастырылады.
Вот честно, на сколько же муторно под огрызок что то делать. Куча проблем)
А вод линь или под Андроид все просто и тривиально))