Process automatisation of Xcode new target creation

We live in the era of the Internet and technology. Now it is important for a person to be able to do their routine, uninteresting things quickly, and to be able to focus on more professional things. Everyone wants to minimize the time spent searching for information and have all services in one plac...

Повний опис

Збережено в:
Бібліографічні деталі
Дата:2023
Автори: Zhurba, M.A., Stetsenko, I.V.
Формат: Стаття
Мова:Ukrainian
Опубліковано: Інститут програмних систем НАН України 2023
Теми:
Онлайн доступ:https://pp.isofts.kiev.ua/index.php/ojs1/article/view/553
Теги: Додати тег
Немає тегів, Будьте першим, хто поставить тег для цього запису!
Назва журналу:Problems in programming
Завантажити файл: Pdf

Репозитарії

Problems in programming
id pp_isofts_kiev_ua-article-553
record_format ojs
resource_txt_mv ppisoftskievua/c4/c49d805ab021acf804d971cc12dd07c4.pdf
spelling pp_isofts_kiev_ua-article-5532023-04-27T20:24:16Z Process automatisation of Xcode new target creation Автоматизація процесу створення нових цілей у XCODE проєкті Zhurba, M.A. Stetsenko, I.V. Xcode target; Xcode project; mobile application; script; file generation; automatisation UDC 004.4'24 Xcode ціль; Xcode проєкт; мобільний застосунок; скрипт; генерація файлу; автоматизація УДК 004.4`24 We live in the era of the Internet and technology. Now it is important for a person to be able to do their routine, uninteresting things quickly, and to be able to focus on more professional things. Everyone wants to minimize the time spent searching for information and have all services in one place.Due to these desires, significant progress is being made in the development of mobile applications. A number of factors also contribute to this. First, the development of the hardware of pocket-sized devices reaches a level sufficient for complex computing tasks. Secondly, the speed of Internet communication has increased. Third, almost everyone in the world now has a smartphone, so it is much more profitable for businesses to develop mobile applications to reach a wider audience. The development of applications for mobile devices is becoming more and more popular, but at the same time more expensive. In some cases, a business needs to have a number of similar applications for one reason or another. There are several approaches to code reuse in the context of iOS development. One is to use a common codebase and separate Xcode targets for each product. The process of creating a new target requires a number of routine operations, which require the programmer’s time, and writing code is potentially error-prone. This research proposes to improve this approach by using scripts to generate a project file based on given configurations. A console script for generating a project file and a project to illustrate the approach have been developed.Prombles in programming 2023; 1: 11-18  На сьогоднішній день розробка застосунків під мобільні пристрої стає все більш популярною, але разом з тим більш вартісною. У деяких бізнес-моделях використовуються однотипні застосунки, створені на одній кодовій базі, із впровадженням специфічних відмінностей у дизайні або поведінці для кінцевого продукту. Один із підходів для розробки таких застосунків під iOS полягає у використанні окремих Xcode цілей для кожного продукту. Процес створення нової цілі вимагає проведення ряду рутинних операцій, що потребує витрат часу програміста, а написання коду потенційно схильне до помилок. У даній статті пропонується вдосконалити цей підхід шляхом використання скриптів для генерації проєктного файлу на основі заданих конфігурацій. Розроблено консольний скрипт для генерації проєктного файлу і проєкт для ілюстрації підходу.  Prombles in programming 2023; 1: 11-18 Інститут програмних систем НАН України 2023-04-27 Article Article application/pdf https://pp.isofts.kiev.ua/index.php/ojs1/article/view/553 10.15407/pp2023.01.011 PROBLEMS IN PROGRAMMING; No 1 (2023); 11-18 ПРОБЛЕМЫ ПРОГРАММИРОВАНИЯ; No 1 (2023); 11-18 ПРОБЛЕМИ ПРОГРАМУВАННЯ; No 1 (2023); 11-18 1727-4907 10.15407/pp2023.01 uk https://pp.isofts.kiev.ua/index.php/ojs1/article/view/553/606 Copyright (c) 2023 PROBLEMS IN PROGRAMMING
institution Problems in programming
baseUrl_str https://pp.isofts.kiev.ua/index.php/ojs1/oai
datestamp_date 2023-04-27T20:24:16Z
collection OJS
language Ukrainian
topic Xcode target
Xcode project
mobile application
script
file generation
automatisation
UDC 004.4'24
spellingShingle Xcode target
Xcode project
mobile application
script
file generation
automatisation
UDC 004.4'24
Zhurba, M.A.
Stetsenko, I.V.
Process automatisation of Xcode new target creation
topic_facet Xcode target
Xcode project
mobile application
script
file generation
automatisation
UDC 004.4'24
Xcode ціль
Xcode проєкт
мобільний застосунок
скрипт
генерація файлу
автоматизація
УДК 004.4`24
format Article
author Zhurba, M.A.
Stetsenko, I.V.
author_facet Zhurba, M.A.
Stetsenko, I.V.
author_sort Zhurba, M.A.
title Process automatisation of Xcode new target creation
title_short Process automatisation of Xcode new target creation
title_full Process automatisation of Xcode new target creation
title_fullStr Process automatisation of Xcode new target creation
title_full_unstemmed Process automatisation of Xcode new target creation
title_sort process automatisation of xcode new target creation
title_alt Автоматизація процесу створення нових цілей у XCODE проєкті
description We live in the era of the Internet and technology. Now it is important for a person to be able to do their routine, uninteresting things quickly, and to be able to focus on more professional things. Everyone wants to minimize the time spent searching for information and have all services in one place.Due to these desires, significant progress is being made in the development of mobile applications. A number of factors also contribute to this. First, the development of the hardware of pocket-sized devices reaches a level sufficient for complex computing tasks. Secondly, the speed of Internet communication has increased. Third, almost everyone in the world now has a smartphone, so it is much more profitable for businesses to develop mobile applications to reach a wider audience. The development of applications for mobile devices is becoming more and more popular, but at the same time more expensive. In some cases, a business needs to have a number of similar applications for one reason or another. There are several approaches to code reuse in the context of iOS development. One is to use a common codebase and separate Xcode targets for each product. The process of creating a new target requires a number of routine operations, which require the programmer’s time, and writing code is potentially error-prone. This research proposes to improve this approach by using scripts to generate a project file based on given configurations. A console script for generating a project file and a project to illustrate the approach have been developed.Prombles in programming 2023; 1: 11-18 
publisher Інститут програмних систем НАН України
publishDate 2023
url https://pp.isofts.kiev.ua/index.php/ojs1/article/view/553
work_keys_str_mv AT zhurbama processautomatisationofxcodenewtargetcreation
AT stetsenkoiv processautomatisationofxcodenewtargetcreation
AT zhurbama avtomatizacíâprocesustvorennânovihcílejuxcodeproêktí
AT stetsenkoiv avtomatizacíâprocesustvorennânovihcílejuxcodeproêktí
first_indexed 2024-09-12T19:29:56Z
last_indexed 2024-09-12T19:29:56Z
_version_ 1815407609671319552
fulltext 11 Інструментальні засоби та середовища програмування УДК 004.4`24 http://doi.org/10.15407/pp2023.01.011 М. А. Журба, І.В. Стеценко АВТОМАТИЗАЦІЯ ПРОЦЕСУ СТВОРЕННЯ НОВИХ ЦІЛЕЙ У XCODE ПРОЄКТІ На сьогоднішній день розробка застосунків під мобільні пристрої стає все більш популярною, але разом з тим більш вартісною. У деяких бізнес-моделях використовуються однотипні засто- сунки, створені на одній кодовій базі, із впровадженням специфічних відмінностей у дизайні або поведінці для кінцевого продукту. Один із підходів для розробки таких застосунків під iOS полягає у використанні окремих Xcode цілей для кожного продукту. Процес створення нової цілі вимагає проведення ряду рутинних операцій, що потребує витрат часу програміста, а написан- ня коду потенційно схильне до помилок. У даній статті пропонується вдосконалити цей підхід шляхом використання скриптів для генерації проєктного файлу на основі заданих конфігурацій. Розроблено консольний скрипт для генерації проєктного файлу і проєкт для ілюстрації підходу. Ключові слова: Xcode ціль, Xcode проєкт, мобільний застосунок, скрипт, генерація файлу, авто- матизація © М. А. Журба, І.В. Стеценко, 2023 ISSN 1727-4907. Проблеми програмування. 2023. №1 Вступ Кожен бізнес прагне ефективно ви- трачати кошти на всіх етапах життєвого циклу продукту або сервісу. У випадку створення мобільних застосунків у бізнесі досить часто виникає потреба у схожих між собою застосунках із тих чи інших причин. Такими причинами можуть бути, зокрема, необхідність в окремих застосунках для різних регіонів, необхідність в окремих за- стосунках для дочірніх брендів, прагнення зайняти домінуючу позицію у певній ніші шляхом створення різних застосунків під окремими брендами, використання різних стратегій просування для різних застосун- ків. У будь-якому випадку створення нових застосунків з нуля та паралельна підтримка усієї множини застосунків не є ефективним рішенням. Не тільки тому, що вона вимага- тиме великих витрат фінансів та часу, а ще й тому, що зростає ризик виникнення поми- лок. Може трапитись ситуація, за якої но- вий функціонал був реалізований тільки в одному із застосунків усієї множини через виникнення людських помилок. Саме тому для таких розробок вико- ристовують підходи із перевикористанням коду і побудовою кінцевих продуктів на одній кодовій базі. У контексті iOS розробки таких підходів декілька: винесення спільного коду у бібліотеки і їх використання в окремих Xcode проєктах, використання окремих цілей для кожного з кінцевих продуктів у рамках одно- го Xcode проєкту [1], використання окремих схем для кожного з кінцевих продуктів у рам- ках одного Xcode проєкту [2]. У порівнянні з іншими, підхід із ви- користанням окремих цілей є найбільш гнучким і таким, що мінімізує дублювання коду. Однак, є суттєвий недолік. Підхід ви- магає додавання вручну нової цілі та її кон- фігурації, водночас для кожного файлу про- єкту необхідно вказувати цілі, до яких він належить. Метою даного наукового досліджен- ня є автоматизація рутинних дій зі створен- ня однотипних iOS застосунків за рахунок використання скрипта для генерування про- єктного файлу на основі заданої конфігура- ції для цілей. Скрипт дозволить додавати нові цілі до проєкту за декілька секунд, а також мінімізувати шанс виникнення люд- ських помилок. Розроблений невеликий за- стосунок використовується для ілюстрації оновленого підходу. 1. Огляд класичного підходу із викорис- танням декількох цілей Для розробки під iOS використо- вується середовище розробки Xcode. Піс- ля створення проєкту Xcode, автоматично створюються базові вихідні файли, ре- сурсні каталоги, а також ціль для продукту 12 Інструментальні засоби та середовища програмування (рис.1). Загалом ціль визначає окремий про- дукт, який буде створюватись в результаті виконання проєкту. Для цілі визначається список вихідних файлів для компіляції та список ресурсів, в яких може міститись ін- формація про використовувані зображення, кольори, шрифти тощо. Ці файли можуть належати одразу декільком цілям, а можуть просто знаходитись у проєкті і не належати жодній. Також у кожної цілі є ідентифікатор [3], за допомогою якого в подальшому App Store та iPhone відрізняє застосунки між со- бою. Схема визначає колекцію цілей для по- будови та конфігурацію, яку слід викорис- товувати під час побудови. Таким чином, суть підходу полягає у створенні декількох цілей і встановлен- ня різних ідентифікаторів для кожної з них. Для того, щоб створити нову ціль, необхід- но виконати такі дії: – перейти в Xcode проєкті до розді- лу з його налаштуваннями; – у розділі цілей вибрати одну з іс- нуючих цілей; – обрати «дублювати», при цьому автоматично створиться нова ціль та нова схема для неї, новий файл .plist з базо- вими конфігураціями цілі. Всі вихідні та ресурсні файли, які належали до початкової цілі, тепер також належатимуть і до ново- створеної; – перейменувати всі новостворені цілі, схеми та файли відповідно до потреб проєкту (за замочуванням назви створю- ються шляхом додаванням Copy до первіс- них назв); – у розділі цілей обрати нову ціль, перейти до вкладки General та змінити поле Display Name; – у розділі Build Settings підрозділі Packaging оновити поле Info.plist та Product Bundle Identifier. Навіть на цих етапах можуть виник- нути деякі складнощі. Наприклад, де пови- нен бути файл Info.plist? Два файли з одна- ковим ім’ям не можуть перебувати в одній директорії, але розробнику зручно і звич- но, якщо файл називається саме Info.plist. Отож, необхідно також створити окремі директорії для зберігання файлів, специфіч- них для різних цілей. Але після зміни роз- ташування файлу Info.plist доведеться зно- ву оновити дані про його місцезнаходження у налаштуваннях цілі. Кожен із цих пунк- тів алгоритму розробник може пропустити або зробити його неправильно. До того ж, описаний підхід вимагає знань і розуміння того, як влаштоване середовище розробки Xcode, тобто доступний тільки досвідчено- му розробнику. Навіть після налаштування цілей, їх потрібно підтримувати у належному стані, Рис. 1. Вікно новоствореного проєкту Xcode: 1 – Список цілей, 2 – Вихідні файли, 3 – Ресурс- ні файли, 4 – Список схем, 5 – Ідентифікатор цілі. 13 Інструментальні засоби та середовища програмування а саме, для кожного новоствореного фай- лу обирати, до яких цілей він належить. Оскільки вибір цілей вказується не в коді файлу, а через контроль прапорців інтер- фейсу Xcode, то таку дію можна легко про- пустити. Якщо прапорець не вибрати, то це буде означати, що файла не існує для цілі. Тобто, якщо певний файл створений у про- єкті, це не означає, що ціль буде його бачи- ти. Панель вибору прапорців показано на рисунку 2. Отже, класичний підхід із викорис- танням декількох цілей вимагає від розроб- ника виконання ряду рутинних дій для ство- рення нової цілі, які потенційно можуть бути не виконані або виконані неправильно. Список вихідних файлів та ресурсних ката- логів створюваного застосунку визначаєть- ся вказуванням відповідних прапорців ці- лей, що також є незручним. Тому необхідно знайти шляхи вирішення зазначених про- блемних моментів. 2. Генерація проєктного файлу за допо- могою утиліти для кодогенерації Перша проблема, яка буде вирішу- ватися, – це встановлення посилань на ви- хідні файли та ресурсні каталоги для кожної нової цілі. Як вже було зазначено, у проєк- ті Xcode відповідність файлів та каталогів цілі встановлюється шляхом вказування відповідного прапорця. Але що саме відбу- вається, коли розробник вмикає або вими- кає прапорець цілі для певного файлу? При створенні Xcode проєкту створюється файл із розширенням .xcodeproj. Насправді, це директорія, яка зберігає дані про проєкт. У ній знаходиться файл .pbxproj (Project Builder Xcode Project). Саме в цьому файлі містяться всі дані про конфігурації проєк- ту, його цілі, схеми. Коли розробник коре- гує прапорець, Xcode оновлює дані у файлі .pbxproj. Для розробника це незручно, адже файл має складний для сприйняття синтаксис (рис.3). Рис. 2. Поле із налаштуванням приналежності файлу до цілі. Рис. 3. Фрагмент файлу .pbxproj 14 Інструментальні засоби та середовища програмування Саме тому ідея полягає у викорис- танні утиліти XcodeGen [4], яка генерує ди- ректорію .xcodeproj на основі заданого кон- фігураційного файлу project.yaml. Цей підхід має наступні переваги: – .yaml файл більш читабельний у порівнянні із класичним .pbxproj; – для кожної цілі можна вказувати шляхи до директорій із вихідними файлами та ресурсними каталогами; – зменшення випадків у роботі із системою контролю версій із конфліктами злиття у великих командах; – створення нової цілі вимагатиме лише копіювання частини коду у файлі. Алгоритм дій для того, щоб позбути- ся .xcodeproj і перейти до використання XсodeGen, може бути наступний: – у репозиторії проєкту створити окремі директорії для кожної з цілей з їхні- ми назвами, а також каталог COMMON для спільних файлів; – за допомогою утиліти Build- SettingExtractor [5] експортувати налашту- вання проєкту і цілей із .xcodeproj до конфі- гураційних файлів; – видалити .xcodeproj; – створити project.yaml та до- дати до нього такі поля: – name – ім’я проєкту; – configs – назви конфігів із вказан- ням успадкування release або debug; – settings – налаштування проєкту; – base – спільні налаштування для всіх конфігів, <ім’я конфігу> – налаштуван- ня, специфічні до конфігу; – options – різні опції для XcodeGen; – fileGroups – список файлів, які до- дані до проєкту, але не до цілей (у тому чис- лі, можна додати файл project.yaml); – settingGroups – список налашту- вань для перевикористання (необхідно за- дати назву і потім вказати список налашту- вань, пізніше сюди можна винести спільні налаштування для всіх цілей); – targets – список цілей (для кожної цілі потрібно задати ім’я, тип, платформу, список налаштувань settings, список файлів цілі sources). Приклад файлу project.yaml на- ведений у GitHub репозиторії [6]. Зрештою, потрібно лише викорис- тати консольну команду xcodegen generate, яка створить файл .xcodeproj. Отже, за допомогою XcodeGen і кон- фігураційного файлу project.yaml можна вирішити проблему рутинного додавання файлів до цілей. Натомість можна лише вказати директорії з ними у полі sources. Та- кож за допомогою конфігураційного файлу створення нової цілі відбувається простіше, швидше і знижується можливість виник- нення помилок через зменшення загальної кількості операцій, які потрібно виконати розробнику. Проте створення нової цілі відбува- ється все ще вручну. Далі буде описано, як можна автоматизувати цей процес. 3. Модифікація проєктного файлу за допомогою самописної утиліти командного рядку У класичному підході з використан- ням декількох цілей для створення нової розробнику спочатку потрібно дублювати існуючу, потім змінити деякі поля і назви у новоствореній цілі. Тобто глобально, знаю- чи назву нової цілі, а також назву та параме- три цілі, від якої буде зроблено дублювання, можна автоматизувати процес створення за допомогою написаного власноруч скрипту. Ця ідея і була закладена під час розробки утиліти командного рядку igen. Команда igen приймає два параме- три – шлях до файлу з конфігураціями цілей та шлях до project.yaml проєкту. Перший файл має два поля: – project – назва проєкту; – targets – словник, в якому ключ – це назва цілі, а значення – це параметри цілі Параметри можуть мати поля: – steals – список існуючих папок, які потрібно скопіювати для нової цілі, – inherit – назва цілі, від якої відбу- вається дублювання. Утиліта працює за наступним алго- ритмом: – виконує парсинг файлу із конфі- гураціями цілей; – виконує парсинг project. yaml, звідки дістаються дані про вже існу- ючі цілі; – виконує створення моделей для нових цілей на основі вхідних даних; 15 Інструментальні засоби та середовища програмування – виконує кодогенерацію оновлено- го блоку для цілей файлу project.yaml; – створює директорії COMMON і <назва_цілі> за допомогою виклику кон- сольної команди mkdir; – якщо у якоїсь цілі було вказано steals, виконує копіювання директорій за допомогою виклику консольної команди cp –R; – оновлює файл project.yaml (оновлюється тільки блок цілей, ключі бу- дуть відсортовані за алфавітним порядком); – оновлює файл з конфігураціями цілей (видаляються усі параметри цілей, якщо такі є, залишаються тільки назви ці- лей). Утиліта написана мовою Swift із ви- користанням swift-argument-parser. Повний код розробленого алгоритму доступний у GitHub репозиторії за поси- ланням [7]. 4. Ілюстрація розробленого підходу Для ілюстрації був розроблений не- великий iOS проєкт iNote для створення та редагування нотаток, що має дві цілі – Alpha і Beta. Тобто на одній кодовій базі створю- ється два застосунки. Обидва застосунки мають однаковий каркас у контексті функціоналу, а саме: де- кілька екранів привітання, головний екран з нотатками, з якого можна перейти на екран створення нової нотатки або редагування вже існуючої. Однак, деталі реалізації – різ- ні. Застосунок Alpha має три екрани приві- тання, а застосунок Beta – два. Тексти та зо- браження на цих екранах – різні. Унікальність у зовнішньому вигляді досягається використанням однакових клю- чів для текстів та назв для кольорів й зобра- жень, але наявності окремих ресурсних ка- талогів для кожної з цілей. Як можна поба- чити на рисунку 4, зображення, хоч і мають однакову назву, різні на вигляд. Alpha відображає список нотаток у вигляді таблиці, а Beta – у вигляді колек- ції. Це реалізовано за допомогою створен- ня двох контролерів відображення з уні- кальною логікою: один з них використо- вує елемент користувацького інтерфейсу UITableView, а інший – UICollectionView. Кожен з контролерів знаходиться у файлі NotesListViewController і на- лежить тільки до однієї з цілей. Зовнішній вигляд головного екрану обох застосунків зображено на рисунку 5. Рис. 5. Головний екран з нотатками кожно- го із застосунків Водночас для того, щоб пере- використати спільну логіку, був ство- рений файл та відповідний клас BaseNotesListViewController, від Рис. 4. Каталоги Assets.xcassets кожної з цілей. 16 Інструментальні засоби та середовища програмування якого успадковуються конкретні реалізації. Цей файл належить до обох цілей, як пока- зано на рисунку 6. Рис. 6. Приналежність файлу BaseNotesListViewController Відрізняється також і спосіб відобра- ження екрану створення та/або редагування нотатків. Alpha виштовхує новий екран у стек навігації, використовуючи метод pushViewController( _viewController: UIViewController, animated: Bool), а Beta – показує екран модально, ви- користовуючи метод present( _ v i e w C o n t r o l l e r T o P r e s e n t : UIViewController, animated flag: Bool, completion: (() -> Void)? = nil) Для цього використовується такий же принцип. Клас Coordinator, що від- повідає за навігацію, має шаблон із спіль- ною логікою для створення модуля додаван- ня та/або редагування нотаток. Цей шаблон знаходиться у файлі, який належить до обох цілей. Специфічна логіка знаходиться у різ- них файлах, кожен з яких належить тільки одній із цілей. Описаний підхід до проєктування є використанням патерну «Шаблонний ме- тод» [8], суть якого полягає у розбитті алго- ритму на кроки (функції), виклику цих кро- ків у певному методі, а також реалізації тих методів, логіка яких буде однакова у базово- му класі, а тих, логіка яких буде унікальна, – у підкласах. На прикладі класу Coordinator, його метод start(animated: Bool) можна логічно розбити на два кроки: ство- рення модулю func createModule() -> UIViewController та навігація до цього модулю func navigateToModule(with viewController: UIViewController, animated: Bool). Створення модулю має однакову ло- гіку. Для обох додатків це створення контр- олю відображення, класу для обробки біз- нес-логіки, встановлення заголовку для панелі навігації. Тому реалізацію цього ме- тоду можна винести у базовий клас. Логіка власне відображення, як уже було зазначено раніше, відрізняється. Тому реалізація зна- ходиться у підкласах. Структурно спільні для обох цілей файли знаходяться на диску у директорії COMMON, а окремі – у відповідних дирек- торіях Alpha і Beta. Тобто кожна ціль буде мати файли з двох директорій – COMMON і <назва_цілі>. Інформація про це знаходить- ся у файлі project.yaml у полі sources кожної з цілей, що показано на рисунку 7. Рис. 7 Список цілей у файлі project. yaml для проєкту iNote За необхідності створення третьої варіації застосунку, більше не потрібно вручну створювати ціль, налаштовувати її та розбиратися із файлами, і навіть не по- трібно самостійно редагувати project.yaml. Достатньо створити конфігурацій- ний файл цілей для цього проєкту, напри- клад, iNote.yaml із таким змістом: 17 Інструментальні засоби та середовища програмування project: iNote targets: Alpha: Beta: Gamma: steals: – iNote/Alpha/Resources/ – iNote/Beta/Modules/ inherit: Alpha Після цього запустити команду ./igen iNote.yaml project. yaml. У результаті виконання, скрипт са- мостійно оновить файли iNote.yaml, project.yaml, скопіює ресурсні файли із цілі Alpha, а вихідні файли – із цілі Beta. Після запуску xcode generate у проєкт буде додано нову ціль, повністю готову для ви- користання. Згенеровані налаштування цілі Gamma показано на рисунку 8. Рис. 8 Список цілей у файлі project. yaml після використання igen Отож, використання скрипту igen та конфігураційного файлу дозволяє роз- робнику максимально швидко додавати нові цілі до існуючого проєкту. Проєкт для ілюстрації розташований у GitHub репозиторії за посиланням [9]. Висновки Удосконалено підхід із використан- ням декількох цілей у рамках одного Xcode проєкту шляхом використання XcodeGen для генерації проєктного файлу та самопис- ної утиліти igen для модифікації конфігура- ційного файлу project.yaml. Удосконалений підхід має ряд пере- ваг. Використання XcodeGen дозволяє збе- рігати усі конфігурації проєкту в одному файлі у зрозумілому та сприйнятливому вигляді. Структура файлів та директорій у Xcode буде завжди синхронізовано із струк- турою на диску, зменшується можливість виникнення конфліктів злиття через одно- часні модифікації файлу .pbxproj. Використання утиліти igen умож- ливлює максимально швидке створення но- вих цілей на основі конфігураційного фай- лу, що дозволяє максимізувати використан- ня людських ресурсів та грошей, пришвид- шити час розробки, а також мінімізувати можливість виникнення людських помилок. Розроблений проєкт Xcode для ілю- страції описаного підходу, який розміщено у відкритому доступі у GitHub репозиторії. References 1. iOS : How to create two versions of your app with a single codebase [Online] – Available from: https://anutoshdatta.medium.com/ios- how-to-create-two-versions-of-your-app-with- a-single-codebase-eca0bb75b0fe, last accessed 2022/06/11. 2. 2 iOS Apps, 1 Codebase with XCode Scheme [Online] – Available from: https://testfairy. com/blog/2-ios-apps-1-codebase-with-xcode- scheme/, last accessed: 2022/06/11. 3. Bundle IDs [Online] – Available from: https://developer.apple.com/documentation/ appstoreconnectapi/bundle_ids, last accessed: 2022/06/11. 4. XcodeGen [Online] – Available from: https:// github.com/yonaskolb/XcodeGen, last accessed: 2022/06/11. 5. BuildSettingsExtractor [Online] – Available from: https://buildsettingextractor.com/, last accessed: 2022/06/11. 6. Example project.yaml [Online] – Available from: https://github.com/gloomikon/ MultiTargetAutomatisation/blob/main/iNote/ project.yml, last accessed: 2022/06/11. 7. igen [Online] – Available from: https://github. com/gloomikon/MultiTargetAutomatisation/ tree/main/igen, last accessed: 2022/06/11. 8. Template Method [Online] – Available from: https://refactoring.guru/design-patterns/ template-method, last accessed: 2022/06/11 9. MultiTargetAutomatisation Example Project [Online] – Available from: https://github.com/ 18 Інструментальні засоби та середовища програмування gloomikon/MultiTargetAutomatisation, last accessed: 2022/06/11. Одержано: 18.11.2022 Про авторів: Журба Микола Андрійович, магістрант дру- гого року навчання Національного Технічного Університету України «КПІ імені Ігоря Сікорського». Стеценко Інна Вячеславівна, доктор технічних наук, професор, професор кафедри інформатики та програмної інженерії НТУУ “КПІ імені Ігоря Сікорського”. Кількість наукових публікацій в українських виданнях – понад 100. Кількість наукових публікацій в зарубіжних виданнях – 14. Індекс Хірша – 2. http://orcid.org/ 0000-0002-4601-0058 Місце роботи авторів: Національний технічний університет Украї- ни «Київський політехнічний інститут імені Ігоря Сікорського», 03056, м. Київ, проспект Перемоги 37. Тел.: (044) 236-9651 e-mail: gloomikon@gmail.com