Данная инструкция предназначена для связывания (линковки) приложения с вашей версией Qt по условиям лицензии GNU LGPLv3.
Приложение собрано с помощью Qt версии 5.15.5. Исходники можно скачать, например, тут:
Библиотека (как и приложение) собрана с bitcode с помощью Xcode 13.4.1 со следующими ключами конфигурации:
-opensource -confirm-license -release -strip -static -xplatform macx-ios-clang -appstore-compliant -silent -sdk iphoneos -skip qt3d -skip qtactiveqt -skip qtandroidextras -skip qtcharts -skip qtconnectivity -skip qtdatavis3d -skip qtdoc -skip qtgamepad -skip qtlocation -skip qtlottie -skip qtmultimedia -skip qtnetworkauth -skip qtpurchasing -skip qtquick3d -skip qtquickcontrols -skip qtquicktimeline -skip qtremoteobjects -skip qtscript -skip qtscxml -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtspeech -skip qttools -skip qtvirtualkeyboard -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip qtwebglplugin -skip qtwebsockets -skip qtwebview -skip qtwinextras -skip qtx11extras -skip qtxmlpatterns -make libs -no-compile-examples -no-widgets -no-dbus -system-zlib -no-openssl -no-freetype -no-harfbuzz -no-gif -no-ico -system-sqlite -no-tiff -no-webp
Также использованы патчи для понижения минимальной версии iOS с 12 до 10 (включая активацию 32-битной архитектуры armv7) и рекомендованные патчи от KDE. Файлы патчей находятся тут.
Применение патчей выполняется с помощью следующих команд терминала (приведены команды для оболочки bash/zsh):
# задайте свой путь к склонированному/скачанному # репозиторию с патчами, это лишь пример qt5PatchesRepo=~/Downloads/Qt5-iOS-patches cd путь_к_папке_с_распакованными_исходниками_Qt cd qtbase for f in "$qt5PatchesRepo"/5.15.5/kde-patches/* ; do patch -p1 < "$f" done cd .. patch -p1 < "$qt5PatchesRepo"/5.15.5/ios10.patch patch -p1 < "$qt5PatchesRepo"/5.15.5/qmake.patch
После этого можно конфигурировать и собирать Qt.
Поскольку Qt собрана в виде статических библиотек, вам необходимо слинковать их с объектными файлами приложения для получения исполняемого файла. Скачайте пакет приложения, а также объектные файлы под нужную архитектуру (для определения архитектуры своего устройства можно воспользоваться страничкой):
Распакуйте архивы пакета приложения и объектных файлов в одну папку, затем в терминале перейдите в эту папку. Задайте путь к вашему Xcode через команду xcode-select
или переменную
среды DEVELOPER_DIR
и выполните bash/zsh скрипт:
# эти 3 переменные можно менять: qtDir=~/dev/Qt-libs/5.15.5/ios10-device-xc13.4.1 # путь к вашей Qt для iOS arch=arm64 # получаемая архитектура, должна совпадать со скачанными объектными файлами deploymentTarget=10.0 # меняйте только если понимаете что делаете sdkPath=$(xcrun --sdk iphoneos --show-sdk-path) $(xcrun -sdk iphoneos --find clang++) \ $arch/* \ -dead_strip \ -fembed-bitcode \ -fobjc-arc \ -fobjc-link-runtime \ -framework AssetsLibrary \ -framework AudioToolbox \ -framework CoreFoundation \ -framework CoreGraphics \ -framework CoreText \ -framework Foundation \ -framework GSS \ -framework ImageIO \ -framework Metal \ -framework MobileCoreServices \ -framework OpenGLES \ -framework QuartzCore \ -framework SafariServices \ -framework Security \ -framework StoreKit \ -framework SystemConfiguration \ -framework UIKit \ -framework UserNotifications \ -isysroot "$sdkPath" \ -L"$sdkPath/System/Library/Frameworks" \ -L"$qtDir/lib" \ -L"$qtDir/plugins"/{bearer,iconengines,imageformats,platforms,qmltooling} \ -L"$qtDir/qml"/{QtGraphicalEffects,QtGraphicalEffects/private,QtQuick.2} \ -L"$qtDir/qml/QtQml"{,/Models.2,/WorkerScript.2} \ -L"$qtDir/qml/QtQuick"/{Layouts,Templates.2,Window.2} \ -L"$qtDir/qml/QtQuick/Controls.2"{,/Fusion,/Imagine,/Material,/Universal} \ -lm \ -lmodelsplugin \ -lqios \ -lqjpeg \ -lqmlplugin \ -lqqc2materialstyleplugin \ -lqquicklayoutsplugin \ -lqsvg \ -lQt5ClipboardSupport \ -lQt5Core \ -lQt5FontDatabaseSupport \ -lQt5GraphicsSupport \ -lQt5Gui \ -lQt5Network \ -lQt5Qml \ -lQt5QmlModels \ -lQt5QmlWorkerScript \ -lQt5Quick \ -lQt5QuickControls2 \ -lQt5QuickTemplates2 \ -lQt5Svg \ -lqtgraphicaleffectsplugin \ -lqtgraphicaleffectsprivate \ -lqtlibjpeg \ -lqtlibpng \ -lqtpcre2 \ -lqtquick2plugin \ -lqtquickcontrols2fusionstyleplugin \ -lqtquickcontrols2imaginestyleplugin \ -lqtquickcontrols2plugin \ -lqtquickcontrols2universalstyleplugin \ -lqtquicktemplates2plugin \ -lwindowplugin \ -lworkerscriptplugin \ -lz \ -o rachinskii.app/rachinskii \ -stdlib\=libc++ \ -target $arch-apple-ios$deploymentTarget \ -Wl,-e,_qt_main_wrapper \ -Wl,-rpath,@executable_path/Frameworks \ -Xlinker -bitcode_hide_symbols \ -Xlinker -bitcode_symbol_map -Xlinker . \ -Xlinker -bitcode_verify \ -Xlinker -no_adhoc_codesign
Исполняемый файл будет создан внутри пакета приложения.
Для установки приложения его необходимо подписать ключом разработчика (можно и бесплатным). Для этого воспользуйтесь, например, одним из следующих приложений:
Вам необходимо будет задать Bundle Identifier отличный от ru.etudes.iSchet. Обратите внимание, что вы не сможете установить приложение поверх AppStore версии.