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