Pull to refresh
2
Андрей Филипенков@kambala

iOS и Qt разработчик

Send message

FYI мне перестало помогать неделю назад с глобальным обновлением ТСПУ, провайдер Алмател Москва. Перешел на запрет2.

опишу еще один трюк как ставить через официальный онлайн установщик без всяких впнов, но с помощью локального прокси.

В момент логина сервер кьюта проверяет ваш айпишник (думаю, это очевидно). Давайте посмотрим что он присылает в хорошем и плохом случаях:

// bad
{
	"status": "success",
	"code": "ip_blocked",
	"message": "Installation from this IP address is not allowed.",
	"properties": {
		"offline-installation-creation": {
			"allowed": false,
			"message": "Offline installation creation not supported"
		}
	}
}

// good
{
	"status": "success",
	"code": "success",
	"message": "Installation preconditions ok, installation can proceed!",
	"properties": {
		"offline-installation-creation": {
			"allowed": false,
			"message": "Offline installation creation not supported"
		}
	}
}

Как видно, отличаются лишь 2 поля — code и message, причем скорее всего установщик проверяет только code (не тестил это). И теперь все, что нам надо сделать — это подсунуть «хороший» ответ сетевому запросу. Сам запрос выглядит так:

https://iapi.qt.io/api/v2/installations-validate?<некие параметры>

Понадобится любой прокси-софт, который умеет расшифровывать https и проводить манипуляции над ответом, я протестил на Charles Proxy и macOS.

Например, можно воспользоваться функцией map local — взять ответ из локального файла. Просто создаем на компе файлик с «хорошим» ответом, маппим вышеуказанный запрос, в поле query (это там, где <некие параметры>) ничего не пишем, чтобы работало с любыми параметрами. И вуаля — онлайн установщик позволяет нам залогиниться и попасть на страницу выбора пакетов.

P.S. Есть вероятность, что скачать файлы не получится из-за того же геоблока, но это можно обойти, указав зеркало при запуске онлайн устновщика в параметре командной строки --mirror, список зеркал есть в статье.

Неудачный пример с loadViewIfNeeded

child.loadViewIfNeeded()
view.addSubview(child.view)

Если закомментировать первую строку, результат не изменится: если view == nil, то первое обращение к этому свойству приедет к загрузке view, т.е. будет вызов loadView и т.д.

Этот метод - скорее как альтернатива некрасивому

_ = child.view

"Пакетно" менять констрэинты (например, переключаться между 2 наборами) рекомендуется делать в updateConstraints, а setNeedsUpdateConstraints как раз и подсказывает системе, что надо произвести очередной layout pass (во время которого будет вызван updateConstraints) побыстрее, а не тогда, когда системе будет удобно.

К слову, на моем проекте как раз именно на дебаге build only active architecture отключено - всё дело в том, что у тестировщика может быть ноутбук на intel и больше ничего, ему нужна сборка для симулятор x86.

Как будто можно собрать по требованию, чем каждый раз впустую собирать вторую архитектуру. Но тут скорее вопрос удобства.

а как его в конане добавить, если рецепт не написан?

понятно, что никак, если не написать рецепт.

Но суть-то не в этом, а в удобстве использования рецепта. Конану все равно какая система сборки используется для библиотеки — рецепт будет выглядеть примерно одинаково (за исключением build метода, конечно), а у CPM получается, что если библиотека собирается не через смаке, то придется приложить гору усилий, чтоб его написать.

Уж не CPM виноват, что люди поддерживают проект десятки лет и не могут написать ему cmakelists.txt

какой-нить базель и мезон тоже надо на смаке переписать, получается?

это был вопрос к @iagolubev. В дебаге традиционно активирован build only active architecture, чтоб не собирать лишнего. Да и жирные бинари уже несколько лет (с появлением арм маков) как не имеет смысла собирать, ведь в них нельзя одновременно сложить слайс для девайса и для арм симулятора.

Рецепт для qt откуда-то взялся, видимо написали

не увидел где искать Qt для CPM. В конане (и vcpkg) он есть, конечно.

Насколько я знаю современные версии Qt поддерживают cmake, получается написали рецепт для CPM

от того, что они поддерживают смаке, не значит, что они через него собираются. 6-ка собирается через него, да, а вот 5-ка — только через свой configure.

Вот глянул в issues CPM, там как раз кто-то поинтересовался как собрать FFmpeg (который на autotools). Открываю, а там жесть через ExternalProject_Add: https://github.com/cpm-cmake/CPM.cmake/issues/480

У FFmpeg миллион параметров — видимо, придется каждому их изучать, чтоб смочь собрать через CPM с нужными настройками. А теперь сравним с рецептом Конана, где параметры вынесены в область параметров. С Qt 5 аналогично.

все копируют, но никто не знает как же правильно, так что рецепты всё сложнее и сложнее, в них какие-то странные магические действия без объяснения почему

не понимаю что же мешает спросить. Коммьюнити вполне живое, мэйнтейнеры отвечают на вопросы достаточно активно.

а зачем собирать жирный бинарь в дебаге?

см. доклад по ссылке в статье

а таймкод можно, где описаны конкретные проблемы?

и что же делать с библиотеками, которые собираются не через смаке? (например, FFmpeg или Qt 5) Как шарить собранные бинари с другими людьми и CI тоже не увидел в их ридми. Наверное, как очень простая система управления зависимостями — пойдет.

совершенно неочевидно как же он должен быть написан - на примере множества людей и компаний выявлено, что написание conan рецепта это один из самых сложных навыков в программировании. Люди спокойно разбираются в шаблонах, в линуксе, в ужасной документации, но написать conan рецепт не могут

надо всего лишь смотреть на уже написанные рецепты в CCI и в документацию. И еще можно вопросы задавать — как в слаке, так и прямо в репе конана.

Также развивается Common Package Specification, который как раз и должен абстрагировать информацию о «пакете» от конкретного менеджера пакетов. В смаке 4.0 уже реализовано, вот тут статья какая-то на эту тему.

Альтстор состоит из 2 компонентов: сервер (запускается на десктопе) и мобильный клиент. Именно сервер занимается переподписью и повторной заливкой на девайс. Соответственно надо хотя бы раз в 7 дней этот сервер запускать, чтоб приложение не "сгорало".

Но есть и другие решения, которые могут переподписывать прямо на девайсе: например, SideStore.

это при условии наличия enterprise акка разработчика

если у тебя нет платного акка разработчика, то да. AltStore облегчает этот процесс.

как только появится пакет, зависящий от такого перетащенного пакета, так проблемы сразу и появятся в виде дублирующихся символов.

в целом, не особо понятно какие там проблемы со сборкой. Разве что раздутие дискового пространства из-за клонирования репы (которое решается переходом на реестр).

...и они вылетят из графа зависимостей. Нехорошо получится, если что-то зависит от них (или начнет зависеть в будущем).

As some build flags can be exploited for unsupported or malicious behavior, the use of unsafe flags makes the products containing this target ineligible for use by other packages.

Очень непонятно написано. То есть если использовать unsafe flags, то автоматически downstream пакеты не будут собираться?

Не очень понял почему unsafeFlags нельзя в публичных пакетах, мало ли какие мне обязательные флажки для пакета надо задать. Можно ссылку?

По умолчанию SPM линкует все статически

Поды тоже так могут, там надо одну настройку в Podfile прописать:

use_frameworks! :linkage => :static

(также можно задавать linkage для конкретной зависимости)

спасибо за статью, необычно видеть грэдл в качестве выбора системы сборки под плюсы) Но для «стандартного» проекта выглядит как перебор имхо.

Хотел спросить как интегрировать Qt в грэдл проект, а уже и плагин есть, оказывается: https://github.com/axmetishe/gradle-qt-plugin

Предположим, для юнит-тестов необходимо загрузить некий бинарный артефакт из сети.
Я простого пути «в лоб» так и не нашел.

add_custom_target либо add_custom_command + cmake -P в качестве команды позволит использовать все встроенные средства смаке в своем кастомном скрипте, например тот же file(DOWNLOAD).

В CMake необходимо сначала писать conan.txt, там описывать свои зависимости и опции, а далее запускать генератор для CMake в Conan

есть официальный «плагин» для смаке, который сам вызовет conan install на этапе смаке конфигурации

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Works in
Date of birth
Registered
Activity

Specialization

Десктоп разработчик, Разработчик мобильных приложений
Старший
From 400,000 ₽
Разработка под iOS
Swift
Fastlane
Objective-С
C++
Qt
QML
Cmake