За да започнем да творим (да създаваме приложения) трябва да се запознаем с инструментите, които са ни необходим. Основно ще изпозлваме macOS компютър, който е препоръчвания варинат за разработка от Apple.
За целите не на курса ще покажем и по-лекият вариант за обучение -
Swift PLaygrounds
. Приложение, което е налично на iPad и macOS, и може да се използва за разработка на софтуер, който покрива изискванията на учебния курс (идеален е за обучение, а дори може и да реализирате и професионални проекти с него, но идва с ограничени възможности).
Професионалните разработчици на мобилни приложения за iOS и приложения за macOS (и други съвместими операционни системи) използват Xcode и други съвместими технологии (Ruby, Python, shell scripts, т.н.), за да могат да разрешават задачите си с лекота.
Xcode е среда за програмиране. Програма, която използваме за да пишем приложения (други програми) и програмен код на Swift (и не само). Xcode изпозлва външни програми за да трансформира текста (Swift) в други програми. Тези програми са компилатори като - Swift Compiler, clang (което идва от C languages), LLVM. Системата е доста комплексна и изграждана в продължение на десетки години. Повече за историята на Xcode може да прочетете тук.
Ще се опитаме да се запознаем в детайли с версия 14 на Xcode.
Почти всяка година излиза нова версия на това приложения, която въвежда по нещо ново, с цел да направи процеса на разработка на софтуер по-лесен.
Не е задължително да се използва Xcode при разработката на приложения. Може да изпозлвате VSCode, AppCode или произволен друг инструмент, но Xcode e стандарта и е предпочитан от повечето разработчици.
Ето как изглежда интерфейса на Xcode:
A SwiftUI project opened in Xcode 14.
Тук виждаме два от трите основни панела.
Левият се нарича Навигатор
(Navigator), а десният Редактор
(Editor).
В ляво със синьо - Навигарота. В дясно с червено - редактора.
Навигатора, показва проекта (всички негови елементи). Можем да избираме различните елементи, чиито съдържание после се представя в основния панел - редактора. Всеки елемент в навигатора има отличителна икона, която подсказва от какъв тип е съответния файл/ресурс.
Първият елемент представлява нашия проект. В случая той се казва - SwiftUI Demo App
.
Изгледът на реактора (централния изглед) се променя в зависимост, кой елемент от проекта бъде избран. В момента е избран файла ContentView.swift
. Затова и виждаме малко код на Swift (SwiftUI)
Редактора има платно, което визуализра кода, ако той е SwiftUI
.
Визуализирането е в реално време. Т.е. ако променим кода в лявата част на редактора, след много малко време ще се промени и изгледа на приложението (екрана от приложението) в дясно.
Ако кодът е само Swift
ще виждаме само програмния код, като той ще бъде форматиран визуално.
Визуалното форматиране ни позволява по-лесно да можем да разпознаваме елементите на езика (запазените думи). Следните елементи са характерни за този изглед.
- Имаме номера на редовете. Изпозлва се, за да може лесно да се намират грешките в кода. Това е начин за номериране/адресиране на кода, така че да може се посочи еднозначно грека, ако има такава. (Ще видим подобни примери.)
- Има тектс в сив цвят. Това са коментарите във
Swift
.Коментарите са част от програмния код, но не са част от финаланта програма. Те помагат в различни насоки като - по-лесното ориентиране в логическата организация на кода, съхраняват бележки и допълнителна информация, която прави процесът по разработка лесен.
- Розови думи, които са малко по плътни (bold). Това са запазените думи в езика, които имат определено значение (смисъл). (Това са тези думи от картинката. В
Swift
има още. Ще научим повечето за тях в следващата лекция заSwift
.)import
struct
var
some
static
Запазените думи в прогрмните езици са различни и тяхния брой се променя (расте) с версиите на
Swift
.
Навигатор панелът има различни табове. Всеки таб има различна роля и визуализация. Някои от тези табове са доста по-често използвани.
Изобразява файловете в проекта.
В долната част в ляво има бутон +
, който позволява добавянето на нови файлове или групи към проекта.
Добави файл, група или произволен елемент към проекта.
Ако изберете New File...
ще видите следния прозорец, който ще ви помогне да добавите необходимия вид файл, който търсите. Процесът е с няколко стъпки.
Избери какъв вид файл искаш да добави към проекта.
Xcode е достатъчно "умен" софтуер, който разполага с базови шаблони за различните типове файлове. Идеята на тази автоматизация е да ви спести време.
Типовете в проекта са изборазени като текст, с техните характеристики.
В дъното на панела има филтър и различни бутони (C) - показва само класове и протоколите (структурите пак са тук) , (Документ) - включва само типовете от проекта, (М) - показва само контейнерите
Редакторът може да показва различни файлове хоризонтално и вертикално. Въпрос на гледна точка.
Няма тестове в текущия проект. Ако имаше unit или UI тестове, те всиките ще бъдат изборазени тук. Могат да бъдат стартирани.
Ето как изглежда дебъг панела, когато няма активно приложение за дебъгване.
Xcode може да стартира дебъгване на приложение в симулатор или върху работещо устройство (iPhone, iPad, Apple Watch, AppleTV), което е свързано с кабел или по WiFi.
Ето и някои допълнителени елементи, които са съществени при работата с Xcode.
Първо трябва да отбележим, че текстовия редактор предоставя реален изглед на потребителския интерфейс, когато пишем SwiftUI компонент. Този изглед се нарича canvas - канава (или платно).
Изгледа в Xcode, изпозлва симулатор и стартира кода, който пишем, като отразява промените почти мигновенно. Ако допуснем грешка, това се визуализира в редактора (виж червените съобщения) и изгледа не се обновява.
Не можем да видим интерфейс, ако приложението ни не се компилира. Т.е. трябва да се стараем винаги да е синтактично правилно - да може да се компилира.
Любознателния читател може да потърси повече за целия процес на превръщане на програмния код в изпълнимо приложение тук. Xcode ни помага, като следи за разлиНите стъпки, през които трябва да се мине.
Над канавата има два бутон - един плюс - който отваря библиотеката с готовите елементи - много подходящ в самото начало, когато още не познаваме всички компоненти и бутона за показване и скриване на инспекторите (подеобен има и в горния ляв край за показване и скриване на навигатора). Ще разгледаме тези две полезни функции.
При натискане на бутона "+" се отваря нов прозорец, който на базата на контекста (какво е селектирано сега) изобразява списък с готови елементи, които можем да добавим към текущя файл.
Често ще използвате библиотеката, когато пишете SwiftUI или Swift код. Ето и какви възможности ни предоставя тя.
Когато става въпрос за SwiftUI
тогава режимите между които можем да избираме почват с този за различни контроли (view-та).
Следващия режим е с различни модификатори, които можем да прилагаме към нашите контроли или към SwiftUI
кода.
Ако обаче сме избрали нормален swift файл, тогава наличните режими са малко по-различни. Първият режим (има четери режима) е списък от примерни шаблони с код, които предоставят основната структура, а програмиста трябва да попълни динамините (променливите) елементи. Тези малки примери - така наречение снипети са много полезни, понеже спестяват време, особенно когато става въпрос за по-сложни синтактини конструкции.
Вторият режим е добавяне на медия. Тук трябва да имате добавени различни асети (картинки, видео, аудио и други) След това режимът за избор на цвят. Той е доста полезен, когато имаме дефинирани цветове в нашия проект. Можем да ги изпозлваме директно в проекта.
Може да добавяте цветове (в Assets каталога) като описвате тяхното поведение в зависимост от разлиния цветови режим, в който е стартирано вашето приложение - има тъмен и светъл режим. Всеки цвят, които дефинираме, може да има различен изглед в тези два режима (може и да е един и същ).
На последно място остава стандартния режим за избор на символи, които ни позволяват да изпозлваме стандартния набор от символи, с което приложенията на платформите изглеждат подобно и потребителите се ориентират доста по-лесно.
Приложение, което позволява по-лесно обучаване в програмирането със Swift и SwiftUI.
Доста картинки, които обясняват как може да го ползваме.
Приложението може да се изтегли от mac AppStore
.
Приложението може да се изтегли от AppStore
.
Няма съществена разлика между приложението на macOS и това на iPadOS.
.swift
- файлове които съдържат програмния код.
.swiftpm
- файл (цяла директория, която съдържа swiftui проект), който съхранява целия проект създаден със Swift Playgrounds.
Може да се отвори със Xcode.
Структурата на базов SwiftUI
проект се свежда до следните няколко вида файлове.
- Описател на проекта
.xcodeproj
. Конкретно -SwiftUI Demo App.xcodeproj
(в основата на навигатор изгледа. Обозначен със синя икона с А.)Това е директория и вътре има няколко файла. Основният е
project.pbxproj
, където с тест е описана структурата в определен формат разбираем от Хcode. Assets.xcassets
- каталог с ресурси. Може да са картинки, звуци, видео и не само.Preview Assets.xcassets
- каталог с ресурси, които се ползват само в процеса на разработка, но няма да са част от финалното приложение.SwiftUI_Demo_AppApp.swift
- началната точка на приложението. Името може да е различно. Само една е за приложение..swift
файловете съдържат логиката на приложението.
Един проект може да има и много други файлове и ресурси. Програмистите са свободни да добавят различни неща, стига крайният резултат да е нещо, което може да бъде изпозлвано.
Тук може да намерите детайлно описание на всички елементи и интерактивен пример.
UIKit приложението има няколко отделни части, като основните са:
- Application Delegate
- Main Storyboard
- Assets Catalog
- Info.plist
Входната точка приложението.
Класът, който имплементира AppDelegate
предоставя механизъм, да можем да реагиараме на рачлични съобщения от операционната система.
Файловете, чието разширение завършва със .swift
са такива файлове, които съдържат прогамен код. В зависимост какво прави този програмен код, Xcode сам определя как ще ги изобрази в реактроската част. Дали ще е само като текстов редактор (валиден изглед) за всички .swift
файлове, които не съдържат SwiftUI
код. Или като редактор и платно за визуализация на SwiftUI
код.
Платното в дясно се нарича canvas и може да бъде скрито/изключено.
Файловете с разширение .storyboard
са част от проекти, които използват Storyboard. Познати са още като проекти базирани на UIKit.
Възможно е да имаме SwiftUI проект, който да изпозлва UIKit елементи и да изпозлва
.storyboard
за реализирането на част от изгледите.
Проектите са микс от различни файлове с код, картинки, музика, и друг вид ресурси. Крайният резултат е приложение.
Ние ще разгледаме основните типове файлове изграждащи двата вида основни проекти. Ще се опитаме да обясним структурата на проекта. Ако създаваме и работим над различни проекти, постепенно ще научим тази структура и ще знаем ролята на всеки един елемент.
В момента ще опишем най-основните части, така че да можем да разберем основната картина. Ако трябва да влезем в детайли ще трябва да четем с разбиране документацията изготвена от Apple.
Не всичко е написано достатъчно детайлно в документацията. Добре е да изпозлваме различни достоверни източници, за да можем да намерим достатъчно добро обяснение за всеки елемент на проекта.
Проектът се съхранява във "файл" (директория) .xcodeproje
, която има сложна структура. project.pbxproj
съдържа описанието на целия проект, със различните ресурси, които са част от различните target-и (таргети).
Всеки таргет описва рецепта, по която може да се приготви (компилира от кода) приложени за операционна система, която е от възможните.
Можем да имаме един проект, който да има различни таргети, за iOS и производните.
В този файл се описват различни конфигурации на приложенията за macOS, iPadOS, iOS, tvOS, watchOS.
Различни конфигурации и текстове, които се показват на потребителя, за да даде съгласието си за достъп до даден ресурс се съхраняват тук. Операционната система има различни механизми за защита на данните. За да предостави достъп на произволно приложение, то трябва да поиска изрично съгласие от потребителя.
Следните често срещани функционалности изискват съгласие от потребителя.
- Достъп до снимките
- достъп до камера
- достъп до микрофон
- достъп до локация (местоположение)
- достъп до push notifications (пуш-съобщения/напомняния)
- Достъп до локалната мрежа и други