Обновить
2
0
Андрей Филипенков @kambala

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

Отправить сообщение

Однако в этой простоте кроется и большой минус: если кто-то решит настроить CI для другого проекта, то он с легкостью может какой-нибудь новой зависимостью положить весь ваш CI/CD. Или же во время настройки у вас ничего не будет работать из-за уже установленных зависимостей.

Также у вас не получится просто взять и запустить на одном раннере несколько задач без подготовки и написания пары строчек кода.

У нас уже лет 5 через дженкинс собирается по 1-4 проекта параллельно на одной машине без сучка и задоринки. Какая у вас была проблема?

Мы не можем напрямую из кода получить доступ к этим настройкам

Вообще-то можем, если сделать это в C/C++/ObjC коде, т.к. сишные макросы позволяют задавать им произвольные значения, в т.ч. и строковые.

Для этого в настройку GCC_PREPROCESSOR_DEFINITIONS записывается SERVER_URL=\"$(SERVER_URL)\" (имя макроса с левой стороны можно выбрать любое), что делает доступным макрос SERVER_URL в C коде, который превратится в строковый литерал.

Далее создаем пару .h/.m файлов, в которые поместим функцию (или класс, как душе угодно), возвращающую наш макрос в виде подходящего ObjC объекта:

NSURL *serverURL(void) {
  return [NSURL urlWithString:@SERVER_URL];
}

В принципе, @ можно поместить и прямо в определение макроса. Также можно добавить_NonNullдля возвращаемого типа либо просто обернуть объявления в NS_ASSUME_NONNULL_BEGIN/NS_ASSUME_NONNULL_END в заголовочном файле.

Осталось поместить созданный заголовочный файл в bridging header — и Свифт код сможет увидеть функцию serverURL().

  1. если надо чисто построить проект, то в принципе можно брать любой генератор. Visual Studio генератор пригодится, если хочется использовать Visual Studio IDE (например, для правки или отладки).

  2. Возможно, надо использовать CMAKE_EXE_LINKER_FLAGS.

есть полностью «наша» статья, которая, как мне кажется, на порядок лучше: https://book.etudes.ru/articles/a4/

Могу рассказать об iOS опыте: как раз закончил портировать VCMI под iOS (правда, пулл реквест ещё не приняли). В процессе как раз и более-менее разобрался как надо пользоваться CMake, особенно для iOS проектов.

Для сборки зависимостей пока что создан отдельный скрипт, который выполняет условный make install каждой библиотеки в определенную папку (у меня отдельные папки для симулятора и устройства), что гарантирует стандартную структуру папок (include, lib и т.д.). После этого эта папка просто подается в переменной CMAKE_PREFIX_PATH при конфигурировании проекта — и все зависимости находятся «из коробки» (при условии, что FindXXX написаны адекватно). В принципе, никто не мешает класть зависимости и в разные папки, тогда надо каждую из них подавать в CMAKE_PREFIX_PATH как список (через точку с запятой).

Единственная проблема, с которой я столкнулся, была невозможность отыскать Boost — пришлось принудительно добавить

list(APPEND CMAKE_FIND_ROOT_PATH "${CMAKE_PREFIX_PATH}")

чтоб избавить пользователя указывать CMAKE_FIND_ROOT_PATH на ту же папку вручную. Толком я так и не понял почему Boost хочет именно ее.

Репозиторий со скриптом: https://github.com/kambala-decapitator/vcmi-ios-depends. В дальнейшем хочу попробовать перевести всё это на conan / vcpkg, сейчас как раз щупаю оба для macOS сборки на CI.

Кстати, достаточно хороший iOS toolchain уже существует, я использую его для сборки некоторых зависимостей. Сначала я его использовал и для приложения, но т.к. приложение собирается лишь Xcode генератором, оказалось, что достаточно лишь несколько нужных для кросс-компиляции переменных указать, что описано в документации.

в документации достаточно хорошо расписаны основные способы интеграции: https://doc.qt.io/qt-6/qtqml-index.html#integrating-qml-with-c-applications

на этой странице даже есть удобная диаграмма выбора оптимального способа: https://doc.qt.io/qt-6/qtqml-cppintegration-overview.html

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

я в этой ситуации пошел в НМУ, первый семестр пока идет плюс-минус нормально
2 года назад был у офтальмолога в Киеве: он мне порекомендовал перестать сидеть за компьютером в очках (до этого почти 10 лет так делал, но вроде никакого дискомфорта не испытывал, и зрение не падало) и увеличить текст вместо этого. Сейчас следую этой рекомендации — дискомфорта тоже нет, и зрение не падает, а ТВ как смотрел в очках, так и продолжаю (в кинотеатре очки никогда не использовал).

Значит, это все-таки была верная рекомендация? Или особой разницы нет?

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Работает в
Дата рождения
Зарегистрирован
Активность

Специализация

Software Developer, Mobile Application Developer
Senior
От 400 000 ₽
iOS development
SWIFT
Fastlane
Objective-C
C++
Qt
QML
Cmake