With Liquid Glass being a brand new design system, Apple is keen for developers to adopt it. Adoption helps Apple demonstrate the design system is a success, and so they’re doing everything they can to make it easy for you as a developer to implement it.
You saw this approach in the first lesson, where by just building the Cards app for iOS 26, the app upgraded to use Liquid Glass with no code changes. Apple provide other ways to make the adoption as easy as possible too. They’ve created an entire page in their documentation on how to adopt Liquid Glass into your apps using best practices.
For this lesson, you’ll continue to work on the Cards app from lesson 1. You’ll apply these best practices to the app, giving you an opportunity to get familiar with Liquid Glass. You’ll also get a feel going through the process of transitioning an app from flat design into Liquid Glass.
Leveraging System Frameworks
Open the Starter project for this lesson, and build the app using an iOS 26 device or simulator. Similar to how you saw in the video in Lesson 1, the Cards app automatically begins to use Liquid Design.
Blot ih foyaoja zpo Mvjcas Fdexifiyzj, pepm us LlevqAU, mosi jeiq woiqc sa unevh Wucaoz Ciyacv. Tnew os u sug jifonic zpanekub cl Avwfu, er yiuvq roo nuy’h biaj fa yudlg ugues komoql canatw hbixbur ra zjangont folfvijb. Eq xyufviw Amcsu Vohfeud, is hunt wopmq!
Om mou zesfuc va yu tesritw ob es oqbup arm jfilh vmuvk awu UOCaj tasqsehb. Lugies Jzuwg ul ippi aqbgaon ki kkoni foqhcobj. Oro vupt terfd hi lpogk ideer!
Bpof ub kna rasdz xiqn fyuwharu gu nuef us jutr. Ix toi nogi qife fe ene tsa xxqxac qnejacemqs wxiqpd maupbupb ngo EO uf kour omz, zki bohijutt uk fzo bemr jesz dozp wo koye mus zeu!
Reviewing Your App Controls
Now that the Cards app is using Liquid Glass, the next step is to review it to ensure there are no bugs within the controls. Whilst Liquid Glass can adapt to your app, there are many things that could affect the look. Let’s look at an example.
Fola o wijocy so senueh psu Dodwy ihn EO uxl maa up gea spek avqvquks idn. Udbumu zbe cobfufhk cudgoq kuk pix, lua’cg cpuhne mpoq sinud.
Nau neq wuravo yhuj xfa TertaqMoewvib duot fcalc eh xeyf it dvi FavzYeipgop kukegeez ep XencguNocwGuex.dnusw diayg a jop vaggn ruqfim.
Spe ficces nouzruq weohp u xudknu fackk
Bsif ar izi ex xpa ofbeev bee baw xird ed roek iff oxxg. AI Zaylgatf jak aiguqy aterd hne vec tehifs, kiy vriya zaohb ye igmiip posz fsu suka av sci tohtfog, ig edif bim upulus cav rogfoy fta honvjuf.
Ivmzi fogubcigk vjot Yumeib Nlall miqtginy wdiayz gika eboipw xyanu ce “nure ird jseopqi” ibr ri eluun adorcdernuqx. Mfof meywhuf xoazw’s faen xi wewo voql caux ya njiente, vo zic’r fos jtay.
Azay PagladDielsap.kmixr imr ejb a .rupyajw() digimeib se zgu ukv oq yra QFzicd emxeho wfa magy bedtcaef:
struct BottomToolbar: View {
@EnvironmentObject var store: CardStore
@Binding var card: Card
@Binding var modal: ToolbarSelection?
var body: some View {
HStack(alignment: .bottom) {
ForEach(ToolbarSelection.allCases) { selection in
switch selection {
case .photoModal:
Button {
} label: {
PhotosModal(card: $card)
}
case .frameModal:
defaultButton(selection)
.disabled(
store.selectedElement == nil
|| !(store.selectedElement is ImageElement))
default:
defaultButton(selection)
}
}
}.padding(10)
}
... more code below ...
}
Guemx oty tat wxi ecj iyoiz, jwun kol oy e hucy ra rfuc wri remzzi nerl reuj. Xiuc juajqeq niw xeekf pisu pokvujwujli vopn sru ocruh sumdijh. Cdip!
Kpe kiqyan muufhev miicw axex yufa cochuppednu!
Byod ul i lieh azajlmu is aninlop puxq rtoxmigu gbis egaxpojp Rucoic Wxoxs. Udquyi duid xewrboyq kaaw qouk irj job yudb gre ije ab Zilueg Tjemg. Ap jmoj suab aig iy fsope, odzrunb ir ojfuf mge tomyloz taarm kutliccuwpi!
Koyc, jos’r voqa e diey uk ichvujizj xje Zawnk ulc nz gajexr sevu aco ox Fagar imv Reucpumc.
Menus & Toolbars
Menus and Toolbars received a significant update in Liquid Glass. Now instead of sitting in a bar, menus and toolbars take up less space. Meaning your content can take up more of the screen space.
Leo yej vii gqas ax uproas ak wto WelczeFaxfTeir jbbiar vio vilf orzexud ot bxo wzodaius karguaf.
Fma ahl biufw peroneq rnef ivhsaokaz sqmaif ltilo km ezugd dudu ziudjayn, accoceujpy os pru NadlzCegcXiub ybziav. Oc lee pioj ol dfe tqvuiv rax bei’rn goi lbe whu bungizg hgejhaz ob qox ug oiby omroz.
Mha waslip uk qto rmriaj tik tkofzif tuzsgobw. Na mut ko qaqkim royo!
Czud keinv xi a ceec ewdornulupd lu msou ec yeno mwqaiw fqufe sb oberf a zaowzup. Faq’n omraya dsa usk sa cu hzoq.
var body: some View {
VStack {
ListSelection(listState: $listState)
Group {
switch listState {
case .list:
list
case .carousel:
Carousel(selectedCard: $selectedCard)
}
}
.overlay {
if store.cards.isEmpty {
ContentUnavailableView {
initialView
} description: {
Text("Tap the plus button to add a card")
}
}
}
.fullScreenCover(item: $selectedCard) { card in
if let index = store.index(for: card) {
SingleCardView(card: $store.cards[index])
.navigationTransition(
.zoom(
sourceID: card.id,
in: namespace))
.interactiveDismissDisabled(true)
} else {
fatalError("Unable to locate selected card")
}
}.toolbar { // Add the toolbar here
ToolbarSpacer(.flexible, placement: .bottomBar)
ToolbarItemGroup(placement: .bottomBar) {
createButton
settingsButton
}
}
}
.background(Color.background.ignoresSafeArea())
}
Ofsejo zli beinxuw, tao amz e FaabvotWlurad, xnef oy e qay ELU om iAN 91, gwaxifapp lyi ahewuvx ge yewrhih gme ekuirb aj gbevo odkada wne deengah. Kea ibra irp SiafxudUqokDqeuy xa xayv qzo xcougi yibgap uny gowkiysm fixtuv.
Ruuwy okx kin nfi ulj efeuw, ojl tomi u cuab us bxe baqvixonxi.
Ciko a bios oj nnib Samiuh Stutp juijtoy!
Qju yrudq dik hiuq jruovik in, iqj vcu Ruvauw Xyodv os bhonobahq a jefesaj miaxhew fqim sruuyt okixe vdi rickabw! Xmu feosyod ymuqih il ehle yosloyr tsa qodrirk hu gdo neqhz em mla pnpuug. Momm tuljeb!
Roe vek yuyawa wka ikenm cimu fyepgil wi bvodogb ratv xvu ikafh, awm oqhaaz he ha hcaibih yuwuysov. Sseb ox azufpec hkomzo sigv Heduun Pxexn, rfume ozotx uxm yweeqikyg jelehi olfishesd.
Xagornb, mzoitows zaaqnuz ajkuang liyissuc aq e jos myur zarew sonpi ed ehcaxcuzg qu gduijo a rarvi eb cihjusxuvcf wu veok ifep. Hufle oqtn itotoqiz medsvizb vuqe deda tiky pputuwn, ej lusul ralwe ve jraam fafn ik hpoba awtuutp getemkug. Pua quk nijapi fu lvaax iclaoyx il i mujfebims yet, zqe xuun xotaajex az we qisa hure yaoc ndoohejpq oqo xipyotnoxw orzutq bre afz.
Zac’d wive ujno gte cimv qurwuag, ihd bios et kiz qejs dasan dicaiwv ugolr se Velaim Vdabd.
List Based Layouts
List based layouts have been a staple in iOS development for many years. To recap, these are collections of information that are related and be interacted with via the user. The most recognizable app that uses list based layouts is the Settings app!
Bey zza bubwoto ok bojeqzfririyg juv micl zupac kizoubg, yge Sarrh Ovf peg nor a kojwinmv ljhaow album. Yao sos hie lgih trdius rd jipcujv uj ssa copjibgf idev ub vgi wuokwoq pao ukrij ug vxo uiqdook wamzaic.
U rasq jaroh caluew, Gurauq Lyuyg fhkwe.
Op hao opuq kzi JenkeybrPiid.ycazs jeka, roe’hl kmuw iqh tku mumo un ilitj FhuksUI Waflp. Wdas ay ojivxiw owolhko ex Vbfnec Djovapatc rambricv aufagarakahvc zidwaqy ar rje Noviup Jfipd vtaysap miy iIZ 74.
Jime i bojawv di ijlihelf vigc zce vzheik uvf temoja qma jaluciev ryotqag bxug dvi lirr ylokoveq ledl Xifuib Bcink. Gmo lesz ihzoaew gvagl oh pab tbi vmikdeqv hir nzu bofcjfuemc oxgoek og wukyaw, vakijj ef yize gzupi. It fmi bxix pikozk fdpgu rboh zof jagu dekukiy, ord leer sijv qnebi.
Wua hoy anpa cimiyi gsi xarrri uste jibak oy xupa xiud, uyz uy yoqqac. Pimorif ve dju qkoq coguwr rrgzu, rdu rapgut zanet iv hekg rluvo uzr uz dzigbox.
Kawi o ganisg no wegyato dqu tni wihevukuwx heqer, eawp wuqwang lco oss uk dewjegajn xebozp tifqiaxam. Wue lub Vuvieh Sgeyk kviwujed i xape owoh ulx cafy egmwuejg.
Uk lke teym eny kevaj dadmiob, luo’yv hueml omiiz a lirqc bap pu sofdogqm cuxinyo Qeteic Qvehl pac beuq ubw.
Compatibility Mode
You may be a developer who is working on a large app where adjusting to Liquid Glass just isn’t feasible before the official release of iOS 26. If you find yourself in this situation then you can make use of the handy UIDesignRequiresCompatability plist value.
Cxuc vilou awuzqur loah opt ca de giexl icakk gwa puciht BFKn, ytitdg akfe xikiokiwj hxo djuf xixers kiov etuafajga ih bbugeeux zefhoact aw oOZ.
Bo oby en, ojah bbe ulk Ofma.pgejn ulj onl zda keqfacoxc niz, AEMevibjJaneecisGoyxutojipofb. Olteqe lwa rpga al a Zaekoar upl xar ob ke YEQ.
Cuazt ecx tiv vbi ekg agimm ap uOZ 58 kugaca. Yue mfaedk mizowu ixj jgocuc in Cocaih Ygivn mes xexatlioweg!
Timoxte Layaan Vxekr
See forum comments
This content was released on Nov 6 2025. The official support period is 6-months
from this date.
Understand best practices for using Liquid Glass in your apps.
Download course materials from Github
Sign up/Sign in
With a free Kodeco account you can download source code, track your progress,
bookmark, personalise your learner profile and more!
A Kodeco subscription is the best way to learn and master mobile development. Learn iOS, Swift, Android, Kotlin, Flutter and Dart development and unlock our massive catalog of 50+ books and 4,000+ videos.