<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Miká Kruschel</title><description>Notes by Miká Kruschel</description><link>https://kruschel.dev</link><language>en</language><copyright>All rights reserved 2026, Miká Kruschel</copyright><image><url>https://kruschel.dev/mk-logo.png</url><title>Miká Kruschel</title><link>https://kruschel.dev</link></image><item><title>Awesome App Landing Pages</title><link>https://kruschel.dev/notes/app-landing-pages</link><guid isPermaLink="true">https://kruschel.dev/notes/app-landing-pages</guid><description>Some app landing pages that caught my eye recently.</description><pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;awesome-app-landing-pages&quot;&gt;Awesome App Landing Pages&lt;/h1&gt;
&lt;p&gt;Some app landing pages that caught my eye recently.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://www.sunlitt.app/&quot;&gt;Sunlitt&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://www.sunlitt.app/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/sunlitt.app.webp&quot; alt=&quot;Sunlitt&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://crouton.app/&quot;&gt;Crouton&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://crouton.app/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/crouton.app.webp&quot; alt=&quot;Crouton&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://micropixels.software/apps/batfi&quot;&gt;Batfi&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://micropixels.software/apps/batfi&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/micropixels.software!apps!batfi.webp&quot; alt=&quot;Batfi&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://karo.chat/&quot;&gt;Karo&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://karo.chat/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/karo.chat.webp&quot; alt=&quot;Karo&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://darkroom.co/&quot;&gt;Darkroom&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://darkroom.co/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/darkroom.co.webp&quot; alt=&quot;Darkroom&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://helm-app.com/&quot;&gt;Helm&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://helm-app.com/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/helm-app.com.webp&quot; alt=&quot;Helm&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://boltai.com/&quot;&gt;BoltAI&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://boltai.com/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/boltai.com.webp&quot; alt=&quot;BoltAI&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://handmirror.app/&quot;&gt;Hand Mirror&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://handmirror.app/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/handmirror.app.webp&quot; alt=&quot;Hand Mirror&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://anybox.ltd/browser-deputy&quot;&gt;Browser Deputy&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://anybox.ltd/browser-deputy&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/anybox.ltd!browser-deputy.webp&quot; alt=&quot;Browser Deputy&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://www.apptorium.com/sidenotes&quot;&gt;SideNotes&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://www.apptorium.com/sidenotes&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/apptorium.com!sidenotes.webp&quot; alt=&quot;SideNotes&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://trybarcodes.com/&quot;&gt;Barcodes&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://trybarcodes.com/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/trybarcodes.com.webp&quot; alt=&quot;Barcodes&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://www.vogel.haus/peaks&quot;&gt;Peaks&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://www.vogel.haus/peaks&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/vogel.haus!peaks.webp&quot; alt=&quot;Peaks&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://www.vogel.haus/whistle&quot;&gt;Whistle&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://www.vogel.haus/whistle&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/vogel.haus!whistle.webp&quot; alt=&quot;Whistle&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://www.foodnoms.com/&quot;&gt;Foodnoms&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://www.foodnoms.com/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/foodnoms.com.webp&quot; alt=&quot;Foodnoms&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://overdesigned.net/worldclock/&quot;&gt;World Clock Widgets&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://overdesigned.net/worldclock/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/overdesigned.net!worldclock.webp&quot; alt=&quot;World Clock Widgets&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://croissantapp.com/&quot;&gt;Croissant&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://croissantapp.com/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/croissantapp.com.webp&quot; alt=&quot;Croissant&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://studysnacks.app/&quot;&gt;Study Snacks&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://studysnacks.app/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/studysnacks.app.webp&quot; alt=&quot;Study Snacks&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://obscura.camera/obscura/index.html&quot;&gt;Obscura&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://obscura.camera/obscura/index.html&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/obscura.camera!obscura!index.html.webp&quot; alt=&quot;Obscura&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://www.thetasks.app/&quot;&gt;Tasks&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://www.thetasks.app/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/thetasks.app.webp&quot; alt=&quot;Tasks&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://nonstrict.eu/bezel/&quot;&gt;Bezel&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://nonstrict.eu/bezel/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/nonstrict.eu!bezel.webp&quot; alt=&quot;Bezel&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://contrasts.app/&quot;&gt;Contrasts&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://contrasts.app/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/contrasts.app.webp&quot; alt=&quot;Contrasts&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://appahead.studio/apps/codepoint/&quot;&gt;Code Point&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://appahead.studio/apps/codepoint/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/appahead.studio!apps!codepoint.webp&quot; alt=&quot;Code Point&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://usage.pro/&quot;&gt;Usage&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://usage.pro/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/usage.pro.webp&quot; alt=&quot;Usage&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://bignews.app/&quot;&gt;Big News&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://bignews.app/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/bignews.app.webp&quot; alt=&quot;Big News&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://www.amato.app/&quot;&gt;Amato&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://www.amato.app/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/amato.app.webp&quot; alt=&quot;Amato&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://playpokpok.com/&quot;&gt;pok pok&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://playpokpok.com/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/playpokpok.com.webp&quot; alt=&quot;pok pok&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://everywordapp.com/&quot;&gt;Everyword&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://everywordapp.com/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/everywordapp.com.webp&quot; alt=&quot;Everyword&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://www.git-tower.com/mac&quot;&gt;Git Tower&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://www.git-tower.com/mac&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/git-tower.com!mac.webp&quot; alt=&quot;Git Tower&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://okjson.app/&quot;&gt;OK JSON&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://okjson.app/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/okjson.app.webp&quot; alt=&quot;OK JSON&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://www.sofahq.com/&quot;&gt;Sofa&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://www.sofahq.com/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/sofahq.com.webp&quot; alt=&quot;Sofa&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://anybox.app/&quot;&gt;Anybox&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://anybox.app/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/anybox.app.webp&quot; alt=&quot;Anybox&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://soka.appdeco.ca/&quot;&gt;Söka&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://soka.appdeco.ca/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/soka.appdeco.ca.webp&quot; alt=&quot;Söka&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://getslopes.com/&quot;&gt;Slopes&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://getslopes.com/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/getslopes.com.webp&quot; alt=&quot;Slopes&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://www.fitwoody.camp/&quot;&gt;FitWoody&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://www.fitwoody.camp/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/fitwoody.camp.webp&quot; alt=&quot;FitWoody&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://pockity.app/&quot;&gt;Pockity&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://pockity.app/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/pockity.app.webp&quot; alt=&quot;Pockity&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://pinning.app/&quot;&gt;Pinning&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://pinning.app/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/pinning.app.webp&quot; alt=&quot;Pinning&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://deadpan.io/scanboy/&quot;&gt;ScanBoy&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://deadpan.io/scanboy/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/deadpan.io!scanboy.webp&quot; alt=&quot;ScanBoy&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://unclutterapp.com/&quot;&gt;Unclutter&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://unclutterapp.com/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/unclutterapp.com.webp&quot; alt=&quot;Unclutter&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://indiegoodies.com/pastepal&quot;&gt;PastePal&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://indiegoodies.com/pastepal&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/indiegoodies.com!pastepal.webp&quot; alt=&quot;PastePal&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://textsniper.app/&quot;&gt;TextSniper&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://textsniper.app/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/textsniper.app.webp&quot; alt=&quot;TextSniper&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://kompressor.lucas.love/&quot;&gt;Kompressor&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://kompressor.lucas.love/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/kompressor.lucas.love.webp&quot; alt=&quot;Kompressor&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://www.picassoapp.ca/&quot;&gt;Picasso&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://www.picassoapp.ca/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/picassoapp.ca.webp&quot; alt=&quot;Picasso&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://waterllama.com/&quot;&gt;Waterllama&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://waterllama.com/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/waterllama.com.webp&quot; alt=&quot;Waterllama&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://gentler.app/&quot;&gt;Gentler Streak&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://gentler.app/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/gentler.app.webp&quot; alt=&quot;Gentler Streak&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://www.amyfoodjournal.com/&quot;&gt;Amy Food Journal&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://www.amyfoodjournal.com/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/amyfoodjournal.com.webp&quot; alt=&quot;Amy Food Journal&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://lunabudgeting.com/&quot;&gt;Luna Budgeting App&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://lunabudgeting.com/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/lunabudgeting.com.webp&quot; alt=&quot;Luna Budgeting App&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://pocketshelf.app/&quot;&gt;PocketShelf&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://pocketshelf.app/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/pocketshelf.app.webp&quot; alt=&quot;PocketShelf&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://supersleep.app/&quot;&gt;Supersleep&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://supersleep.app/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/supersleep.app.webp&quot; alt=&quot;Supersleep&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://docomments.app/&quot;&gt;Docomments&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://docomments.app/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/docomments.app.webp&quot; alt=&quot;Docomments&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://chojubo.me/remind-me-faster&quot;&gt;Remind Me Faster&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://chojubo.me/remind-me-faster&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/chojubo.me!remind-me-faster.webp&quot; alt=&quot;Remind Me Faster&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://harvee.app/&quot;&gt;Harvee&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://harvee.app/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/harvee.app.webp&quot; alt=&quot;Harvee&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://widgetsmith.app/&quot;&gt;Widgetsmith&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://widgetsmith.app/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/widgetsmith.app.webp&quot; alt=&quot;Widgetsmith&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://www.glaze.app/&quot;&gt;Glaze&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://www.glaze.app/&quot;&gt;&lt;img src=&quot;https://kruschel.dev/app-landing-pages/glaze.app.webp&quot; alt=&quot;Glaze&quot; width=&quot;1280&quot; height=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><author>Miká Kruschel</author></item><item><title>Machine Learning &amp; AI</title><link>https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8016</link><guid isPermaLink="true">https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8016</guid><description>Evaluate based on context size: on-device models have 4K context, while private cloud compute offers 32K.</description><pubDate>Fri, 12 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;machine-learning--ai&quot;&gt;Machine Learning &amp;#x26; AI&lt;/h1&gt;
&lt;p&gt;Unofficial AI summary of the WWDC26 group lab. May contain mistakes.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/videos/play/wwdc2026/8016&quot;&gt;Watch on Apple Developer&lt;/a&gt; · &lt;a href=&quot;https://kruschel.dev/wwdc26-group-labs-transcripts/wwdc2026-8016.txt&quot;&gt;Raw transcript&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Related Labs: &lt;a href=&quot;https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8011&quot;&gt;Apple Intelligence&lt;/a&gt;, &lt;a href=&quot;https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8121&quot;&gt;Coding Intelligence, Machine Learning &amp;#x26; AI&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;how-should-developers-decide-between-on-device-foundation-models-and-private-cloud-compute&quot;&gt;How should developers decide between on-device Foundation models and private cloud compute?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Evaluate based on context size: on-device models have 4K context, while private cloud compute offers 32K.&lt;/li&gt;
&lt;li&gt;Consider offline availability: on-device models are accessible without a network connection.&lt;/li&gt;
&lt;li&gt;Private cloud compute supports reasoning capabilities, allowing models to “think” before responding.&lt;/li&gt;
&lt;li&gt;Use the Evaluation framework for comparative testing by switching between on-device and private cloud compute models with minimal code changes.&lt;/li&gt;
&lt;li&gt;Be prepared to fall back to on-device models if network connectivity is lost when using private cloud compute.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-factors-influence-latency-when-choosing-between-local-and-private-cloud-compute-models&quot;&gt;What factors influence latency when choosing between local and private cloud compute models?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;On-device models eliminate network latency, but good network conditions may make server round-trip time negligible.&lt;/li&gt;
&lt;li&gt;Tokens per second performance might not significantly differ between local and server models, surprisingly.&lt;/li&gt;
&lt;li&gt;Utilize Instruments for detailed metrics like round-trip latency and token budgets to measure performance.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-developers-use-both-on-device-and-private-cloud-compute-models-within-the-same-app-or-feature&quot;&gt;How can developers use both on-device and private cloud compute models within the same app or feature?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Dynamic Profiles is a new API designed to facilitate the use of multiple models together, enabling context sharing and handoffs.&lt;/li&gt;
&lt;li&gt;This allows for scenarios where an on-device model might be used for initial routing, with more complex tasks delegated to a server model.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;why-might-an-xcode-connected-local-llm-using-mlx-server-exhibit-strange-behavior-like-long-delays-and-an-iam_n-tag-and-how-can-this-be-resolved&quot;&gt;Why might an Xcode-connected local LLM using MLX server exhibit strange behavior like long delays and an &lt;code&gt;IAM_N&lt;/code&gt; tag, and how can this be resolved?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;This issue is common when integrating new language models and often relates to tokenizer configuration.&lt;/li&gt;
&lt;li&gt;Verify that the tokenizer correctly recognizes the specific token causing the problem.&lt;/li&gt;
&lt;li&gt;Configuration issues, particularly with chat templates, are a likely cause.&lt;/li&gt;
&lt;li&gt;Posting on forums or GitHub issues with detailed observations is recommended for debugging.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-local-llms-running-on-mlx-lm-or-custom-core-ai-models-be-used-as-coding-agents-in-xcode-to-manipulate-projects-beyond-simple-chat-interactions&quot;&gt;How can local LLMs running on MLX LM or custom Core AI models be used as coding agents in Xcode to manipulate projects, beyond simple chat interactions?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Xcode’s integration with language models primarily uses the &lt;strong&gt;Language Model Protocol&lt;/strong&gt; and the &lt;strong&gt;Agent Client Protocol (ACP)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Both MLX and Core AI support using custom models.&lt;/li&gt;
&lt;li&gt;Core AI is inference-only — for agent use developers would need to build or contribute an OpenAI-compatible server layer; MLX LM servers work out of the box.&lt;/li&gt;
&lt;li&gt;Xcode can automatically detect MLX LM servers and allow selection of models, supporting both chat and ACP modes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-developers-detect-when-on-device-or-private-cloud-compute-models-have-been-updated-especially-if-prompt-behavior-regresses&quot;&gt;How can developers detect when on-device or private cloud compute models have been updated, especially if prompt behavior regresses?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;On-device models are typically updated as part of OS updates (~twice per year, often in betas), giving developers a testing window before GA.&lt;/li&gt;
&lt;li&gt;There is &lt;strong&gt;no runtime model-version identifier&lt;/strong&gt; — OS version is the practical proxy for which model developers are running.&lt;/li&gt;
&lt;li&gt;Avoid per-OS-version prompt &lt;code&gt;if&lt;/code&gt; branches; instead rephrase prompts to be robust across versions.&lt;/li&gt;
&lt;li&gt;The Evaluation framework is crucial for detecting model changes by running comparative evaluations against previous OS versions.&lt;/li&gt;
&lt;li&gt;Model updates are generally intended to improve performance, not regress functionality.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;can-foundation-models-run-from-widgets-app-intents-or-background-tasks-and-what-are-the-considerations-for-rate-limits-and-thermal-rules&quot;&gt;Can Foundation Models run from widgets, app intents, or background tasks, and what are the considerations for rate limits and thermal rules?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;On-device models can run in the background and in widgets.&lt;/li&gt;
&lt;li&gt;Rate limiting may occur on iOS due to system conditions; requests might fail and should be retried.&lt;/li&gt;
&lt;li&gt;The system manages on-device LLM resources, ensuring only one instance is in memory, but foreground tasks may be prioritized.&lt;/li&gt;
&lt;li&gt;On iOS, background tasks may be deprioritized if resource-intensive foreground activities are occurring (e.g., games get priority over background LLM use).&lt;/li&gt;
&lt;li&gt;Don’t surface rate-limit errors to users in background contexts — handle and retry silently.&lt;/li&gt;
&lt;li&gt;Rate limiting does not apply on macOS for the on-device foundation model.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-developers-create-or-adapt-models-for-their-own-apps-data-and-domains-such-as-generating-stylized-user-profile-images-or-adaptive-app-guides&quot;&gt;How can developers create or adapt models for their own apps, data, and domains, such as generating stylized user profile images or adaptive app guides?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Start by customizing prompts with app-specific user data to generate personalized outputs.&lt;/li&gt;
&lt;li&gt;Consider fine-tuning open-source models from platforms like Hugging Face if more advanced customization is needed.&lt;/li&gt;
&lt;li&gt;User adaptation can often be achieved through prompt engineering and extracting relevant information, rather than full fine-tuning.&lt;/li&gt;
&lt;li&gt;Leverage the Evaluation framework for “hill climbing,” iteratively improving model quality through prompt changes, model swaps, or fine-tuning.&lt;/li&gt;
&lt;li&gt;The Evaluation framework’s &lt;strong&gt;sample generator&lt;/strong&gt; can create synthetic text inputs for testing (and pipelines exist for diffusion models).&lt;/li&gt;
&lt;li&gt;The Evaluation framework supports various model types, including diffusion models, and can use model judge evaluators for style and quality assessment.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-best-use-cases-for-the-foundation-models-framework-and-which-should-developers-avoid&quot;&gt;What are the best use cases for the Foundation Models Framework, and which should developers avoid?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ideal use cases include content extraction, content generation, and tasks leveraging image input.&lt;/li&gt;
&lt;li&gt;Test image input during the iOS 27 beta and file feedback if the use cases fail.&lt;/li&gt;
&lt;li&gt;LoRA-style adapters may be possible for text models but are not supported for diffusion models.&lt;/li&gt;
&lt;li&gt;Avoid using Foundation Models for real-time processing that requires sub-millisecond latency, such as ranking list views or processing video frames per second.&lt;/li&gt;
&lt;li&gt;For highly specialized, real-time tasks, consider domain-specific APIs like Vision or Speech Recognition.&lt;/li&gt;
&lt;li&gt;If a task requires more language support than available in Foundation Models, specialized translation APIs might be a better fit.&lt;/li&gt;
&lt;li&gt;Foundation Models are powerful for summarization, text extraction, grammar correction, and tone/style transformation, especially with the context window improvements from Private Cloud Compute.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;where-should-a-beginner-start-to-learn-about-aiml-and-what-resources-are-recommended&quot;&gt;Where should a beginner start to learn about AI/ML, and what resources are recommended?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Start with Swift Playgrounds for an introduction to ML using Core ML for image classification.&lt;/li&gt;
&lt;li&gt;The Foundation Models Framework is easy to pick up for prompt engineering and tool additions.&lt;/li&gt;
&lt;li&gt;Xcode now offers a one-click playground launch for quick experimentation with language models.&lt;/li&gt;
&lt;li&gt;For deeper understanding, explore how LLMs work under the hood, including token generation and training.&lt;/li&gt;
&lt;li&gt;Project-based learning, building an app or model, is highly effective.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-it-possible-to-import-everything-from-pytorch-into-core-ai-or-the-apple-ecosystem-and-what-are-the-limitations&quot;&gt;Is it possible to import everything from PyTorch into Core AI or the Apple ecosystem, and what are the limitations?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Most PyTorch models that can be exported using PyTorch APIs will convert straightforwardly to Core AI.&lt;/li&gt;
&lt;li&gt;Core AI supports all core A10 operations; custom operations may require custom lowering or wrapping.&lt;/li&gt;
&lt;li&gt;For performance optimization, custom Metal kernels can be written.&lt;/li&gt;
&lt;li&gt;MLX APIs are similar to PyTorch, making it easy to experiment with models from Hugging Face.&lt;/li&gt;
&lt;li&gt;Many PyTorch models on Hugging Face have already been converted for MLX.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-best-user-experience-when-foundation-models-are-unavailable-eg-older-devices-apple-intelligence-off-low-battery-and-how-can-developers-detect-availability-and-degrade-gracefully&quot;&gt;What is the best user experience when Foundation Models are unavailable (e.g., older devices, Apple Intelligence off, low battery), and how can developers detect availability and degrade gracefully?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use the pre-warm API to load the on-device system language model into memory before user interaction, reducing initial latency.&lt;/li&gt;
&lt;li&gt;An availability API allows checking if the model is supported on the device.&lt;/li&gt;
&lt;li&gt;For unsupported devices, consider alternatives like bringing custom model via Core AI or relying on a server model.&lt;/li&gt;
&lt;li&gt;If Apple Intelligence is off, guide users to enable it rather than showing an error.&lt;/li&gt;
&lt;li&gt;If a button or feature relies on an unavailable model, it’s better to hide it or provide a different experience to avoid user frustration.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-should-developers-migrate-from-core-ml-to-core-ai-and-what-is-the-recommended-approach-for-supporting-older-devices&quot;&gt;How should developers migrate from Core ML to Core AI, and what is the recommended approach for supporting older devices?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Core ML is still supported and useful for models like decision trees or when microsecond performance is critical.&lt;/li&gt;
&lt;li&gt;Core AI is the recommended path for modern generative AI models.&lt;/li&gt;
&lt;li&gt;Consider the user base’s OS update timeline for dropping support for older OS versions.&lt;/li&gt;
&lt;li&gt;Implement a wrapper or use conditional logic to use Core AI on newer OS versions and Core ML on older ones.&lt;/li&gt;
&lt;li&gt;If the app uses generative models, migrating to Core AI is recommended.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-maximum-on-device-local-model-size-that-can-be-used-before-considering-private-cloud-compute-and-what-are-the-considerations-for-ios-and-macos&quot;&gt;What is the maximum on-device local model size that can be used before considering private cloud compute, and what are the considerations for iOS and macOS?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;On iOS, it’s generally recommended to keep models below 2GB to avoid stressing the system and to be a good platform citizen.&lt;/li&gt;
&lt;li&gt;On macOS, model size is more flexible and depends on available memory; profiling the app is key.&lt;/li&gt;
&lt;li&gt;Consider available memory within the app and system-wide memory usage.&lt;/li&gt;
&lt;li&gt;Quantization can reduce model size, but evaluate the trade-off between size and accuracy loss.&lt;/li&gt;
&lt;li&gt;For LLMs, a 6-billion parameter model might be pushing the 2GB limit on iOS, depending on quantization.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-should-developers-decide-when-ai-should-assist-the-user-versus-when-it-should-remain-in-the-background&quot;&gt;How should developers decide when AI should assist the user versus when it should remain in the background?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Focus on the fundamental user experience to deliver; AI should enhance, not dictate, the experience.&lt;/li&gt;
&lt;li&gt;Use AI tools strategically to fill functional gaps or provide specific benefits, rather than for the sake of using AI.&lt;/li&gt;
&lt;li&gt;User delight and the overall experience are paramount.&lt;/li&gt;
&lt;li&gt;Experimentation and evaluation can help determine if an AI feature is meaningful and beneficial to users.&lt;/li&gt;
&lt;li&gt;AI should help users achieve their goals more quickly and efficiently without being intrusive or obstructive.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;for-older-iphones-without-apple-intelligence-and-using-a-self-hosted-llm-backend-is-wrapping-the-backend-in-a-custom-language-model-provider-the-recommended-path-on-ios-27&quot;&gt;For older iPhones without Apple Intelligence and using a self-hosted LLM backend, is wrapping the backend in a custom language model provider the recommended path on iOS 27?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, the new Language Model Protocol allows using any model, including custom server models, with a unified Swift API.&lt;/li&gt;
&lt;li&gt;If the custom server model conforms to the OpenAI chat completions web request protocol, developers can use the open-source utilities package for integration.&lt;/li&gt;
&lt;li&gt;This protocol enables seamless integration of system models and custom models within the same app, with conditional logic for model selection.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>Miká Kruschel</author></item><item><title>SwiftData</title><link>https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8017</link><guid isPermaLink="true">https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8017</guid><description>For multiprocess coordination (widgets, app intents), designate one app process as the primary owner of the database and migration.</description><pubDate>Fri, 12 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;swiftdata&quot;&gt;SwiftData&lt;/h1&gt;
&lt;p&gt;Unofficial AI summary of the WWDC26 group lab. May contain mistakes.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/videos/play/wwdc2026/8017&quot;&gt;Watch on Apple Developer&lt;/a&gt; · &lt;a href=&quot;https://kruschel.dev/wwdc26-group-labs-transcripts/wwdc2026-8017.txt&quot;&gt;Raw transcript&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;whats-the-proper-way-to-use-swiftdata-with-widgets-and-app-intents&quot;&gt;What’s the proper way to use SwiftData with widgets and app intents?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;For multiprocess coordination (widgets, app intents), designate one app process as the primary owner of the database and migration.&lt;/li&gt;
&lt;li&gt;Other processes can read and write to the same database file after the primary process has handled migrations.&lt;/li&gt;
&lt;li&gt;Avoid including schema migration plans in widgets and extensions; use the error path to prompt the user to open the main app for migration.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;SampleTrips&lt;/code&gt; app includes a widget that utilizes the group container for data sharing.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-should-developers-approach-large-data-sets-in-swiftdata&quot;&gt;How should developers approach large data sets in SwiftData?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;For a large number of rows, ensure correct indexing for fast database fetches.&lt;/li&gt;
&lt;li&gt;Limit fetch requests and memory usage to prevent out-of-memory errors.&lt;/li&gt;
&lt;li&gt;For very large data items (e.g., images, files), use the &lt;code&gt;externalStorage&lt;/code&gt; attribute to store data in separate files instead of directly in the database.&lt;/li&gt;
&lt;li&gt;When ingesting large data sets, perform insertions in smaller chunks using batch insertion and short-lived model contexts for each batch.&lt;/li&gt;
&lt;li&gt;When using &lt;code&gt;Query&lt;/code&gt; in SwiftUI with large datasets, limit fetches with &lt;code&gt;fetchLimit&lt;/code&gt; and ensure predicates accurately express the desired data. Use Instruments (Hitches, Persistence) to identify performance bottlenecks.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-best-practices-for-creating-sample-data-for-previews-and-testing&quot;&gt;What are the best practices for creating sample data for previews and testing?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use the &lt;code&gt;previewTraits&lt;/code&gt; parameter to seed previews with expressive sample data that covers various UI scenarios.&lt;/li&gt;
&lt;li&gt;Within previews, developers can use &lt;code&gt;Query&lt;/code&gt; to drive the view with sample data.&lt;/li&gt;
&lt;li&gt;For migration testing, build a corpus of previous store versions to ensure all previously shipped models can migrate successfully.&lt;/li&gt;
&lt;li&gt;Consider using agentic programming for generating diverse sample data instances.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;when-should-a-developer-choose-resultsobserver-over-query&quot;&gt;When should a developer choose &lt;code&gt;ResultsObserver&lt;/code&gt; over &lt;code&gt;Query&lt;/code&gt;?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ResultsObserver&lt;/code&gt; is intended for observable fetching outside of a SwiftUI view, such as in a view model.&lt;/li&gt;
&lt;li&gt;Both &lt;code&gt;ResultsObserver&lt;/code&gt; and &lt;code&gt;Query&lt;/code&gt; have similar performance characteristics under the hood.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ResultsObserver&lt;/code&gt; simplifies handling data updates by observing changes directly, removing the need for manual notification listening and re-fetching.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HistoryObserver&lt;/code&gt; (part of &lt;code&gt;ResultsObserver&lt;/code&gt;) can observe changes from a specific point in time and is useful for replication or keeping other systems up-to-date.&lt;/li&gt;
&lt;li&gt;Filter &lt;code&gt;HistoryObserver&lt;/code&gt; to &lt;strong&gt;local writes only&lt;/strong&gt; when replicating — ignore remote-server writes to avoid echo loops.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ResultsObserver&lt;/code&gt; can be combined with &lt;code&gt;ObservableObject&lt;/code&gt; in AppKit and UIKit to update non-SwiftUI views efficiently.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-are-sums-and-averages-handled-in-swiftdata-without-loading-all-data-into-ram&quot;&gt;How are sums and averages handled in SwiftData without loading all data into RAM?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;SwiftData currently lacks direct equivalents to Core Data’s &lt;code&gt;NSExpression&lt;/code&gt; for on-disk calculations. Data often needs to be loaded into RAM for such operations.&lt;/li&gt;
&lt;li&gt;For min/max calculations, a fetch with &lt;code&gt;fetchLimit&lt;/code&gt; of one and a sort descriptor can be used.&lt;/li&gt;
&lt;li&gt;File feedback reports with specific use cases are encouraged to drive future API design for these types of calculations.&lt;/li&gt;
&lt;li&gt;Consider using coexistence: a Core Data stack and a SwiftData stack can point to the same data store, allowing developers to leverage Core Data for unsupported calculations.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;whats-the-best-way-to-construct-view-state-for-populating-non-optional-attributes-when-adding-a-new-model-object&quot;&gt;What’s the best way to construct view state for populating non-optional attributes when adding a new model object?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;If a SwiftData model has non-optional properties, ensure they are set in the initializer for persistence.&lt;/li&gt;
&lt;li&gt;For views rendering a single object, fetch or find the data in a parent view. Only instantiate the subview if the object exists, otherwise display a placeholder.&lt;/li&gt;
&lt;li&gt;Alternatively, use a &lt;code&gt;Query&lt;/code&gt; with &lt;code&gt;fetchLimit&lt;/code&gt; of one and handle the logic for zero or one object in the view.&lt;/li&gt;
&lt;li&gt;A cleaner approach is to fetch the single model in a parent view using a &lt;code&gt;ModelContext&lt;/code&gt;. If it doesn’t exist, create it before presenting the view. This avoids showing an empty list and handles creation logic outside the view.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-swiftdata--cloudkit-adopt-an-app-group-or-schema-version-without-losing-data&quot;&gt;How can SwiftData + CloudKit adopt an app group or schema version without losing data?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Developers can add a version schema at any time.&lt;/li&gt;
&lt;li&gt;To move to an app group container, developers will likely need to copy data from the old container to the new one, as the group container resides in a different directory.&lt;/li&gt;
&lt;li&gt;If using the default model configuration, SwiftData will move the data for developers when moving to an app group. When a URL was specified previously, move the data manually to move it manually.&lt;/li&gt;
&lt;li&gt;Start version schemas with the current version and progressively build them up. Developers can add previous versions later to pick up those stores during migration.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-does-using-an-app-group-for-the-swiftdata-local-store-affect-cloudkit-development-and-production-environments&quot;&gt;How does using an app group for the SwiftData local store affect CloudKit development and production environments?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ensure the CloudKit entitlement used is appropriate for all apps reading from the app group, as they will be syncing to the same CloudKit container.&lt;/li&gt;
&lt;li&gt;If do not want data in the app group to sync to CloudKit, use a separate model configuration and data store for syncing.&lt;/li&gt;
&lt;li&gt;Avoid giving widgets or extensions the CloudKit entitlement, as this would require them to sync and can impact performance due to their limited runtime.&lt;/li&gt;
&lt;li&gt;Widget extensions have different system policies for network usage and syncing compared to full apps, often throttling network activity to conserve battery.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;when-evolving-the-schema-in-xcode-during-development-do-i-need-to-do-anything-to-avoid-creating-duplicates-in-the-local-store-between-two-apps-writing-to-the-same-cloudkit&quot;&gt;When evolving the schema in Xcode during development, do I need to do anything to avoid creating duplicates in the local store between two apps writing to the same CloudKit?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ensure schemas are aligned across all apps to prevent competing migrations.&lt;/li&gt;
&lt;li&gt;During development, flip environments to production on all apps to test schema synchronization in a production-like setting.&lt;/li&gt;
&lt;li&gt;Syncing is complex; use logs and sysdiagnose for debugging.&lt;/li&gt;
&lt;li&gt;Be mindful of autosave behavior; ensure saves are committed, especially when force quitting apps. Backgrounding apps in the simulator can simulate customer behavior.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;whats-the-most-performant-way-to-count-swiftdata-objects-without-querying-them-in-views&quot;&gt;What’s the most performant way to count SwiftData objects without querying them in views?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;fetchCount&lt;/code&gt; on the &lt;code&gt;ModelContext&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;In performance-sensitive areas, manually fetching into a cached array can offer more control than &lt;code&gt;@Query&lt;/code&gt; if SwiftUI’s view lifecycle triggers excessive refetches.&lt;/li&gt;
&lt;li&gt;Use Instruments (SwiftUI and Persistence) to understand why SwiftUI re-initializes views and triggers fetches.&lt;/li&gt;
&lt;li&gt;Breaking down views into smaller components with fewer dependencies can reduce unnecessary query executions.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ResultsObserver&lt;/code&gt; can provide an observable experience for managing manual fetches.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HistoryObserver&lt;/code&gt; can be used to determine when manual fetches are necessary based on specific property changes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fetchIdentifier&lt;/code&gt; allows fetching only object identifiers without fetching the full model.&lt;/li&gt;
&lt;li&gt;For queries outside the view hierarchy (e.g., background actors), a direct &lt;code&gt;fetch&lt;/code&gt; is appropriate instead of &lt;code&gt;@Query&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;sectionBy&lt;/code&gt; modifier on &lt;code&gt;ResultsObserver&lt;/code&gt; and &lt;code&gt;Query&lt;/code&gt; (via key path) sections data directly without in-memory grouping.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-cloudkit-synchronization-be-sped-up-between-devices&quot;&gt;How can CloudKit synchronization be sped up between devices?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Test thoroughly and examine logs for verbose information routed through Core Data.&lt;/li&gt;
&lt;li&gt;Be aware of platform-specific system policies that may throttle network usage (e.g., watches on cellular, devices under heavy load/heat).&lt;/li&gt;
&lt;li&gt;Backgrounding and foregrounding apps can sometimes encourage more aggressive syncing during testing.&lt;/li&gt;
&lt;li&gt;Check entitlements carefully, as incorrect or mismatched entitlements between debug and release configurations can cause sync issues.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;sysdiagnose&lt;/code&gt; from all devices and file feedback reports for detailed analysis of sync problems.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;autosave&lt;/code&gt; can batch changes, but ensure saves are committed, especially when testing rapidly. Force quitting can prevent autosave.&lt;/li&gt;
&lt;li&gt;Backgrounding apps in the simulator can mimic customer sync behavior.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;whats-the-best-way-to-store-enums-including-those-that-conform-to-codable-with-associated-values-in-swiftdata&quot;&gt;What’s the best way to store enums, including those that conform to &lt;code&gt;Codable&lt;/code&gt; with associated values, in SwiftData?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;If enum values are &lt;code&gt;Codable&lt;/code&gt;, SwiftData can persist them.&lt;/li&gt;
&lt;li&gt;New in recent releases: &lt;code&gt;ResultsObserver&lt;/code&gt; and &lt;code&gt;Query&lt;/code&gt; support predicates with raw representable enumerations.&lt;/li&gt;
&lt;li&gt;For enums with associated values that are difficult to encode, use the &lt;code&gt;.codable&lt;/code&gt; flag with the &lt;code&gt;attribute&lt;/code&gt; macro. This leverages existing &lt;code&gt;Codable&lt;/code&gt; conformance for persistence.&lt;/li&gt;
&lt;li&gt;If developers need to query or sort by enum values, consider modeling them as SwiftData models with relationships rather than relying solely on &lt;code&gt;Codable&lt;/code&gt;. This allows for full predicate and sorting capabilities.&lt;/li&gt;
&lt;li&gt;For types that are not directly owned or modifiable (e.g., &lt;code&gt;MapKit&lt;/code&gt; types, &lt;code&gt;Measurement&lt;/code&gt;), using &lt;code&gt;Codable&lt;/code&gt; is a practical approach.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-best-practices-for-using-multiple-model-contexts-when-does-it-make-sense-to-split-work-across-separate-contexts&quot;&gt;What are the best practices for using multiple model contexts? When does it make sense to split work across separate contexts?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The decision depends on the objective. For background work without UI implications, split tasks to keep them coherent within a transaction.&lt;/li&gt;
&lt;li&gt;Model contexts represent a working set; changes are saved in a single transaction. Minimize cross-coordination between contexts to reduce friction and serialization overhead.&lt;/li&gt;
&lt;li&gt;Split work to allow for independent execution, minimizing the need for contexts to communicate or coordinate.&lt;/li&gt;
&lt;li&gt;On most platforms (phones, iPads, watches), avoid excessive concurrency. The NAND system is often the primary bottleneck.&lt;/li&gt;
&lt;li&gt;Start by measuring performance and benchmarking.&lt;/li&gt;
&lt;li&gt;SQLite databases support multiple readers concurrently with a single writer.&lt;/li&gt;
&lt;li&gt;Be cautious of diminishing returns with increased concurrency; it can lead to higher memory usage and I/O, and synchronization costs can outweigh benefits.&lt;/li&gt;
&lt;li&gt;Short-lived model contexts help keep memory footprints small by processing and saving data incrementally. Avoid hydrating large object graphs into memory.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-do-i-know-if-i-need-to-paginate-my-queries-instead-of-fetching-all-records-of-a-given-type&quot;&gt;How do I know if I need to paginate my queries instead of fetching all records of a given type?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use Instruments (Hitches, Persistence) to identify UI hitches and excessive object loading.&lt;/li&gt;
&lt;li&gt;Set a &lt;code&gt;fetchLimit&lt;/code&gt; on the &lt;code&gt;Query&lt;/code&gt; when developers only need a subset of data for a view.&lt;/li&gt;
&lt;li&gt;Lazy stacks with an &lt;code&gt;onAppear&lt;/code&gt; modifier on a progress spinner can trigger fetching more data as the user scrolls.&lt;/li&gt;
&lt;li&gt;Restricting fetches to what’s needed for the current view prevents performance degradation and the need for manual pagination.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-it-a-good-idea-to-combine-swiftdata-with-a-cloud-backend-for-sync-or-is-that-an-anti-pattern&quot;&gt;Is it a good idea to combine SwiftData with a cloud backend for sync, or is that an anti-pattern?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;It’s not an anti-pattern. SwiftData can serve as a local cache for the cloud backend data.&lt;/li&gt;
&lt;li&gt;Developers can implement a custom data store (e.g., JSON store) to work with the existing storage mechanism.&lt;/li&gt;
&lt;li&gt;Leverage &lt;code&gt;HistoryObserver&lt;/code&gt; to identify changes and sync them back to the cloud backend.&lt;/li&gt;
&lt;li&gt;Using SwiftData for the local cache reduces the need to reimplement persistence logic.&lt;/li&gt;
&lt;li&gt;Custom data stores allow storing data in any format and adhering to specific security models.&lt;/li&gt;
&lt;li&gt;Developers can start with a JSON store and gradually migrate to a SQLite store as the app evolves.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;whats-the-proper-way-to-know-if-a-database-migration-is-required-or-not&quot;&gt;What’s the proper way to know if a database migration is required or not?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;If a widget attempts to load an unversioned schema, it will error out, indicating a migration is needed.&lt;/li&gt;
&lt;li&gt;Use user defaults to store the migrated version number. Widgets can then use this version to open the persistent container.&lt;/li&gt;
&lt;li&gt;Widgets and extensions should not perform migrations due to limited runtime resources.&lt;/li&gt;
&lt;li&gt;For the main app, developers can estimate migration progress by calculating the number of stages and overriding the &lt;code&gt;didMigrate&lt;/code&gt; handler for custom migration stages.&lt;/li&gt;
&lt;li&gt;Consider the user experience during migration; provide informative updates rather than just a loading spinner.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;whats-the-best-way-to-do-grouped-queries-like-grouping-results-by-one-property-of-a-model-and-then-displaying-the-results-in-sections&quot;&gt;What’s the best way to do grouped queries, like grouping results by one property of a model and then displaying the results in sections?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;ResultsObserver&lt;/code&gt; and &lt;code&gt;Query&lt;/code&gt; APIs now support sectioning by providing a key path to a persistent property.&lt;/li&gt;
&lt;li&gt;This allows data to be sectioned directly, eliminating the need for in-memory grouping.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;SampleTrips&lt;/code&gt; app demonstrates this capability, showing how to build UIs with grouped data.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;whats-the-recommended-way-to-handle-concurrency-when-a-model-actor-needs-to-return-model-data&quot;&gt;What’s the recommended way to handle concurrency when a model actor needs to return model data?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Model objects themselves are not &lt;code&gt;Sendable&lt;/code&gt; due to their reference-based nature and graph interactions within the &lt;code&gt;ModelContext&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Extract the necessary data (e.g., persistent identifier, structs, dictionaries) to pass to other actors.&lt;/li&gt;
&lt;li&gt;Avoid passing relationships or entire object graphs across actor boundaries, as this can lead to incomplete hydration or unexpected behavior.&lt;/li&gt;
&lt;li&gt;Be mindful of the strict &lt;code&gt;Sendable&lt;/code&gt; boundary and the cost of communication across concurrency domains.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>Miká Kruschel</author></item><item><title>App Store Connect</title><link>https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8010</link><guid isPermaLink="true">https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8010</guid><description>Automate build uploads, making builds available to testers, and processing feedback via APIs for end-to-end development automation.</description><pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;app-store-connect&quot;&gt;App Store Connect&lt;/h1&gt;
&lt;p&gt;Unofficial AI summary of the WWDC26 group lab. May contain mistakes.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/videos/play/wwdc2026/8010&quot;&gt;Watch on Apple Developer&lt;/a&gt; · &lt;a href=&quot;https://kruschel.dev/wwdc26-group-labs-transcripts/wwdc2026-8010.txt&quot;&gt;Raw transcript&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-are-the-most-overlooked-app-store-connect-apis-or-capabilities-developers-should-use&quot;&gt;What are the most overlooked App Store Connect APIs or capabilities developers should use?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Automate build uploads, making builds available to testers, and processing feedback via APIs for end-to-end development automation.&lt;/li&gt;
&lt;li&gt;Combine TestFlight feedback APIs with webhooks to automatically generate tickets in the ticketing system.&lt;/li&gt;
&lt;li&gt;Utilize the Power and Performance API to download reports on app performance, including storage and CPU usage.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-should-apps-without-audio-signal-accessibility-for-hearing-impaired-users&quot;&gt;How should apps without audio signal accessibility for hearing-impaired users?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Accurately answer accessibility questions based on the app’s capabilities.&lt;/li&gt;
&lt;li&gt;If the app has no sound, do not claim it has captions.&lt;/li&gt;
&lt;li&gt;Use the app description and app previews to communicate accessibility features and value propositions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-most-common-reasons-subscription-apps-get-rejected-on-their-first-review-and-what-are-pro-tips-for-new-developers&quot;&gt;What are the most common reasons subscription apps get rejected on their first review, and what are pro tips for new developers?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Common Rejection Reasons:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Insufficient preparation and testing on devices.&lt;/li&gt;
&lt;li&gt;Not addressing crashes or ensuring production-ready systems.&lt;/li&gt;
&lt;li&gt;Failing to provide necessary login or demo credentials for subscription-based content.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pro Tips for Submission:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Thoroughly test the app on devices, exercising all functionality.&lt;/li&gt;
&lt;li&gt;Ensure in-app purchases and subscription systems are production-ready.&lt;/li&gt;
&lt;li&gt;Use the new &lt;strong&gt;enhanced IAP submission experience&lt;/strong&gt; for clearer dialogue with App Review.&lt;/li&gt;
&lt;li&gt;Use App Review Notes to guide reviewers, including login credentials for paywalled content.&lt;/li&gt;
&lt;li&gt;Provide relevant information and notes that address potential reviewer questions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pro Tips for Following Up After Rejection:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Take time to write a detailed response in App Store Connect, not just submit an update.&lt;/li&gt;
&lt;li&gt;Use the response to have a dialogue, explain the app’s functionality, and ask clarifying questions about the rejection.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;will-app-store-connect-analytics-show-impressions-retention-metrics-and-how-often-a-user-revisits-the-cancel-flow-for-retention-messages&quot;&gt;Will App Store Connect analytics show impressions, retention metrics, and how often a user revisits the cancel flow for retention messages?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, App Store Connect will provide data on retention messaging performance.&lt;/li&gt;
&lt;li&gt;Developers can measure how many users saw the retention messaging page, clicked cancel, and continued to stay subscribed.&lt;/li&gt;
&lt;li&gt;This data allows developers to test different messages and offers to see what resonates most with users.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-most-common-security-mistakes-developers-make-when-implementing-app-store-connect-api-integrations&quot;&gt;What are the most common security mistakes developers make when implementing App Store Connect API integrations?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Key Security Practices:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Do not hardcode API keys into the repository or ship them in client applications.&lt;/li&gt;
&lt;li&gt;Store API keys server-side or in the &lt;strong&gt;Keychain&lt;/strong&gt; — never in client apps or source control.&lt;/li&gt;
&lt;li&gt;Manage private keys responsibly and revoke them if compromised or when a service is no longer used.&lt;/li&gt;
&lt;li&gt;Be especially careful when integrating with third parties; only grant necessary permissions and revoke keys when the integration ends.&lt;/li&gt;
&lt;li&gt;Use the Users and Access API to monitor account access and compare it against internal systems.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Private keys are for private use only and should not be shared.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Create keys for specific use cases and revoke them afterward.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;in-app-store-analytics-is-there-a-way-to-see-how-many-people-updated-organically-versus-in-the-background-auto-update-vs-manual&quot;&gt;In App Store Analytics, is there a way to see how many people updated organically versus in the background (auto-update vs. manual)?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, this breakdown is available in the App Store Connect analytics reports.&lt;/li&gt;
&lt;li&gt;Developers can download the analytics reports and find a column that specifically breaks down auto-updates versus manual updates.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;for-large-companies-with-many-apps-is-there-a-way-to-automate-uploading-only-a-few-apps-from-ci-without-a-team-api-key-granting-access-to-all-apps&quot;&gt;For large companies with many apps, is there a way to automate uploading only a few apps from CI without a team API key granting access to all apps?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A general access team API key grants access to all apps on the account.&lt;/li&gt;
&lt;li&gt;Developers can create an API key per user of App Store Connect, which is tied to that user’s level of access.&lt;/li&gt;
&lt;li&gt;This individual key will have the same permissions as the user in the App Store Connect UI, allowing for more granular control.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;can-universal-purchase-apps-use-different-names-or-subtitles-per-platform&quot;&gt;Can universal purchase apps use different names or subtitles per platform?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The name and subtitle are shared across all platforms for a universal purchase app.&lt;/li&gt;
&lt;li&gt;Description, however, can differ per platform. Use the description to tailor content, such as omitting NFC mentions for a tvOS target while including them for iOS.&lt;/li&gt;
&lt;li&gt;App previews are also a good way to showcase platform-specific functionality.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;does-the-new-retention-workflow-support-localization-and-should-retention-messages-be-localized-to-match-app-localizations&quot;&gt;Does the new retention workflow support localization, and should retention messages be localized to match app localizations?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, localization is supported for retention messages.&lt;/li&gt;
&lt;li&gt;It is highly recommended to localize retention messages to ensure consistency with the app’s localizations and provide a cohesive user experience.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-best-practices-for-app-store-app-descriptions-especially-when-many-popular-apps-use-dense-copy&quot;&gt;What are the best practices for App Store app descriptions, especially when many popular apps use dense copy?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Focus on what users might be interested in and what the app offers.&lt;/li&gt;
&lt;li&gt;Tailor the message for the specific audience.&lt;/li&gt;
&lt;li&gt;Utilize features like Custom Product Pages to drive different audiences to different copies.&lt;/li&gt;
&lt;li&gt;Consider using Product Page Optimization to test different description variations.&lt;/li&gt;
&lt;li&gt;Leverage custom images and videos for product page headers and search results to convey information visually.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-best-practices-for-using-testflight-for-internal-team-testing-and-how-about-external-testing&quot;&gt;What are the best practices for using TestFlight for internal team testing, and how about external testing?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Internal Testing:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Use internal TestFlight for initial testing within the team, especially for QA teams distributing builds regularly.&lt;/li&gt;
&lt;li&gt;Create different internal groups for specific teams (e.g., QA, localization) and distribute tailored builds to them.&lt;/li&gt;
&lt;li&gt;Be selective about builds provided to leadership or for early feedback.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;External Testing:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Submit to the beta app review process to ensure trustworthiness and safety.&lt;/li&gt;
&lt;li&gt;Developers can have up to 10,000 testers.&lt;/li&gt;
&lt;li&gt;Share a link to invite testers; they must download the TestFlight app for security and privacy.&lt;/li&gt;
&lt;li&gt;Find testers through forums relevant to the app’s niche, focusing on seeking feedback rather than selling.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-best-practices-for-app-store-connect-api-keys-in-tooling-and-automation&quot;&gt;What are best practices for App Store Connect API keys in tooling and automation?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;API keys should be kept on the server only; do not embed them in client applications.&lt;/li&gt;
&lt;li&gt;Keys have no expiration date, so manage them carefully.&lt;/li&gt;
&lt;li&gt;For team keys, consider the role and assign lower-level permissions for read-only access if possible.&lt;/li&gt;
&lt;li&gt;Use individual keys for testing and experimentation before moving to a team-wide key for production automation.&lt;/li&gt;
&lt;li&gt;Adhere to the principle of least privilege.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-there-a-way-to-use-the-same-product-name-on-the-app-store-for-a-mac-app-and-iosapple-vision-pro-apps-combo-if-they-have-different-bundle-ids&quot;&gt;Is there a way to use the same product name on the App Store for a Mac app and iOS/Apple Vision Pro apps combo if they have different bundle IDs?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;No, this has not changed. You cannot use the same product name for apps with different bundle IDs.&lt;/li&gt;
&lt;li&gt;The recommendation is to use universal purchase, which would consolidate these apps under one bundle ID and accomplish the goal.&lt;/li&gt;
&lt;li&gt;This approach offers benefits and aligns with the ecosystem’s evolution towards unified development.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-should-first-time-app-review-submissions-get-right-for-auth-and-api-keys&quot;&gt;What should first-time App Review submissions get right for auth and API keys?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Thoroughly test the app, including third-party functionality and APIs.&lt;/li&gt;
&lt;li&gt;Ensure the services are ready to receive production traffic and scale.&lt;/li&gt;
&lt;li&gt;If managing user API keys, uphold privacy by managing them in a privacy-friendly way.&lt;/li&gt;
&lt;li&gt;Provide demo account information and credentials in App Review Notes so reviewers can access and test all app functionality.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-purchase-restoration-be-validated-when-transitioning-a-paid-app-to-freemium&quot;&gt;How can purchase restoration be validated when transitioning a paid app to freemium?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use the StoreKit 2 &lt;code&gt;appTransaction&lt;/code&gt; API to see the original app version a customer purchased.&lt;/li&gt;
&lt;li&gt;TestFlight detects app version changes but does &lt;strong&gt;not&lt;/strong&gt; test actual purchases — use sandbox accounts in App Store Connect for purchase testing.&lt;/li&gt;
&lt;li&gt;Developers can also create sandbox accounts in App Store Connect for more complex sandbox management and testing scenarios.&lt;/li&gt;
&lt;li&gt;Consider having one account download the App Store version and then upgrade to the freemium version being tested in TestFlight.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-do-developers-publish-their-first-ios-app&quot;&gt;How do developers publish their first iOS app?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Explore the Apple Developer website for tutorials, videos, documentation, and WWDC sessions.&lt;/li&gt;
&lt;li&gt;Consult the App Store Connect Help Guide for step-by-step instructions on navigating the UI.&lt;/li&gt;
&lt;li&gt;Follow the Apple Developer Pathway, a guided process for getting the app on the store.&lt;/li&gt;
&lt;li&gt;Refer to detailed guides for each page and action available in App Store Connect.&lt;/li&gt;
&lt;li&gt;Watch the “Getting Started with TestFlight” tech talk for guidance on building, testing, and submitting.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;once-an-app-is-approved-how-can-i-increase-its-visibility&quot;&gt;Once an app is approved, how can I increase its visibility?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Provide compelling creative assets, including more screenshots and previews.&lt;/li&gt;
&lt;li&gt;Create In-App Events to highlight timely content or activities.&lt;/li&gt;
&lt;li&gt;Utilize Custom Product Pages and tie them to specific keywords for increased relevance.&lt;/li&gt;
&lt;li&gt;Submit the app for a feature nomination to the editorial team for potential placement on the Today tab.&lt;/li&gt;
&lt;li&gt;Share “Shareable Moments” for featured apps or new version releases to promote them.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;do-i-need-a-different-binary-for-every-platform-watchos-ios-etc-for-a-universal-app&quot;&gt;Do I need a different binary for every platform (watchOS, iOS, etc.) for a universal app?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;It depends on which platforms to distribute to and if the app is eligible for Apple Silicon.&lt;/li&gt;
&lt;li&gt;You will need distinct metadata for each platform.&lt;/li&gt;
&lt;li&gt;Developers can start with an iOS binary and then make it available on macOS or visionOS.&lt;/li&gt;
&lt;li&gt;Developers can create platform-specific binaries (e.g., visionOS, macOS) later to leverage native features, and users will update to those.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;for-review-notes-if-an-app-is-localized-to-multiple-languages-should-the-notes-still-be-in-english-or-can-they-be-in-the-developers-native-language&quot;&gt;For review notes, if an app is localized to multiple languages, should the notes still be in English, or can they be in the developer’s native language?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;While English is often preferred, App Review reviewers have a wide range of language skills and can often review apps in the developer’s primary language.&lt;/li&gt;
&lt;li&gt;It is not an absolute requirement for review notes to be in English.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-new-app-store-connect-workflows-introduced-this-year-should-developers-revisit-even-if-they-already-have-mature-automation-in-place&quot;&gt;What new App Store Connect workflows introduced this year should developers revisit, even if they already have mature automation in place?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Explore new visualizations and over 100 new metrics in the App Store Connect web UI for subscription and in-app purchase analytics.&lt;/li&gt;
&lt;li&gt;Investigate the submission of Game Center entities (leaderboards, etc.).&lt;/li&gt;
&lt;li&gt;Review updates to In-App Purchase APIs and the introduction of Offer Code APIs for consumables and non-consumables.&lt;/li&gt;
&lt;li&gt;Consider the Build Delivery API for automating build submission and updates.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-most-common-reasons-for-rejection-on-the-app-store&quot;&gt;What are the most common reasons for rejection on the App Store?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bugs and Crashes:&lt;/strong&gt; Insufficient testing on devices (not just simulators).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Incomplete Information:&lt;/strong&gt; Missing demo credentials or functionality details in App Review Notes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inadequate Testing:&lt;/strong&gt; Not thoroughly testing via internal and external TestFlight, and not incorporating feedback.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Submission Completeness:&lt;/strong&gt; Submissions that are not detailed or complete.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guideline Violations:&lt;/strong&gt; Not adhering to specific sections of the App Review Guidelines, especially for categories like Kids Apps or apps with crypto content.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Insufficient Testing:&lt;/strong&gt; Relying solely on Xcode Simulator and not testing on multiple physical devices or with external testers.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;which-validations-only-run-after-testflight-or-app-store-connect-upload&quot;&gt;Which validations only run after TestFlight or App Store Connect upload?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Validations occur throughout the pipeline, and efforts are ongoing to provide feedback as early as possible.&lt;/li&gt;
&lt;li&gt;Xcode offers validation before delivery, and warnings are provided to guide developers.&lt;/li&gt;
&lt;li&gt;Uploading frequently (continuous delivery) is a good way to identify issues early.&lt;/li&gt;
&lt;li&gt;The goal is to move validation checks earlier in the development workflow.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-there-a-way-to-organize-testflight-builds-into-streams-or-groups-for-example-keeping-a-major-new-feature-separate-from-regular-builds&quot;&gt;Is there a way to organize TestFlight builds into streams or groups, for example, keeping a major new feature separate from regular builds?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, developers can organize testers and builds into groups for both internal and external TestFlight.&lt;/li&gt;
&lt;li&gt;Create groups based on use cases (e.g., development team, QA team, localization team, power users).&lt;/li&gt;
&lt;li&gt;Developers can create a group for a specific upcoming feature (e.g., version 2.0) and another for bug fixes (e.g., 1.1).&lt;/li&gt;
&lt;li&gt;This allows for parallel development and testing of different app versions simultaneously.&lt;/li&gt;
&lt;li&gt;Xcode Cloud can automate this process by distributing builds to specific groups based on branches.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-there-a-technical-or-policy-reason-for-the-few-day-delay-on-price-changes-for-in-app-purchases-or-subscriptions-including-when-lowering-the-price&quot;&gt;Is there a technical or policy reason for the few-day delay on price changes for in-app purchases or subscriptions, including when lowering the price?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The delay is to ensure that price changes go live everywhere at the same time, accounting for global time zones and propagation across systems.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-should-country-specific-app-listings-be-merged-when-features-differ&quot;&gt;How should country-specific app listings be merged when features differ?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Choose one app listing to be the “flagship” and update the other listings to direct users to download the new primary app.&lt;/li&gt;
&lt;li&gt;Notify users about the change and provide a transition period.&lt;/li&gt;
&lt;li&gt;Consider a final release that informs users the app is going away and directs them to the new app.&lt;/li&gt;
&lt;li&gt;Keep the old code for a period to potentially address security updates or bug fixes for users who haven’t migrated.&lt;/li&gt;
&lt;li&gt;Use analytics to track user migration between app versions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-features-are-provided-by-the-new-app-store-dashboard-with-analytics-and-how-can-developers-maximize-value&quot;&gt;What features are provided by the new App Store dashboard with analytics, and how can developers maximize value?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The biggest update to App Analytics in over 10 years, adding over 100 new metrics, primarily for in-app purchases and subscriptions.&lt;/li&gt;
&lt;li&gt;Data can be tied back to subscriptions, showing the full customer journey from download to renewal.&lt;/li&gt;
&lt;li&gt;Visualizations help identify conversion rates, retention, and “soft spots” in the business.&lt;/li&gt;
&lt;li&gt;New benchmarks allow developers to compare their performance against industry standards.&lt;/li&gt;
&lt;li&gt;Utilize the new guide and videos for detailed information and resources.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;any-tips-for-creating-a-successful-featuring-nomination-submission&quot;&gt;Any tips for creating a successful featuring nomination submission?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The app should be interesting, potentially novel, or do something new.&lt;/li&gt;
&lt;li&gt;Apps with great art and compelling visuals have a better chance of standing out.&lt;/li&gt;
&lt;li&gt;New assets for product pages can also be used in featuring placements.&lt;/li&gt;
&lt;li&gt;Consider the story behind the app and its history.&lt;/li&gt;
&lt;li&gt;Feature nominations are not just for initial launches; updates and roadmaps can also be nominated.&lt;/li&gt;
&lt;li&gt;Developers can try multiple times if the initial nomination is not successful.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-least-privileged-app-store-connect-api-role-for-third-party-tools&quot;&gt;What is the least-privileged App Store Connect API role for third-party tools?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The “Sales” role generally has the lowest level of functions and is recommended for read-only access.&lt;/li&gt;
&lt;li&gt;The “Developer” role allows uploading builds and using internal TestFlight.&lt;/li&gt;
&lt;li&gt;The “Marketing” role allows changes to metadata, product pages, and in-app events, but not app releases.&lt;/li&gt;
&lt;li&gt;These lower-permission roles are the most recommended for API keys used by third-party tools.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;any-advice-on-fetching-live-or-last-24-hours-of-app-store-connect-data-via-the-api-given-the-ui-shows-this-but-the-api-only-updates-daily-or-provides-aggregates&quot;&gt;Any advice on fetching live or last 24 hours of App Store Connect data via the API, given the UI shows this but the API only updates daily or provides aggregates?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Currently, the UI is the place to view the last 24 hours of sales data.&lt;/li&gt;
&lt;li&gt;The API updates on a daily basis.&lt;/li&gt;
&lt;li&gt;While the data is the same, the cadence of acquisition differs between the UI and the API for sales and trends data.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-organic-search-custom-product-page-impact-be-measured-without-keyword-level-data&quot;&gt;How can organic search custom product page impact be measured without keyword-level data?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;In App Analytics, developers can see how well a custom product page is performing overall.&lt;/li&gt;
&lt;li&gt;Filter by “Source Type” and select “App Store Search” to see performance from organic search.&lt;/li&gt;
&lt;li&gt;When developers are not running Apple Ads, this will represent the organic search traffic.&lt;/li&gt;
&lt;li&gt;If running ads, consider creating separate custom product pages for ads and organic search to differentiate the traffic.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-there-a-way-to-see-the-rollout-progress-of-the-current-release-while-a-new-release-is-being-prepared-and-submitted-to-review&quot;&gt;Is there a way to see the rollout progress of the current release while a new release is being prepared and submitted to review?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, in App Store Connect, navigate to the version page and click into “Phased Release Rollout” to see the current day and progress.&lt;/li&gt;
&lt;li&gt;Developers can have up to two versions in App Store Connect per platform: the one ready for distribution and the one being prepared.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-options-are-open-to-developers-building-geospatial-augmented-reality-games-in-terms-of-passing-app-review-especially-if-a-full-working-demo-is-difficult-to-create&quot;&gt;What options are open to developers building geospatial augmented reality games in terms of passing app review, especially if a full working demo is difficult to create?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;If the review requires being in a specific location, include a recording of the app in action with the submission.&lt;/li&gt;
&lt;li&gt;Ensure the app provides functionality for users outside the specific geographic location (e.g., outside the UK).&lt;/li&gt;
&lt;li&gt;Utilize TestFlight for internal and external testing to get feedback and ensure the geo-experiences are acceptable to App Review.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>Miká Kruschel</author></item><item><title>Apple Intelligence</title><link>https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8011</link><guid isPermaLink="true">https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8011</guid><description>WWDC videos, documentation, sample apps, and migration guides are primary resources.</description><pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;apple-intelligence&quot;&gt;Apple Intelligence&lt;/h1&gt;
&lt;p&gt;Unofficial AI summary of the WWDC26 group lab. May contain mistakes.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/videos/play/wwdc2026/8011&quot;&gt;Watch on Apple Developer&lt;/a&gt; · &lt;a href=&quot;https://kruschel.dev/wwdc26-group-labs-transcripts/wwdc2026-8011.txt&quot;&gt;Raw transcript&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Related Labs: &lt;a href=&quot;https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8016&quot;&gt;Machine Learning &amp;#x26; AI&lt;/a&gt;, &lt;a href=&quot;https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8121&quot;&gt;Coding Intelligence, Machine Learning &amp;#x26; AI&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-are-the-most-useful-apple-resources-for-learning-and-applying-new-apis-and-design-changes&quot;&gt;What are the most useful Apple resources for learning and applying new APIs and design changes?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;WWDC videos, documentation, sample apps, and &lt;strong&gt;migration guides&lt;/strong&gt; are primary resources.&lt;/li&gt;
&lt;li&gt;The documentation includes a dedicated sample section and technical articles.&lt;/li&gt;
&lt;li&gt;Sessions often demonstrate sample apps, showing how they are built and used.&lt;/li&gt;
&lt;li&gt;Documentation for App Intents and Foundation Models provides usage guidance and benefits.&lt;/li&gt;
&lt;li&gt;Previous WWDC materials are valuable for foundational knowledge.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-do-i-integrate-with-siri-when-no-app-schema-fits-my-entities&quot;&gt;How do I integrate with Siri when no app schema fits my entities?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Utilize existing app schemas by picking and choosing actions that best match the app’s capabilities.&lt;/li&gt;
&lt;li&gt;Combine schemas with custom &lt;code&gt;App Intents&lt;/code&gt; for functionality outside predefined schemas.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;App Intents&lt;/code&gt; make actions available in Shortcuts, Spotlight, and more.&lt;/li&gt;
&lt;li&gt;For new Siri AI integration, adopting an app schema is required.&lt;/li&gt;
&lt;li&gt;Consider the &lt;code&gt;system.search&lt;/code&gt; schema for search-related functionality (e.g., e-commerce, food ordering) to allow Siri integration with the app’s search.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;system.open&lt;/code&gt; schema allows Siri to open donated entities directly in the app.&lt;/li&gt;
&lt;li&gt;If no schemas fit, &lt;code&gt;App Shortcuts&lt;/code&gt; can be used by defining memorable phrases for specific actions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;should-i-use-the-closest-schema-match-or-skip-schemas-when-the-fit-is-imperfect&quot;&gt;Should I use the closest schema match or skip schemas when the fit is imperfect?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;It’s recommended to use the closest related schemas.&lt;/li&gt;
&lt;li&gt;Developers can combine schemas from different domains if the app has diverse capabilities (e.g., calendar and reminders).&lt;/li&gt;
&lt;li&gt;If no schema perfectly fits, consider using &lt;code&gt;App Shortcuts&lt;/code&gt; for specific actions.&lt;/li&gt;
&lt;li&gt;For new Siri AI integration, adopting an app schema is necessary.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-should-app-entities-and-actions-participate-in-agentic-siri&quot;&gt;How should app entities and actions participate in agentic Siri?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Review available schemas and implement those that align with the app’s capabilities.&lt;/li&gt;
&lt;li&gt;Conforming to an entity schema and donating it to Spotlight provides benefits for Siri AI interaction.&lt;/li&gt;
&lt;li&gt;Developers can use Siri AI to ask questions about content or take actions on it using &lt;code&gt;any view annotation API&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Consider the platform’s evolution and how schemas provide a standardized, consistent experience.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;can-an-app-act-as-its-own-orchestrator-and-drive-other-apps-or-does-cross-app-action-still-have-to-route-through-siri-shortcuts&quot;&gt;Can an app act as its own orchestrator and drive other apps, or does cross-app action still have to route through Siri Shortcuts?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A system orchestrator is available that can take action from &lt;code&gt;App Intents&lt;/code&gt; across different apps.&lt;/li&gt;
&lt;li&gt;Privacy and safety are key; data indexed from the app is available to the system, not other apps directly.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;Transferable&lt;/code&gt; API allows developers to control how data is shared between apps.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Transferable&lt;/code&gt; supports bidirectionality, letting developers choose which data to export and import.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;can-third-party-apps-participate-in-multi-turn-siri-conversations&quot;&gt;Can third-party apps participate in multi-turn Siri conversations?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, apps can participate in multi-turn conversations with Siri.&lt;/li&gt;
&lt;li&gt;App schemas enable apps to take actions, ask questions about entities, and handle follow-ups.&lt;/li&gt;
&lt;li&gt;The underlying large language model processes input for more natural user interactions.&lt;/li&gt;
&lt;li&gt;App schemas offer flexibility in how users phrase requests, allowing the model to parse information and select the correct action.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;can-one-app-mix-schemas-from-different-domains&quot;&gt;Can one app mix schemas from different domains?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, it is acceptable to mix and match schemas from different domains.&lt;/li&gt;
&lt;li&gt;The intention is for developers to select schemas that best match their app’s capabilities.&lt;/li&gt;
&lt;li&gt;Schemas, &lt;code&gt;App Shortcuts&lt;/code&gt;, and in-app search can work together to create holistic user experiences.&lt;/li&gt;
&lt;li&gt;Developers should leverage these components based on their understanding of their users and app functionality.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-there-a-practical-time-work-budget-for-foundation-models-during-one-background-wake-if-no-fixed-number-how-should-apps-safely-chunk-work&quot;&gt;Is there a practical time work budget for Foundation Models during one background wake? If no fixed number, how should apps safely chunk work?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;For on-device &lt;code&gt;Foundation Models&lt;/code&gt; running in the foreground, there are no rate limits.&lt;/li&gt;
&lt;li&gt;When running in the background, throttling may occur if the system is under heavy load.&lt;/li&gt;
&lt;li&gt;Apps should catch &lt;code&gt;rate limited errors&lt;/code&gt; to know when to retry requests.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-exact-error-types-or-codes-indicate-foundation-model-throttling&quot;&gt;What exact error types or codes indicate Foundation Model throttling?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Throttling can be indicated by errors like &lt;code&gt;system busy&lt;/code&gt;, &lt;code&gt;thermal pressure&lt;/code&gt;, or &lt;code&gt;quota exhaustion&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Distinguish retriable rate-limit errors (retry later) from terminal quota exhaustion.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;Language Model Protocol&lt;/code&gt; includes &lt;code&gt;Language Model Error&lt;/code&gt; for common issues like rate limiting and refusals.&lt;/li&gt;
&lt;li&gt;For the PCC model, specific errors related to &lt;code&gt;quota usage&lt;/code&gt; and &lt;code&gt;quota exhaustion&lt;/code&gt; are available.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-to-avoid-language-model-sessiongeneration-errorguardrail-violation&quot;&gt;How to avoid &lt;code&gt;language model session.generation error.guardrail violation&lt;/code&gt;?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use the &lt;code&gt;model judge evaluator&lt;/code&gt; in the &lt;code&gt;Evaluations Framework&lt;/code&gt; with safety rubrics.&lt;/li&gt;
&lt;li&gt;Developers can use a larger model (like PCC) to evaluate prompts that trigger guardrail violations on smaller models.&lt;/li&gt;
&lt;li&gt;Guardrail violations are designed to prevent unsafe responses.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;in-ios-27-can-the-foundation-models-framework-reason-over-video-or-work-with-a-video-model-or-is-multimodal-input-limited-to-still-images&quot;&gt;In iOS 27, can the Foundation Models Framework reason over video or work with a video model, or is multimodal input limited to still images?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;Foundation Models Framework&lt;/code&gt; supports models with vision capabilities.&lt;/li&gt;
&lt;li&gt;The PCC model can reason over images with options for &lt;code&gt;light&lt;/code&gt;, &lt;code&gt;moderate&lt;/code&gt;, and &lt;code&gt;deep&lt;/code&gt; reasoning.&lt;/li&gt;
&lt;li&gt;The framework is extensible; custom modalities like video can be supported via a &lt;code&gt;custom segment API&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The Foundation Models Framework is going open source, enabling server-side Swift preprocessing tools.&lt;/li&gt;
&lt;li&gt;For video processing, consider using other Apple frameworks to extract transcripts or audio descriptions and feed that text to the models.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;do-app-intent-schemas-give-an-advantage-over-generic-intents-for-siri-ai-discovery&quot;&gt;Do App Intent schemas give an advantage over generic intents for Siri AI discovery?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Schemas are the primary way Siri AI reasons about actions and entities in the application.&lt;/li&gt;
&lt;li&gt;Using schemas provides a standardized and consistent experience across apps.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Intent donation&lt;/code&gt; allows users’ actions within the app to be learned by Siri.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;App Shortcuts&lt;/code&gt; allow developers to specify phrases for app intents.&lt;/li&gt;
&lt;li&gt;Adopting an app schema means Apple has pre-trained models and sample phrases, reducing developer effort.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;can-image-playground-generate-photorealistic-images-inside-an-app&quot;&gt;Can Image Playground generate photorealistic images inside an app?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, developers can use the &lt;code&gt;Image Playground&lt;/code&gt; API to generate photorealistic images.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;ImagePlaygroundStyle.all&lt;/code&gt; as a parameter for photorealistic generation.&lt;/li&gt;
&lt;li&gt;This functionality runs on Private Cloud Compute (PCC), leveraging its powerful model.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;whats-the-difference-between-indexed-entities-and-defined-entities-like-app-schema-entities&quot;&gt;What’s the difference between indexed entities and defined entities (like app schema entities)?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Schemas define the structure and properties of content (e.g., a book’s title, author).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Indexed Entity&lt;/code&gt; is an API to index that content into the system’s semantic index for retrieval by Siri AI.&lt;/li&gt;
&lt;li&gt;Adopting an app schema and conforming to the &lt;code&gt;Indexed Entity&lt;/code&gt; protocol provides the best Siri AI experience.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Indexed Entity&lt;/code&gt; can also be used for custom entities and donated to Spotlight, enabling deep linking via &lt;code&gt;system.open&lt;/code&gt; intents.&lt;/li&gt;
&lt;li&gt;App schemas simplify Spotlight integration by handling indexing keys automatically.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;can-the-evaluations-framework-be-used-for-academic-research&quot;&gt;Can the Evaluations Framework be used for academic research?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, the &lt;code&gt;Evaluations Framework&lt;/code&gt; can be used for academic research.&lt;/li&gt;
&lt;li&gt;It’s designed for evaluating any stochastic system, including traditional machine learning models.&lt;/li&gt;
&lt;li&gt;The framework allows for scenario-based metric collection and the creation of app-specific or scenario-specific benchmarks.&lt;/li&gt;
&lt;li&gt;Features like synthetic data generation and Xcode integration with visuals can support research.&lt;/li&gt;
&lt;li&gt;Reports can be saved and exported as JSON for further analysis.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;does-siri-support-screen-context-on-carplay&quot;&gt;Does Siri support screen context on CarPlay?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;On-screen context is supported via &lt;strong&gt;&lt;code&gt;NSUserActivity&lt;/code&gt;&lt;/strong&gt; integration and the new view annotations API.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CarPlay screen context and grid-style actions are not supported&lt;/strong&gt; — file Feedback Assistant if developers need them.&lt;/li&gt;
&lt;li&gt;Safety is a priority; keep driver attention on the road when using CarPlay.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;are-we-going-to-be-able-to-use-app-intents-with-homepod-since-currently-there-is-not-a-beta-for-homepod&quot;&gt;Are we going to be able to use App Intents with HomePod, since currently there is not a beta for HomePod?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The new Siri AI is not available on HomePod.&lt;/li&gt;
&lt;li&gt;Existing &lt;code&gt;App Shortcuts&lt;/code&gt; have worked on HomePod for a while.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;can-we-expect-watchos-responses-to-app-intents-to-match-up-one-to-one-with-ios&quot;&gt;Can we expect watchOS responses to App Intents to match up one-to-one with iOS?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No&lt;/strong&gt; — dialogue is not one-to-one across devices. Siri adapts responses by context (e.g., verbose on AirPods, concise on iPad).&lt;/li&gt;
&lt;li&gt;Developers are encouraged to test experiences across all supported devices, including watchOS and AirPods.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;App Intents&lt;/code&gt; can optionally provide dialogue that can be adapted for different contexts.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;App Intents testing framework&lt;/code&gt; is available for testing.&lt;/li&gt;
&lt;li&gt;Customizing the Siri experience, including intent dialogue, is supported.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;does-image-playground-now-require-an-internet-connection-for-pcc-or-does-it-fall-back-to-the-previous-model-gracefully&quot;&gt;Does Image Playground now require an internet connection for PCC, or does it fall back to the previous model gracefully?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Image Playground&lt;/code&gt; always requires an internet connection as it uses PCC (Private Cloud Compute).&lt;/li&gt;
&lt;li&gt;It will not fall back to an on-device model.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-notable-highlights-from-the-apple-intelligence-updates&quot;&gt;What are notable highlights from the Apple Intelligence updates?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Phone call intelligence:&lt;/strong&gt; Features like extracting confirmation numbers during calls.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;App Intents testing:&lt;/strong&gt; A new way to unit test &lt;code&gt;App Intents&lt;/code&gt;, including UI and Spotlight integrations, for CI pipelines.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Foundation Models Framework:&lt;/strong&gt; Integration with various language providers, core AI, and the ability to bring any model from the web.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evaluations Framework:&lt;/strong&gt; Testing intelligence-based features, model judges, quantitative/qualitative metrics, and tool call evaluation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Private Cloud Compute (PCC):&lt;/strong&gt; Easy access to server models with simplified authentication (one line of code).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New Siri AI:&lt;/strong&gt; Advancements in Siri, new APIs for developers, and a deeply integrated ecosystem for natural language interactions and actions across apps.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;why-does-apple-use-hard-coded-app-intent-schemas-instead-of-dynamic-skill-descriptions&quot;&gt;Why does Apple use hard-coded App Intent schemas instead of dynamic skill descriptions?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Schemas provide consistency and privacy, aligning with Apple’s focus on personal and private intelligence.&lt;/li&gt;
&lt;li&gt;Schemas ensure a standardized, holistic experience across the platform, making interactions natural across apps in the same domain.&lt;/li&gt;
&lt;li&gt;Schemas offer security benefits, such as built-in confirmation steps for sensitive actions (e.g., sending money).&lt;/li&gt;
&lt;li&gt;Schemas enable differentiated behavior based on entity ownership (e.g., shared vs. personal calendar events).&lt;/li&gt;
&lt;li&gt;Schemas facilitate localization by allowing Apple to handle model training and natural language strings across locales.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;can-the-evaluations-framework-verify-tool-calls&quot;&gt;Can the Evaluations Framework verify tool calls?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, developers can supply a transcript from the &lt;code&gt;Language Model Session&lt;/code&gt; and use a &lt;code&gt;tool call evaluator&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;Evaluations Framework&lt;/code&gt; allows developers to define assertions for tool calls, including order, properties, and values.&lt;/li&gt;
&lt;li&gt;This system can be used at the scenario level to report on tool execution.&lt;/li&gt;
&lt;li&gt;Features like &lt;code&gt;dynamic profiles&lt;/code&gt; and &lt;strong&gt;Xcode and Instruments integration&lt;/strong&gt; further aid in visualizing and verifying tool calls in real time.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-does-the-apple-intelligence-framework-mitigate-semantic-entropy-when-passing-context-between-on-device-models-and-larger-server-based-models&quot;&gt;How does the Apple Intelligence Framework mitigate semantic entropy when passing context between on-device models and larger server-based models?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;Foundation Models Framework&lt;/code&gt; uses &lt;code&gt;dynamic profiles&lt;/code&gt; to manage context across models with different context sizes (e.g., 4K for on-device, 32K for PCC).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;History transform&lt;/code&gt; modifiers can be used to manage context when switching profiles or incorporating tool calls.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;Foundation Models Utilities package&lt;/code&gt; provides tools like summarization to compact transcripts for smaller context sizes.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;Evaluations Framework&lt;/code&gt; can be used to test and optimize context management strategies.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;do-i-need-to-use-the-evaluations-framework-with-foundation-models&quot;&gt;Do I need to use the Evaluations Framework with Foundation Models?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;No, developers do not necessarily need to use the &lt;code&gt;Evaluations Framework&lt;/code&gt; with &lt;code&gt;Foundation Models&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;Evaluations Framework&lt;/code&gt; can be used to evaluate any stochastic system.&lt;/li&gt;
&lt;li&gt;However, specific evaluators like the &lt;code&gt;tool call evaluator&lt;/code&gt; require &lt;code&gt;Foundation Models&lt;/code&gt; to access the transcript.&lt;/li&gt;
&lt;li&gt;Apple is working on generic transforms for other models to enable broader use of these evaluators.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;can-one-app-retrieve-another-apps-donated-indexed-entity-content&quot;&gt;Can one app retrieve another app’s donated &lt;code&gt;Indexed Entity&lt;/code&gt; content?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Retrieval is limited to the app’s sandbox only.&lt;/li&gt;
&lt;li&gt;For inter-app content sharing, use the &lt;code&gt;Transferable&lt;/code&gt; protocol.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Transferable&lt;/code&gt; allows for progressive data sharing from highest to lowest fidelity.&lt;/li&gt;
&lt;li&gt;Developers control what data is shared and with whom, ensuring privacy and security.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;schemas-are-schema-bound-entities-interchangeable-can-an-apps-file-entity-be-turned-into-a-photo-entity-and-vice-versa&quot;&gt;Schemas: Are schema-bound entities interchangeable? Can an app’s file entity be turned into a photo entity and vice versa?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, schema-bound entities can be interchangeable, often through the &lt;code&gt;Transferable&lt;/code&gt; protocol.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;Transferable&lt;/code&gt; protocol allows developers to specify data transformations the app supports.&lt;/li&gt;
&lt;li&gt;For example, a message entity containing an attachment can be exported as a file or a photo, allowing import into relevant apps (e.g., Photos app).&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;file entity protocol&lt;/code&gt; exists for file-based formats.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-an-imperfect-schema-match-acceptable-for-new-siri-integration&quot;&gt;Is an imperfect schema match acceptable for new Siri integration?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, it is acceptable to use schemas that are a close match.&lt;/li&gt;
&lt;li&gt;Developers can pick and choose functionality based on available app schemas.&lt;/li&gt;
&lt;li&gt;For concepts that don’t fit a schema, use the generic &lt;code&gt;system.search&lt;/code&gt; capability for integration with Apple Intelligence.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;App Shortcuts&lt;/code&gt; can also be used for custom integrations, requiring developers to provide sample phrases.&lt;/li&gt;
&lt;li&gt;Adopting schemas can let developers &lt;strong&gt;delete code&lt;/strong&gt; — the platform handles more of the integration logic.&lt;/li&gt;
&lt;li&gt;Adopting an app schema means Apple handles phrase training and provides a consistent experience.&lt;/li&gt;
&lt;li&gt;Intent donation allows Siri to learn from user actions (e.g., “message Dan”) over time.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-do-image-inputs-affect-the-foundation-models-4096-token-budget&quot;&gt;How do image inputs affect the Foundation Models 4,096 token budget?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;For the on-device model, the context size is 4096 tokens. Image input typically consumes around 200 tokens.&lt;/li&gt;
&lt;li&gt;Developers can use the full 4096 tokens for instructions and prompts.&lt;/li&gt;
&lt;li&gt;With Private Cloud Compute (PCC), the context size is 32K tokens.&lt;/li&gt;
&lt;li&gt;Token counting APIs are available to measure usage.&lt;/li&gt;
&lt;li&gt;For optimal performance, especially with smaller models, tailor prompts, use synonyms, and include examples.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>Miká Kruschel</author></item><item><title>Coding Intelligence for Beginners</title><link>https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8007</link><guid isPermaLink="true">https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8007</guid><description>Agents allow developers to articulate ideas and make them more tangible, creating a codified spec that can be iterated upon.</description><pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;coding-intelligence-for-beginners&quot;&gt;Coding Intelligence for Beginners&lt;/h1&gt;
&lt;p&gt;Unofficial AI summary of the WWDC26 group lab. May contain mistakes.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/videos/play/wwdc2026/8007&quot;&gt;Watch on Apple Developer&lt;/a&gt; · &lt;a href=&quot;https://kruschel.dev/wwdc26-group-labs-transcripts/wwdc2026-8007.txt&quot;&gt;Raw transcript&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Related Labs: &lt;a href=&quot;https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8121&quot;&gt;Coding Intelligence, Machine Learning &amp;#x26; AI&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;how-has-app-development-changed-with-the-introduction-of-agents&quot;&gt;How has app development changed with the introduction of agents?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Agents allow developers to articulate ideas and make them more tangible, creating a codified spec that can be iterated upon.&lt;/li&gt;
&lt;li&gt;The agentic flow verifies and fixes errors, enabling faster realization of ideas and fostering creativity by reducing the cost of writing and deleting code.&lt;/li&gt;
&lt;li&gt;Developers are more emboldened to explore different paths and try ambitious features for users.&lt;/li&gt;
&lt;li&gt;Agents help make practices like testing and localization easier, though many developers had delayed these before agents existed.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;where-can-i-learn-about-commands-like-plan-and-other-agent-commands&quot;&gt;Where can I learn about commands like &lt;code&gt;/plan&lt;/code&gt; and other agent commands?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Xcode displays compatible commands when an agent provides a list or when typing &lt;code&gt;/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Developers can ask the agent directly for help; it is aware of most executable commands and their functions.&lt;/li&gt;
&lt;li&gt;Experimenting with commands and asking the agent for help can reveal new workflows.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-unique-advantages-does-xcodes-built-in-coding-intelligence-offer-over-external-ai-agents&quot;&gt;What unique advantages does Xcode’s built-in coding intelligence offer over external AI agents?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Xcode’s agent understands project layout and Apple platform development, leveraging tools that surface SDK and API information.&lt;/li&gt;
&lt;li&gt;It includes documentation tools for exploring new APIs and validation tools for checking its own work, such as building and code execution validation.&lt;/li&gt;
&lt;li&gt;Xcode offers access to app-specific data like crash data and localization best practices, with Apple-specific knowledge baked in.&lt;/li&gt;
&lt;li&gt;Xcode’s preview system allows agents to visualize their work, and the overall experience is designed to be well-crafted and welcoming.&lt;/li&gt;
&lt;li&gt;Xcode provides out-of-the-box guidance and a planning mode to help developers onboard effectively with agents.&lt;/li&gt;
&lt;li&gt;Agents, onboarding flows, and tool integrations can be extended with &lt;strong&gt;plug-ins&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;does-xcodes-ui-indicate-the-amount-of-agentic-resources-being-consumed&quot;&gt;Does Xcode’s UI indicate the amount of agentic resources being consumed?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, the agent provider will have a slash command to access this information.&lt;/li&gt;
&lt;li&gt;There are typically two indicators: one for the primary context window’s fullness and another for the cost or usage so far.&lt;/li&gt;
&lt;li&gt;This information is not directly in the UI; developers must ask the agent for it.&lt;/li&gt;
&lt;li&gt;For specific UI surfacing requests or use cases, file feedback via feedbackassistant.apple.com.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-the-xcode-ai-agent-access-implementations-from-other-projects-for-cross-project-references&quot;&gt;How can the Xcode AI agent access implementations from other projects for cross-project references?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Xcode uses permission prompting by default to control agent access.&lt;/li&gt;
&lt;li&gt;An experimental managed security mode allows gating agent actions at the file system level.&lt;/li&gt;
&lt;li&gt;If a project is referenced within the Xcode workspace, the agent can access it.&lt;/li&gt;
&lt;li&gt;For external files, developers can paste file paths or direct the agent to directories like “Documents” for exploration.&lt;/li&gt;
&lt;li&gt;Xcode workspaces are recommended for combining multiple projects, allowing the agent to see all relevant pieces.&lt;/li&gt;
&lt;li&gt;Agents always ask for permission before executing tools that might modify or delete files.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-beginners-understand-code-generated-by-coding-intelligence-if-it-doesnt-explain-itself&quot;&gt;How can beginners understand code generated by coding intelligence if it doesn’t explain itself?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ask the agent directly for explanations; it can provide them in various formats like HTML reports or Markdown.&lt;/li&gt;
&lt;li&gt;Configure agents to always provide an explanation after a prompt, specifying the desired format.&lt;/li&gt;
&lt;li&gt;Create parallel conversations in Xcode 27 to ask questions about generated code or new APIs while the agent is working.&lt;/li&gt;
&lt;li&gt;Bake explanations into the initial prompt by asking the agent to state assumptions and implementation details.&lt;/li&gt;
&lt;li&gt;Define the structure of code (e.g., structs, protocols) with comments and then have the agent fill in the gaps.&lt;/li&gt;
&lt;li&gt;Use plan mode to understand the agent’s approach to a problem before code is implemented.&lt;/li&gt;
&lt;li&gt;Ask the agent to host a “game show” with trivia questions about the code to aid understanding.&lt;/li&gt;
&lt;li&gt;Create architecture documents or diagrams to visualize data flow and feature construction.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-common-mistakes-made-by-coding-assistants-that-beginners-might-miss&quot;&gt;What are common mistakes made by coding assistants that beginners might miss?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Agents may misunderstand assumptions, leading to incorrect or unmaintainable code, or providing something completely different from what was asked.&lt;/li&gt;
&lt;li&gt;Agents might “cheat” by not passing tests and justifying it with debug configurations, which should not be accepted.&lt;/li&gt;
&lt;li&gt;Fallible tools like agents require vigilance, unlike compilers.&lt;/li&gt;
&lt;li&gt;Validation tools in Xcode are crucial for catching issues early.&lt;/li&gt;
&lt;li&gt;Developers’ surprising workflows can highlight areas for improvement; feedback is valuable.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;does-xcode-coding-intelligence-have-an-undo-button-for-agent-changes&quot;&gt;Does Xcode Coding Intelligence have an undo button for agent changes?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Developers can ask the agent to revert its work, and it can usually do so effectively.&lt;/li&gt;
&lt;li&gt;Xcode tracks states across turns with the agent, allowing developers to revert to a previous state using a history slider, provided a Git repository is initialized.&lt;/li&gt;
&lt;li&gt;Git provides the broadest rollback capability.&lt;/li&gt;
&lt;li&gt;Xcode’s history feature offers granular rollback for the last action.&lt;/li&gt;
&lt;li&gt;Agents can reason about their own work and undo specific parts while preserving others, especially useful with parallel work.&lt;/li&gt;
&lt;li&gt;Using Git is highly recommended for all developers, even solo ones, for reverting issues and releasing fixes quickly.&lt;/li&gt;
&lt;li&gt;Commit messages are important for documenting assumptions and aiding future understanding.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-experienced-ios-developers-with-little-ai-assistant-experience-develop-the-skills-needed-for-ai-assisted-development&quot;&gt;How can experienced iOS developers with little AI assistant experience develop the skills needed for AI-assisted development?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Start simple by integrating agents into existing workflows for small changes or bug fixes.&lt;/li&gt;
&lt;li&gt;Work on tasks developers already know how to do to quickly compare agent results with custom work and build confidence.&lt;/li&gt;
&lt;li&gt;Iteratively expand to more complex capabilities as becoming more comfortable.&lt;/li&gt;
&lt;li&gt;Leverage the existing industry experience; guide and direct the agent to shape code, architectures, and validation loops.&lt;/li&gt;
&lt;li&gt;Use agents as a powerful find tool or planning aid when developers are uncomfortable surrendering control.&lt;/li&gt;
&lt;li&gt;Review all changes and use plan mode to verify implementation details.&lt;/li&gt;
&lt;li&gt;Consider sessions like “Xcode Agents and You” for workflow ideas.&lt;/li&gt;
&lt;li&gt;Approach problems top-down (e.g., defining interfaces) or bottom-up (e.g., implementing function bodies).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-key-differences-between-agent-mode-and-chat-mode-in-xcode&quot;&gt;What are the key differences between agent mode and chat mode in Xcode?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Agent mode offers significantly more capability than chat mode.&lt;/li&gt;
&lt;li&gt;Predictive completion operates on a seconds horizon; chat mode handles ~30-second tasks; agent mode can work for 30 minutes to 1.5+ hours.&lt;/li&gt;
&lt;li&gt;Chat mode provides a limited set of tools (10-15) for interacting with the codebase.&lt;/li&gt;
&lt;li&gt;Agent mode allows agents to use an “infinite” number of tools, including command-line tools and nearly 60 tools within Xcode.&lt;/li&gt;
&lt;li&gt;Agent wrappers provide superpowers like context management and spawning other agents.&lt;/li&gt;
&lt;li&gt;A couple of bundled Xcode agent UI integrations are open source and configurable for local models via ACP.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-features-are-lost-when-using-local-models-instead-of-cloud-models-in-xcode&quot;&gt;What features are lost when using local models instead of cloud models in Xcode?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Developers can plug local agents into local models and utilize many agentic tools.&lt;/li&gt;
&lt;li&gt;The primary difference is the potential lack of access to extremely large, powerful models hosted on specialized cloud infrastructure.&lt;/li&gt;
&lt;li&gt;Local models may require more guardrails and robust validation steps to ensure accuracy.&lt;/li&gt;
&lt;li&gt;ACP (Agent Client Protocol) allows Xcode’s toolset to be available to local agents.&lt;/li&gt;
&lt;li&gt;The “super genius” capability of large cloud models might not be matched by local models, but significant work can still be accomplished.&lt;/li&gt;
&lt;li&gt;It’s important to test local models and settings to find the right balance of speed, accuracy, and privacy for the project.&lt;/li&gt;
&lt;li&gt;The “vibes” or how it feels to use the tool is a key factor in choosing models and agents.&lt;/li&gt;
&lt;li&gt;Consider developing a scorecard to evaluate local models against the project’s specific needs.&lt;/li&gt;
&lt;li&gt;Not all large models provide significantly better results; smaller models can be very effective.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-it-possible-to-connect-xcode-coding-intelligence-to-a-local-llm-like-one-hosted-via-mlx-lm-server-and-use-it-in-agent-mode-not-just-chat-mode&quot;&gt;Is it possible to connect Xcode coding intelligence to a local LLM like one hosted via MLX LM server, and use it in agent mode (not just chat mode)?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, ACP support enables this.&lt;/li&gt;
&lt;li&gt;Developers can use open-source tools and wrappers like OpenCode with local model support.&lt;/li&gt;
&lt;li&gt;ACP allows integration of local agents and models within Xcode.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-privacy-implications-of-using-third-party-llms-in-xcode&quot;&gt;What are the privacy implications of using third-party LLMs in Xcode?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;When enabling a coding agent with a partner, review their terms and conditions regarding code usage for training.&lt;/li&gt;
&lt;li&gt;You are in control of whether the agent provider can use the code for training.&lt;/li&gt;
&lt;li&gt;Settings within the account for model providers specify what they can and cannot do with the code.&lt;/li&gt;
&lt;li&gt;Apple does not see the code or queries when using third-party LLMs; data is sent directly to the provider.&lt;/li&gt;
&lt;li&gt;When developers submit a feedback report, Apple will see the context the provided.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;whats-the-best-way-to-work-with-ai-in-xcode-while-offline-without-a-high-end-machine&quot;&gt;What’s the best way to work with AI in Xcode while offline, without a high-end machine?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use MLX to run larger, more interesting models on devices.&lt;/li&gt;
&lt;li&gt;Implement strong guardrails and constraints, such as requiring agents to pass unit tests.&lt;/li&gt;
&lt;li&gt;Use a larger model offline for planning and requirements, then use local agents to document assumptions.&lt;/li&gt;
&lt;li&gt;When back online, use a larger model to double-check those assumptions.&lt;/li&gt;
&lt;li&gt;Combine larger models with smaller, local models by having them critique each other’s work (e.g., via Markdown files).&lt;/li&gt;
&lt;li&gt;Xcode allows configuring multiple agents and models to switch between online and offline versions.&lt;/li&gt;
&lt;li&gt;The session “Run Local Agentic AI on Mac Using MLX” is recommended.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-does-xcode-offer-beyond-terminal-based-coding-agents&quot;&gt;What does Xcode offer beyond terminal-based coding agents?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Xcode provides a powerful set of tools and a superior user experience compared to a linear terminal flow.&lt;/li&gt;
&lt;li&gt;Xcode visualizes changes and evolution of code in a dedicated area next to the conversation.&lt;/li&gt;
&lt;li&gt;It leverages Xcode’s full context, including open files, active schemes, and project settings.&lt;/li&gt;
&lt;li&gt;Xcode is an ensemble of tools (Instruments, Preview, Device Hub) that agents can control, offering capabilities not available in a terminal.&lt;/li&gt;
&lt;li&gt;The combination of prompts with Xcode’s project context (Git history, crash data) leads to more accurate initial solutions.&lt;/li&gt;
&lt;li&gt;Xcode offers a visually rich experience with rendered Markdown and previews, providing a different way to see results.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-it-possible-to-use-local-ai-models-for-coding-intelligence-with-xcode-27-whats-the-suggestion-to-balance-speed-accuracy-and-privacy&quot;&gt;Is it possible to use local AI models for coding intelligence with Xcode 27? What’s the suggestion to balance speed, accuracy, and privacy?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, watch the “Run Local Agentic AI on Mac Using MLX” session for guidance.&lt;/li&gt;
&lt;li&gt;Balance speed, accuracy, and privacy by using larger models for planning and smaller local models for tracking work or assumptions.&lt;/li&gt;
&lt;li&gt;Experiment with different local models and their quantizations to find what works best for the project.&lt;/li&gt;
&lt;li&gt;The “vibes” or user experience is a key factor in choosing models and agents.&lt;/li&gt;
&lt;li&gt;Develop a scorecard to evaluate models against the project’s specific needs.&lt;/li&gt;
&lt;li&gt;Not all large models are better; smaller models can be equally or more effective.&lt;/li&gt;
&lt;li&gt;Dynamically change and swap models on the Mac depending on the task.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;can-xcode-coding-intelligence-use-on-device-foundation-models-without-third-party-providers&quot;&gt;Can Xcode coding intelligence use on-device foundation models without third-party providers?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, by running local agents with local models.&lt;/li&gt;
&lt;li&gt;Refer to sessions like “Run Local Agentic AI on Mac Using MLX.”&lt;/li&gt;
&lt;li&gt;Macs, especially with M-series chips, are powerful enough to run large models locally.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-there-a-beginners-guide-or-document-that-gives-an-overview-of-ai-coding-intelligence-topics-rather-than-just-hands-on-tutorials&quot;&gt;Is there a beginner’s guide or document that gives an overview of AI coding intelligence topics, rather than just hands-on tutorials?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The “Xcode Agents and You” session provides illustrative diagrams and breaks down what agents are doing, offering a powerful understanding.&lt;/li&gt;
&lt;li&gt;Talking to other developers and exchanging best practices is a great way to learn.&lt;/li&gt;
&lt;li&gt;Don’t overthink it; the onboarding process is designed to be seamless.&lt;/li&gt;
&lt;li&gt;Use plan mode in Xcode to understand exactly what the agent is doing and ask questions about its approach.&lt;/li&gt;
&lt;li&gt;Xcode’s integration allows trying agents with less risk compared to a full terminal overhaul.&lt;/li&gt;
&lt;li&gt;Community resources and techniques from other IDEs are generally transferable to Xcode.&lt;/li&gt;
&lt;li&gt;Reviewing documentation for agent providers and observing how others use them can be helpful.&lt;/li&gt;
&lt;li&gt;There isn’t one “right” path; experiment and borrow from what others use.&lt;/li&gt;
&lt;li&gt;Best practices evolve rapidly with new models, so continuous testing is key.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-agents-stay-current-with-the-latest-apis&quot;&gt;How can agents stay current with the latest APIs?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Xcode includes tools dedicated to searching new API documentation efficiently.&lt;/li&gt;
&lt;li&gt;Downloading Xcode also includes the latest documentation, including versions optimized for models.&lt;/li&gt;
&lt;li&gt;Agents can tap into this documentation to get the latest API information and add it to their context.&lt;/li&gt;
&lt;li&gt;Xcode ships with specialist skills for new features (e.g., resizability in iOS 27).&lt;/li&gt;
&lt;li&gt;Project-level agent configuration files (e.g., &lt;code&gt;AGENTS.md&lt;/code&gt;) help steer agent behavior.&lt;/li&gt;
&lt;li&gt;Developers can ask the agent to “search documentation” or inquire about new APIs in specific OS versions.&lt;/li&gt;
&lt;li&gt;Xcode provides this documentation tool regardless of the agent provider (local, Claude, Gemini), ensuring agents have access to the latest APIs.&lt;/li&gt;
&lt;li&gt;Documentation is updated as a separate asset and downloaded automatically into Xcode.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>Miká Kruschel</author></item><item><title>SwiftUI</title><link>https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8120</link><guid isPermaLink="true">https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8120</guid><description>SwiftUI is aware of performance issues with very large lists and is investigating.</description><pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;swiftui&quot;&gt;SwiftUI&lt;/h1&gt;
&lt;p&gt;Unofficial AI summary of the WWDC26 group lab. May contain mistakes.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/videos/play/wwdc2026/8120&quot;&gt;Watch on Apple Developer&lt;/a&gt; · &lt;a href=&quot;https://kruschel.dev/wwdc26-group-labs-transcripts/wwdc2026-8120.txt&quot;&gt;Raw transcript&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Related Labs: &lt;a href=&quot;https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8002&quot;&gt;SwiftUI for Beginners&lt;/a&gt;, &lt;a href=&quot;https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8006&quot;&gt;SwiftUI (June 10)&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;how-can-very-large-reorderable-swiftui-lists-be-optimized&quot;&gt;How can very large reorderable SwiftUI lists be optimized?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;SwiftUI is aware of performance issues with very large lists and is investigating.&lt;/li&gt;
&lt;li&gt;File feedback with the specific use case, detailing why developers need to display that many items and the nature of the data structure.&lt;/li&gt;
&lt;li&gt;This feedback helps the team ensure APIs support diverse use cases.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-navigationtransition-protocol-and-are-custom-transitions-supported&quot;&gt;What is the &lt;code&gt;NavigationTransition&lt;/code&gt; protocol, and are custom transitions supported?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;NavigationTransition&lt;/code&gt; protocol allows SwiftUI to expose types that conform to it for navigation transitions.&lt;/li&gt;
&lt;li&gt;Currently, there are predefined transitions like &lt;code&gt;crossfade&lt;/code&gt;, &lt;code&gt;zoom&lt;/code&gt;, and &lt;code&gt;automatic&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;These transitions apply to &lt;strong&gt;sheets&lt;/strong&gt; as well as navigation stacks.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;AnyNavigationTransition&lt;/code&gt; to switch between transition styles (e.g., crossfade vs. zoom).&lt;/li&gt;
&lt;li&gt;For custom transitions not tied to a navigation stack, developers can drive animations using modifiers and &lt;code&gt;Animatable&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If developers need custom navigation transitions, file feedback with the use case to inform future API development.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-coding-intelligence-help-swiftui-development-with-liquid-glass&quot;&gt;How can coding intelligence help SwiftUI development with Liquid Glass?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Xcode’s new coding skills provide insights into new APIs and best practices.&lt;/li&gt;
&lt;li&gt;Use Xcode’s preview rendering for iterating on designs like Liquid Glass.&lt;/li&gt;
&lt;li&gt;Skills are usable with the model of choice, allowing for experimentation.&lt;/li&gt;
&lt;li&gt;Skills can be exported for use with other agentic systems.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-should-the-glass-effect-be-applied-to-buttons-and-other-ui-elements&quot;&gt;How should the glass effect be applied to buttons and other UI elements?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Buttons in navigation bars and top toolbars automatically adopt a glass appearance.&lt;/li&gt;
&lt;li&gt;For custom glass effects on buttons, use the &lt;strong&gt;glass button style&lt;/strong&gt; or &lt;strong&gt;glass prominent&lt;/strong&gt; style.&lt;/li&gt;
&lt;li&gt;Consider using &lt;code&gt;buttonBorderShape&lt;/code&gt; for specific button shapes.&lt;/li&gt;
&lt;li&gt;Avoid applying glass effects within the content area of a view unless there’s content to refract; often, simpler designs are better.&lt;/li&gt;
&lt;li&gt;To hide the glass background on toolbar items (e.g., for profile photos), use &lt;code&gt;sharedBackground(hidden: true)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;New APIs allow removing content margins from toolbar buttons while keeping the glass rim aligned on push and pop transitions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-best-way-to-manage-screen-sizes-and-window-resizing-in-swiftui-apps&quot;&gt;What is the best way to manage screen sizes and window resizing in SwiftUI apps?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Avoid hardcoding for specific window sizes; aim for layouts that adapt to any size.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;&lt;code&gt;ViewThatFits&lt;/code&gt;&lt;/strong&gt; to pick the best layout variant for the available space.&lt;/li&gt;
&lt;li&gt;Utilize size classes to define different user experiences (e.g., multi-column for regular, constrained for compact).&lt;/li&gt;
&lt;li&gt;Ensure true flexibility beyond just size class transitions, as windows can occupy intermediate sizes.&lt;/li&gt;
&lt;li&gt;Consider using system containers like &lt;code&gt;TabView&lt;/code&gt; (which can adapt to sidebars) for built-in responsiveness.&lt;/li&gt;
&lt;li&gt;Custom layouts and custom containers offer powerful ways to create flexible, reusable controls that adapt to various sizes.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;AnyLayout&lt;/code&gt; to maintain structural view identity when switching between different layouts.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;when-should-geometryreader-be-used-versus-ongeometrychange-for-handling-size-changes&quot;&gt;When should &lt;code&gt;GeometryReader&lt;/code&gt; be used versus &lt;code&gt;onGeometryChange&lt;/code&gt; for handling size changes?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;onGeometryChange&lt;/code&gt; is generally preferred for reacting to size changes, especially for breakpoint-based layouts.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;onGeometryChange&lt;/code&gt; has two closures: one for real-time geometry, and another to determine when an action should be called, allowing for threshold-based updates.&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;GeometryReader&lt;/code&gt; within subviews can be expensive; &lt;code&gt;onGeometryChange&lt;/code&gt; is more efficient.&lt;/li&gt;
&lt;li&gt;Avoid view invalidations on every frame; &lt;code&gt;onGeometryChange&lt;/code&gt; helps limit updates to when thresholds are crossed.&lt;/li&gt;
&lt;li&gt;For precise placement and complex layouts, combine &lt;code&gt;onGeometryChange&lt;/code&gt; with custom layouts.&lt;/li&gt;
&lt;li&gt;Alignment guides can also be used for efficient, single-pass layout solutions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-best-practices-for-learning-data-management-and-passing-data-between-views-in-swiftui&quot;&gt;What are the best practices for learning data management and passing data between views in SwiftUI?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Focus on making views lightweight and mapping information to view data.&lt;/li&gt;
&lt;li&gt;Build self-contained state machines and logical components.&lt;/li&gt;
&lt;li&gt;When view code becomes messy, simplify the model or logic layer data.&lt;/li&gt;
&lt;li&gt;SwiftUI is architecture-agnostic; build apps modeling different data types to discover appropriate patterns.&lt;/li&gt;
&lt;li&gt;Build sample apps in domains developers are familiar with to stay motivated and focus on solving the problem.&lt;/li&gt;
&lt;li&gt;Use Instruments’ SwiftUI timeline to understand data flow and how data updates affect view bodies.&lt;/li&gt;
&lt;li&gt;Consider using dynamic properties to replace &lt;code&gt;onChange&lt;/code&gt; for more efficient updates that occur before &lt;code&gt;body&lt;/code&gt; renders.&lt;/li&gt;
&lt;li&gt;Avoid using &lt;code&gt;onChange&lt;/code&gt; to mutate view state; prefer a data model that vends new values as others change.&lt;/li&gt;
&lt;li&gt;Critically evaluate the usage of APIs like &lt;code&gt;AnyView&lt;/code&gt; and &lt;code&gt;onChange&lt;/code&gt; to ensure they are justified and not used as a crutch.&lt;/li&gt;
&lt;li&gt;For asynchronous loading (e.g., images), use dynamic properties to vend cached values before the body renders, avoiding unnecessary re-renders.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;onAppear&lt;/code&gt; timing now aligns with &lt;code&gt;Task&lt;/code&gt; due to Swift concurrency improvements in iOS 27 — no extra isolation hop between them.&lt;/li&gt;
&lt;li&gt;Wrapping views in &lt;code&gt;AnyView&lt;/code&gt; can block container-value and preference propagation; be aware when using type erasure in layout containers.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-apples-recommendation-for-conditionally-hiding-elements-and-what-are-the-implications-of-using-if-statements&quot;&gt;What is Apple’s recommendation for conditionally hiding elements, and what are the implications of using &lt;code&gt;if&lt;/code&gt; statements?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;For visual hiding, use modifiers like &lt;code&gt;opacity&lt;/code&gt; with a conditional expression. This keeps the element in the view hierarchy.&lt;/li&gt;
&lt;li&gt;If developers need to remove an element from the layout entirely, conditionalizing its presence is acceptable.&lt;/li&gt;
&lt;li&gt;Avoid using &lt;code&gt;if&lt;/code&gt; statements at the top level of views within lazy containers (&lt;code&gt;List&lt;/code&gt;, &lt;code&gt;LazyStack&lt;/code&gt;) as it can prevent views from being deallocated and lead to unexpected behavior.&lt;/li&gt;
&lt;li&gt;Wrap conditional branches within lazy containers in a unary container (e.g., &lt;code&gt;VStack&lt;/code&gt;, &lt;code&gt;Group&lt;/code&gt;, &lt;code&gt;AnyView&lt;/code&gt;) to ensure a single view is always resolved.&lt;/li&gt;
&lt;li&gt;Conditionalizing view modifiers can be problematic if the modifier doesn’t have an “inert” state, potentially causing unnecessary relayouts or state resets.&lt;/li&gt;
&lt;li&gt;Prefer passing inert values to modifiers or using conditional logic within the modifier’s arguments rather than an &lt;code&gt;if&lt;/code&gt; statement.&lt;/li&gt;
&lt;li&gt;Be cautious with &lt;code&gt;if&lt;/code&gt; statements inside view modifier bodies, as they can lead to unexpected state resets due to view hierarchy changes.&lt;/li&gt;
&lt;li&gt;Some SwiftUI modifiers are intentionally static for performance; switching these on the fly may require an &lt;code&gt;if-else&lt;/code&gt; structure.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-concrete-costs-of-type-erasing-with-anyview-and-when-is-it-a-concern&quot;&gt;What are the concrete costs of type erasing with &lt;code&gt;AnyView&lt;/code&gt;, and when is it a concern?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AnyView&lt;/code&gt; is useful when the type of a view is unknown at compile time.&lt;/li&gt;
&lt;li&gt;The primary cost arises when the underlying type of &lt;code&gt;AnyView&lt;/code&gt; changes, which tears down and rebuilds the view hierarchy.&lt;/li&gt;
&lt;li&gt;Avoid changing the underlying type of &lt;code&gt;AnyView&lt;/code&gt; frequently to maintain performance.&lt;/li&gt;
&lt;li&gt;In lazy containers, &lt;code&gt;AnyView&lt;/code&gt; can prevent the container from determining the number of resolved views, potentially requiring wrapping it in a unary container like &lt;code&gt;VStack&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-some-tips-for-making-swiftui-layouts-more-adaptable-especially-with-resizable-xcode-previews&quot;&gt;What are some tips for making SwiftUI layouts more adaptable, especially with resizable Xcode previews?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Design custom layouts to accept any size as an input parameter and handle it reasonably.&lt;/li&gt;
&lt;li&gt;Use resizable previews and test the app on resizable devices (like iPad) to identify assumptions and layout breaks.&lt;/li&gt;
&lt;li&gt;Observe how other apps and websites handle resizing for inspiration on creative space utilization.&lt;/li&gt;
&lt;li&gt;Identify “magic numbers” in the layout code that cause breaks at different sizes and refactor them.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-full-screen-swiftui-overlays-appear-above-sheets&quot;&gt;How can full-screen SwiftUI overlays appear above sheets?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Presenting a full-screen overlay on top of existing modals in SwiftUI can be challenging with current APIs.&lt;/li&gt;
&lt;li&gt;Consider coordinating the navigation and data models to manage presentations effectively.&lt;/li&gt;
&lt;li&gt;For complex layering needs, dropping down to UIKit and using a &lt;code&gt;UIWindow&lt;/code&gt; or &lt;code&gt;UIWindowScene&lt;/code&gt; might be necessary.&lt;/li&gt;
&lt;li&gt;Developers can host SwiftUI views within a UIKit &lt;code&gt;UIHostingController&lt;/code&gt; in a &lt;code&gt;UIWindow&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Be mindful of the “last UI window wins” principle if multiple UI windows are created.&lt;/li&gt;
&lt;li&gt;Evaluate if a full-screen cover is the most appropriate design; consider alternative flows like rewinding the navigation stack.&lt;/li&gt;
&lt;li&gt;File feedback with the specific use case when developers encounter limitations with SwiftUI’s current presentation APIs.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-a-swiftui-custom-control-expand-over-other-elements&quot;&gt;How can a SwiftUI custom control expand over other elements?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Consider using existing UIKit or AppKit controls via framework interop if a suitable control already exists.&lt;/li&gt;
&lt;li&gt;SwiftUI is compositional; developers can combine building blocks to create powerful custom controls.&lt;/li&gt;
&lt;li&gt;To avoid impacting the layout of other elements, a child view can report a stable size to its parent while drawing larger using &lt;code&gt;overlay&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Be aware that drawing outside reported bounds in a &lt;code&gt;ScrollView&lt;/code&gt; might lead to views being removed from the hierarchy.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;overlay&lt;/code&gt; provides isolation and prevents affecting surrounding layout.&lt;/li&gt;
&lt;li&gt;Custom controls require careful consideration of edge cases, such as how they behave during scrolling or user interaction.&lt;/li&gt;
&lt;li&gt;Consider using custom styles for existing controls before building a completely new custom control to leverage built-in accessibility and behaviors.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SwipeActions&lt;/code&gt; can now be applied to any container using the &lt;code&gt;swipeActionsContainer()&lt;/code&gt; modifier (not just &lt;code&gt;List&lt;/code&gt;), and the actions themselves can be any view.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-small-should-swiftui-views-be-broken-down-for-performance&quot;&gt;How small should SwiftUI views be broken down for performance?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Breaking views into smaller pieces is about isolating data dependencies that trigger updates.&lt;/li&gt;
&lt;li&gt;Split views when different parts of the UI can update independently to avoid unnecessary re-renders of the entire view.&lt;/li&gt;
&lt;li&gt;If dependencies are shared across all parts of a view, splitting it won’t provide performance benefits.&lt;/li&gt;
&lt;li&gt;The goal is to create boundaries where SwiftUI can determine if a view needs to update.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;View builder&lt;/code&gt; computed properties do not offer the same isolation as separate &lt;code&gt;struct&lt;/code&gt; views, as they are functionally part of the same view body.&lt;/li&gt;
&lt;li&gt;Aim to group related dependencies. A view re-evaluates if any of its inputs (bindings, environment, etc.) change.&lt;/li&gt;
&lt;li&gt;Move frequently changing dependencies and their associated UI logic into separate, smaller views to prevent larger, less frequently changing parts from re-rendering.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;Observable&lt;/code&gt; objects to allow subviews to update independently without triggering updates in their parent views.&lt;/li&gt;
&lt;li&gt;Don’t be afraid of creating many small views; &lt;code&gt;struct&lt;/code&gt; views are value types and are inexpensive.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-notable-swiftui-accomplishments-from-the-frameworks-evolution&quot;&gt;What are notable SwiftUI accomplishments from the framework’s evolution?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Custom Containers API:&lt;/strong&gt; Distilled complex concepts into an essence that enables powerful user creations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Semantic Pieces over Device-Specific Rendering:&lt;/strong&gt; Rethinking UI systems in terms of data flow and semantic components (e.g., &lt;code&gt;TabView&lt;/code&gt; behaving as standard tabs or a paginated scroll view).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Internal Adoption and Maturity:&lt;/strong&gt; SwiftUI is now mature enough to be used for core UI components across Apple’s applications, even those not fully rebuilt in SwiftUI.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Team Collaboration and Culture:&lt;/strong&gt; The strong team dynamic, shared humor, and collaborative problem-solving are as important as the framework itself.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;API Evolution based on Usage:&lt;/strong&gt; Identifying suboptimal patterns (like &lt;code&gt;GeometryReader&lt;/code&gt;) and introducing new APIs (&lt;code&gt;onGeometryChange&lt;/code&gt;, &lt;code&gt;onScrollVisibilityChange&lt;/code&gt;) to address user needs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exposing Lower-Level Building Blocks:&lt;/strong&gt; Providing tools that were previously internal, enabling developers to build more custom and innovative experiences.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>Miká Kruschel</author></item><item><title>watchOS</title><link>https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8014</link><guid isPermaLink="true">https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8014</guid><description>Foundation Models on watchOS do not run directly on the device. They require a network connection to a language model provider, such as Private Cloud Compute (PCC) or other conforming protocols.</description><pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;watchos&quot;&gt;watchOS&lt;/h1&gt;
&lt;p&gt;Unofficial AI summary of the WWDC26 group lab. May contain mistakes.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/videos/play/wwdc2026/8014&quot;&gt;Watch on Apple Developer&lt;/a&gt; · &lt;a href=&quot;https://kruschel.dev/wwdc26-group-labs-transcripts/wwdc2026-8014.txt&quot;&gt;Raw transcript&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;how-do-foundation-models-run-on-apple-watch&quot;&gt;How do Foundation Models run on Apple Watch?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Foundation Models on watchOS do not run directly on the device. They require a network connection to a language model provider, such as Private Cloud Compute (PCC) or other conforming protocols.&lt;/li&gt;
&lt;li&gt;FM on watch does &lt;strong&gt;not&lt;/strong&gt; relay through the iPhone’s on-device model — it uses the network directly.&lt;/li&gt;
&lt;li&gt;Official support for Claude and Gemini is expected soon.&lt;/li&gt;
&lt;li&gt;Developers can conform to the &lt;code&gt;LanguageModel&lt;/code&gt; protocol themselves.&lt;/li&gt;
&lt;li&gt;Use cases include summarizing text for the watch display and making dense text more accessible.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-considerations-for-using-foundation-models-on-watchos-especially-regarding-network-connectivity&quot;&gt;What are the considerations for using Foundation Models on watchOS, especially regarding network connectivity?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Developers must check if Foundation Models are available before making calls.&lt;/li&gt;
&lt;li&gt;Using PCC requires a specific entitlement.&lt;/li&gt;
&lt;li&gt;Plan for fallback scenarios, such as reaching API quotas or token usage limits with language model providers.&lt;/li&gt;
&lt;li&gt;Network latency is a factor, so carefully consider the timing and frequency of model calls.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-core-architectural-paradigms-and-pitfalls-for-ios-developers-moving-to-watchos-especially-for-heavy-off-main-thread-work-like-cloudkit-syncing&quot;&gt;What are the core architectural paradigms and pitfalls for iOS developers moving to watchOS, especially for heavy off-main thread work like CloudKit syncing?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Many familiar APIs like &lt;code&gt;URLSession&lt;/code&gt; and &lt;code&gt;CloudKit&lt;/code&gt; work on watchOS.&lt;/li&gt;
&lt;li&gt;Swift Async can be used for off-main thread work.&lt;/li&gt;
&lt;li&gt;The system enforces strict limits to preserve battery life and runtime, leading to watchdog timeouts.&lt;/li&gt;
&lt;li&gt;Developers should be mindful of the watch’s lower core count and performance constraints compared to iOS.&lt;/li&gt;
&lt;li&gt;Focus on designing experiences tailored for the wrist, prioritizing glanceability, conciseness, and immediate interaction.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-unique-opportunities-for-developers-on-watchos-beyond-building-a-full-watch-app&quot;&gt;What are unique opportunities for developers on watchOS, beyond building a full watch app?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Live Activities:&lt;/strong&gt; These appear on the lock screen and can be customized for the Smart Stack without needing a separate watch app.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Controls:&lt;/strong&gt; Developers can add controls to the watchOS Control Center, which can be automatically surfaced if they are present in the iOS app.&lt;/li&gt;
&lt;li&gt;These system experiences offer a lightweight entry point to the platform and provide personal, immediate interactions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-recommended-modern-ways-to-render-3d-graphics-on-watchos-now-that-scenekit-is-deprecated-and-realitykit-is-not-available&quot;&gt;What are the recommended modern ways to render 3D graphics on watchOS now that SceneKit is deprecated and RealityKit is not available?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;While SceneKit is deprecated, it can still be used.&lt;/li&gt;
&lt;li&gt;The recommended modern approach is to use SwiftUI Canvas.&lt;/li&gt;
&lt;li&gt;SwiftUI Canvas is a well-featured graphics library suitable for the watch platform and runs on the GPU for performance.&lt;/li&gt;
&lt;li&gt;Developers should consider transitioning away from SceneKit for watchOS development towards SwiftUI Canvas.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-some-underutilized-capabilities-of-watchos-that-developers-might-not-know-about-encouraging-them-to-extend-their-apps-to-the-device&quot;&gt;What are some underutilized capabilities of watchOS that developers might not know about, encouraging them to extend their apps to the device?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CoreMotion Sensor Data:&lt;/strong&gt; Developers can track device motion for novel experiences, such as a tennis game using watch sensors as a peripheral for visionOS, or tracking hand steadiness for activities like pottery.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Proactive Experiences:&lt;/strong&gt; Leverage system features like Live Activities and the Smart Stack to proactively deliver timely information and actions to users based on their real-world context (location, time, semantic locations like “at work”).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Widget Suggestions:&lt;/strong&gt; Associate widgets with specific contexts to ensure they are relevant to the user’s current situation.&lt;/li&gt;
&lt;li&gt;Be judicious about surfacing content to avoid users dismissing the app if it appears too often.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-key-considerations-for-designing-effective-live-activities-and-smart-stack-widgets-on-watchos&quot;&gt;What are the key considerations for designing effective Live Activities and Smart Stack widgets on watchOS?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Relevance:&lt;/strong&gt; Ensure content is highly relevant to the user’s real-world context (location, time, activity).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Timeliness:&lt;/strong&gt; Surface information when it’s most useful and avoid occupying prime real estate for extended periods.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alerting vs. Passive Updates:&lt;/strong&gt; Differentiate between critical alerts (e.g., delivery arrived) and passive status updates.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Noise suggestion:&lt;/strong&gt; Use softer reminders before full alerts when appropriate (e.g., a gentle nudge before a sports score alert).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Smart Stack Suggestions:&lt;/strong&gt; Use suggestions for softer reminders or when an alert isn’t immediately necessary but the information is still valuable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User Dismissal:&lt;/strong&gt; Design experiences that users can easily dismiss once the information is no longer needed.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;whats-new-for-liquid-glass-on-watchos-in-version-27&quot;&gt;What’s new for Liquid Glass on watchOS in version 27?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Refinements include updated visuals with darker edges and speculars for better content separation and legibility.&lt;/li&gt;
&lt;li&gt;Significant performance improvements have been made.&lt;/li&gt;
&lt;li&gt;Interactive glass experiences, like dragging buttons, are now available and fun to use.&lt;/li&gt;
&lt;li&gt;For many apps, especially those using the watchOS 10 design language, Liquid Glass updates are automatic.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;do-developers-need-to-do-anything-specific-for-watchos-27-to-use-liquid-glass-effectively&quot;&gt;Do developers need to do anything specific for watchOS 27 to use Liquid Glass effectively?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;For most developers, especially those already using the watchOS 10 design language, no specific actions are required.&lt;/li&gt;
&lt;li&gt;The new Liquid Glass designs and updates are automatically applied.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;are-personal-settings-for-liquid-glass-like-tint-or-clarity-synced-from-ios-to-watchos-or-is-there-a-separate-watch-level-preference&quot;&gt;Are personal settings for Liquid Glass (like tint or clarity) synced from iOS to watchOS, or is there a separate watch-level preference?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;There is no separate watch-level preference for Liquid Glass tint or clarity.&lt;/li&gt;
&lt;li&gt;The design decision was made to preserve legibility on the primarily dark watch interfaces without needing a user-adjustable slider.&lt;/li&gt;
&lt;li&gt;Accessibility features like “Reduced Transparency” and “Increased Contrast” are available on watchOS.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-some-hidden-gems-in-watchos-27&quot;&gt;What are some “hidden gems” in watchOS 27?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Workout Zones API:&lt;/strong&gt; This API, requested for years, provides flexible and easy-to-use workout zone boundaries for heart rate and cycling power. It includes rich &lt;strong&gt;time-in-zone&lt;/strong&gt; data useful for both real-time tracking and post-workout analysis.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reorderable API:&lt;/strong&gt; New in SwiftUI and available on watchOS, this API allows developers to easily implement reorderable collections, used internally for Control Center.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-developers-keep-watchos-widgets-up-to-date-and-what-are-the-best-practices-for-widget-updates&quot;&gt;How can developers keep watchOS widgets up to date, and what are the best practices for widget updates?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;General Guidance:&lt;/strong&gt; No significant new guidance for watchOS 27, but good practices remain. Widgets on the watch face have higher priority than those in the Smart Stack.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update Frequency:&lt;/strong&gt; Expect widgets to update every 15-20 minutes if actively used. Smart Stack widgets update based on user engagement.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update Mechanisms:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Invalidation:&lt;/strong&gt; Invalidate widgets from the app when new data is available.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Timeline Reload Policy:&lt;/strong&gt; Set an expiration for the widget’s timeline for more deterministic refreshes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;APNS-based Refreshes:&lt;/strong&gt; Available since watchOS 26 for server-pushed updates.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Watch Connectivity-based Refreshes:&lt;/strong&gt; New in watchOS 27, allowing phone-to-watch updates.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Widget Types:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Timeline-based Widgets:&lt;/strong&gt; Suitable for frequently updating data like weather or calendars.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Relevant Configuration:&lt;/strong&gt; Use when a widget is relevant at specific places or times.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Live Activities:&lt;/strong&gt; Ideal for session-based experiences (e.g., sports games, ride-sharing) with a defined start and end, offering more runtime for updates.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Controls:&lt;/strong&gt; For performing quick actions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documentation:&lt;/strong&gt; Refer to “Keeping The Widget Up to Date” on the developer website and the Widget Kit Foundations video from WWDC26.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feedback:&lt;/strong&gt; Provide feedback on any unmet needs or friction points.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-best-practices-for-optimizing-heavy-asset-fetching-on-a-standalone-watchos-apps-first-launch-without-relying-on-watch-connectivity&quot;&gt;What are the best practices for optimizing heavy asset fetching on a standalone watchOS app’s first launch without relying on Watch Connectivity?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bundle Essential Assets:&lt;/strong&gt; Include critical assets needed for the initial launch directly within the app bundle.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Provide a Useful Initial Experience:&lt;/strong&gt; Offer users something to interact with or see immediately, rather than just a spinner, while background downloads occur.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prioritize Background Downloads:&lt;/strong&gt; Utilize background &lt;code&gt;URLSession&lt;/code&gt; for fetching non-essential assets after the initial launch.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consider Offline Scenarios:&lt;/strong&gt; Design for situations where the user may not have connectivity on first launch, ensuring a graceful experience.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mask Complexity:&lt;/strong&gt; Craft the user experience to hide the complexities of asset downloading and provide a delightful interaction.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-is-physical-watchos-debugging-done-in-xcode-27&quot;&gt;How is physical watchOS debugging done in Xcode 27?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Xcode 27 improves install and symbol-sync reliability for physical watch debugging.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Device Hub&lt;/strong&gt; supports direct Mac-to-Watch connection without routing through the iPhone.&lt;/li&gt;
&lt;li&gt;Use 5 GHz Wi-Fi for best results; corporate networks may block peer-to-peer connections.&lt;/li&gt;
&lt;li&gt;If issues persist, file feedback with logs from the failing session.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-notable-new-watchos-27-features&quot;&gt;What are notable new watchOS 27 features?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Workout Buddy&lt;/strong&gt; insights for training guidance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Siri AI on Apple Watch&lt;/strong&gt; — coming but not in beta 1.&lt;/li&gt;
&lt;li&gt;Smart Stack holiday surprises and general widget performance/reliability improvements.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>Miká Kruschel</author></item><item><title>Xcode Tips and Tricks</title><link>https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8013</link><guid isPermaLink="true">https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8013</guid><description>Use the #Playground macro in any Swift file to run code snippets and see expression results, similar to a playground.</description><pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;xcode-tips-and-tricks&quot;&gt;Xcode Tips and Tricks&lt;/h1&gt;
&lt;p&gt;Unofficial AI summary of the WWDC26 group lab. May contain mistakes.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/videos/play/wwdc2026/8013&quot;&gt;Watch on Apple Developer&lt;/a&gt; · &lt;a href=&quot;https://kruschel.dev/wwdc26-group-labs-transcripts/wwdc2026-8013.txt&quot;&gt;Raw transcript&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-are-the-most-useful-xcode-tips-and-tricks-that-most-people-may-miss-out-on&quot;&gt;What are the most useful Xcode tips and tricks that most people may miss out on?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use the &lt;code&gt;#Playground&lt;/code&gt; macro in any Swift file to run code snippets and see expression results, similar to a playground.&lt;/li&gt;
&lt;li&gt;Cut text to move to a new file, focus on the file navigator, and paste to create a new file with the content. Xcode will guess the filename.&lt;/li&gt;
&lt;li&gt;Use “Find Call Hierarchy” to quickly understand where a function is being called from, including nested calls.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;Command-Shift-J&lt;/code&gt; to navigate to the current file’s location in the project navigator.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;Open Quickly&lt;/code&gt; (Command-Shift-O) to search for functions or files to quickly navigate the project.&lt;/li&gt;
&lt;li&gt;Combine Command+Shift+J (reveal in navigator) with Open Quickly: find a symbol, then reveal its file location.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;which-recent-xcode-features-deserve-more-attention&quot;&gt;Which recent Xcode features deserve more attention?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Convert Xcode groups to folders (blue folders in the navigator) to significantly reduce project file conflicts, especially on large teams.&lt;/li&gt;
&lt;li&gt;Folders do not record the list of files, leading to fewer diffs in the project file when adding new files.&lt;/li&gt;
&lt;li&gt;Edit schemes to set different user defaults for testing specific features.&lt;/li&gt;
&lt;li&gt;Filter the console output to debug more effectively by focusing on specific components or categories.&lt;/li&gt;
&lt;li&gt;Use the filtering feature in many Xcode menus (including the jump bar) by typing to filter the menu items.&lt;/li&gt;
&lt;li&gt;Pass arguments to SwiftUI previews to render multiple variants (e.g., light/dark mode, dynamic type sizes) in a single preview.&lt;/li&gt;
&lt;li&gt;Open memory graph debugger &lt;code&gt;.memgraph&lt;/code&gt; files in Instruments to see allocation timelines, which can provide more detailed memory footprint information than the memory graph debugger alone.&lt;/li&gt;
&lt;li&gt;Use conditional breakpoints with specific conditions or repetition counts to trigger them only when needed, avoiding constant pausing.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-most-underrated-xcode-features-that-even-experienced-developers-dont-use-enough&quot;&gt;What are the most underrated Xcode features that even experienced developers don’t use enough?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Convert Xcode groups to folders to reduce project conflicts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Different themes per workspace&lt;/strong&gt; in Xcode 27 — set a distinct theme for each project to tell them apart at a glance.&lt;/li&gt;
&lt;li&gt;Change the &lt;strong&gt;debug bar appearance&lt;/strong&gt; to distinguish the debug Xcode from the daily-driver Xcode.&lt;/li&gt;
&lt;li&gt;Pin tabs within the SwiftUI canvas to maintain previews while navigating other files.&lt;/li&gt;
&lt;li&gt;Use Xcode Cloud for automated builds and deployments, simplifying workflows.&lt;/li&gt;
&lt;li&gt;Leverage Xcode’s powerful search capabilities, including regular expressions and symbol searches.&lt;/li&gt;
&lt;li&gt;Combine the search field with the filter field in the find navigator for boolean-style searches.&lt;/li&gt;
&lt;li&gt;Press &lt;strong&gt;Delete&lt;/strong&gt; in the Find navigator to remove individual results and narrow scope.&lt;/li&gt;
&lt;li&gt;Command+click disclosure triangles to collapse sibling groups in the navigator.&lt;/li&gt;
&lt;li&gt;Use the type hierarchy queries (up to root and down to leaves) to understand protocol conformance and subtypes.&lt;/li&gt;
&lt;li&gt;Utilize Instruments’ profiling tools, especially flame graphs combined with top functions, for performance analysis.&lt;/li&gt;
&lt;li&gt;Use the SwiftUI instrument template for specific SwiftUI performance debugging.&lt;/li&gt;
&lt;li&gt;Save custom instrument templates for repeated profiling use cases.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-caveats-should-we-be-aware-of-when-running-xcode-27-beta-on-the-same-machine-with-xcode-26&quot;&gt;What caveats should we be aware of when running Xcode 27 beta on the same machine with Xcode 26?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Running multiple versions of Xcode simultaneously on the same machine is supported.&lt;/li&gt;
&lt;li&gt;Xcode 26 may not run on macOS Golden Gate — plan the &lt;code&gt;xcode-select&lt;/code&gt; setup accordingly.&lt;/li&gt;
&lt;li&gt;Xcode 27 offers an optional stricter project validation checkbox; be aware when opening projects across versions.&lt;/li&gt;
&lt;li&gt;The primary visual difference might be theme customization, with one version appearing more colorful than the other.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-tips-and-tricks-can-minimize-merge-conflicts-in-xcodeproj-files-without-using-third-party-tools&quot;&gt;What tips and tricks can minimize merge conflicts in &lt;code&gt;.xcodeproj&lt;/code&gt; files without using third-party tools?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Convert Xcode groups to blue folders to significantly reduce project file size and conflicts.&lt;/li&gt;
&lt;li&gt;Ensure blue folder targets align closely with the source code they contain to minimize project file entries.&lt;/li&gt;
&lt;li&gt;When converting groups to folders, resolve any preflight errors first, commit those changes, and then complete the migration.&lt;/li&gt;
&lt;li&gt;In the project inspector, check the “minimize cross-project references” option for projects created in the last several years to reduce project file size.&lt;/li&gt;
&lt;li&gt;Manage build settings in &lt;code&gt;.xcconfig&lt;/code&gt; files to keep them separate from the project file.&lt;/li&gt;
&lt;li&gt;Use the help inspector in the build settings editor to find the exact name of build settings.&lt;/li&gt;
&lt;li&gt;Copy build setting rows to easily get the key name for &lt;code&gt;.xcconfig&lt;/code&gt; files.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.xcconfig&lt;/code&gt; files provide an audit trail, comments, and are easy to review in pull requests.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;are-there-any-cool-tricks-with-markdown-in-xcode-and-are-there-any-improvements-on-the-source-control-side-of-things&quot;&gt;Are there any cool tricks with Markdown in Xcode, and are there any improvements on the source control side of things?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;View Markdown files in rendered or source code form directly within Xcode.&lt;/li&gt;
&lt;li&gt;Edit Markdown files seamlessly within the editor, including within agent transcripts or plans.&lt;/li&gt;
&lt;li&gt;View rendered Markdown side-by-side with the source code using the canvas preview button.&lt;/li&gt;
&lt;li&gt;Xcode’s source control navigator has been re-engineered for better performance, especially with repositories containing millions of tags.&lt;/li&gt;
&lt;li&gt;Xcode now uses red and green for diff colors, which can be customized in themes.&lt;/li&gt;
&lt;li&gt;Feedback on source control features, like multi-select for stashes, is actively encouraged.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;when-a-swift-package-manager-package-updates-its-macros-xcode-requires-manual-re-approval-can-macro-trust-be-pinned-to-a-package-identity-instead-of-requiring-re-approval-on-every-update&quot;&gt;When a Swift Package Manager package updates its macros, Xcode requires manual re-approval. Can macro trust be pinned to a package identity instead of requiring re-approval on every update?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;This is a specific use case that warrants filing feedback with details about the package and the workflow.&lt;/li&gt;
&lt;li&gt;The team is surprised that trust is invalidated on every update and wants to investigate further.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-there-a-way-to-open-the-terminal-on-the-project-root-folder-in-xcode&quot;&gt;Is there a way to open the terminal on the project root folder in Xcode?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Not directly, but developers can open Terminal and drag a file reference from the navigator into it to change the directory.&lt;/li&gt;
&lt;li&gt;The file inspector now lists the “working copy relative path,” which can be copied and pasted into the terminal.&lt;/li&gt;
&lt;li&gt;Filing feedback for this functionality, similar to “Show in Finder,” is recommended.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-most-useful-xcode-keyboard-shortcuts&quot;&gt;What are the most useful Xcode keyboard shortcuts?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Command-Shift-J&lt;/code&gt;: Show the current file’s location in the project navigator.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Command-Shift-Y&lt;/code&gt;: Show and hide the debug area.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Control-Option-Command-G&lt;/code&gt;: Rerun the last test.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Command-Option-P&lt;/code&gt;: Refresh previews automatically.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Control-6&lt;/code&gt;: Open the rightmost element of the path control above the editor, allowing scoped “Open Quickly” within the current file.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Command-Option-Up/Down&lt;/code&gt;: Switch between implementation and header files in Objective-C.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Command-Shift-O&lt;/code&gt;: Open Quickly for navigating to symbols or files.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Command-Control-R&lt;/code&gt;: Launch without building.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Control-Backslash&lt;/code&gt;: Jump to the next diff in the current file.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Command-Backslash&lt;/code&gt;: Toggle comment for a line or selection.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-most-common-beginner-mistakes-in-xcode-and-how-do-i-avoid-them&quot;&gt;What are the most common beginner mistakes in Xcode, and how do I avoid them?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Trying to learn all Xcode features at once; focus on essential tools like the source editor, inspectors, and navigators first.&lt;/li&gt;
&lt;li&gt;For code signing, use automatic signing for most cases, as manual signing can be complex for beginners.&lt;/li&gt;
&lt;li&gt;Customize the toolbar to simplify the setup and focus on frequently used controls.&lt;/li&gt;
&lt;li&gt;Start with a new project and immediately see results on the right-hand side, or use playgrounds for quick experimentation.&lt;/li&gt;
&lt;li&gt;Xcode 27 can create a &lt;strong&gt;blank project without the template modal&lt;/strong&gt; for a faster start.&lt;/li&gt;
&lt;li&gt;Use agents to help reorganize code, but review the results carefully.&lt;/li&gt;
&lt;li&gt;Use source control (Git) from the start of any project, even for solo developers, as it’s the best undo system.&lt;/li&gt;
&lt;li&gt;Avoid profiling on the simulator; always profile on an actual device for accurate data.&lt;/li&gt;
&lt;li&gt;Do not profile debug builds; compiler optimizations can skew results.&lt;/li&gt;
&lt;li&gt;Adopt modern frameworks like Swift concurrency and SwiftUI.&lt;/li&gt;
&lt;li&gt;Consider rewriting small open-source projects to learn Xcode and general programming concepts.&lt;/li&gt;
&lt;li&gt;Watch code-along sessions to see tools integrated into workflows while learning new concepts.&lt;/li&gt;
&lt;li&gt;Organize the project structure from the beginning, even for small projects, using folders.&lt;/li&gt;
&lt;li&gt;Experiment in small contexts like sandboxes or playgrounds before organizing larger projects.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-most-efficient-workflows-for-generating-and-maintaining-docc-documentation-alongside-active-development&quot;&gt;What are the most efficient workflows for generating and maintaining DocC documentation alongside active development?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Write documentation comments in the source files; they will appear in the documentation preview assistant.&lt;/li&gt;
&lt;li&gt;Host a DocC archive as a static website for pull request reviews.&lt;/li&gt;
&lt;li&gt;Use the documentation preview assistant to view rendered documentation.&lt;/li&gt;
&lt;li&gt;Consider using agents to add documentation comments, but review them to ensure they don’t reveal implementation details.&lt;/li&gt;
&lt;li&gt;Write articles before releasing features to help internal developers learn them.&lt;/li&gt;
&lt;li&gt;Images in documentation can be configured to automatically swap between light and dark mode.&lt;/li&gt;
&lt;li&gt;DocC is open source; check its repository for implementation details.&lt;/li&gt;
&lt;li&gt;Use the generative AI search feature on developer.apple.com to find resources on DocC.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;which-settings-or-practices-can-improve-build-time-significantly&quot;&gt;Which settings or practices can improve build time significantly?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;Command-Control-R&lt;/code&gt; (Run Without Building) when code changes are not needed for debugging.&lt;/li&gt;
&lt;li&gt;Modularize the project into separate packages or frameworks to isolate changes and reduce rebuilds.&lt;/li&gt;
&lt;li&gt;Use the build log’s assistant editor to analyze the build timeline and identify performance bottlenecks.&lt;/li&gt;
&lt;li&gt;Opt into build settings that warn about slow Swift expression type-checking and break down complex expressions.&lt;/li&gt;
&lt;li&gt;Be cautious with script phases; ensure they only run when necessary and declare their inputs and outputs.&lt;/li&gt;
&lt;li&gt;Consider explicit modules and Swift’s private/internal import features to manage dependencies and reuse build products.&lt;/li&gt;
&lt;li&gt;Consult Xcode forums for specific build performance use cases and problems.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-xcode-previews-load-faster-without-waiting-for-simulator-relaunches&quot;&gt;How can Xcode previews load faster without waiting for simulator relaunches?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ensure good overall build performance, as previews share build artifacts with the main build.&lt;/li&gt;
&lt;li&gt;Once a preview is running, Xcode performs minimal work to reload the current source file and update the preview.&lt;/li&gt;
&lt;li&gt;Modularizing the project can also improve preview load times by optimizing build performance.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;for-automatic-code-formatting-how-can-i-integrate-swiftformat-into-xcode-effectively&quot;&gt;For automatic code formatting, how can I integrate SwiftFormat into Xcode effectively?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Integrate SwiftFormat to run on build, on save, or as a pre-commit Git hook.&lt;/li&gt;
&lt;li&gt;Running SwiftFormat as a pre-commit hook is less disruptive and ensures formatted code is committed.&lt;/li&gt;
&lt;li&gt;Running SwiftFormat when a pull request is ready for review is also a good practice.&lt;/li&gt;
&lt;li&gt;Filing feedback is recommended for specific workflow issues encountered when integrating SwiftFormat.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-most-underutilized-lldb-commands-or-breakpoint-actions-for-isolating-state-changes-without-stopping-execution&quot;&gt;What are the most underutilized LLDB commands or breakpoint actions for isolating state changes without stopping execution?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use breakpoint actions to “Play Sound” for audible feedback when a breakpoint is hit.&lt;/li&gt;
&lt;li&gt;Use breakpoint actions to “Log Message” to print diagnostic information without pausing execution.&lt;/li&gt;
&lt;li&gt;LLDB allows calling any LLDB command from breakpoint actions.&lt;/li&gt;
&lt;li&gt;Conditional breakpoints can be set based on modifier keys (e.g., Shift key) to trigger at a precise moment without constant pausing.&lt;/li&gt;
&lt;li&gt;Breakpoints can be configured to skip a certain number of hits before triggering.&lt;/li&gt;
&lt;li&gt;The “Variables View” in LLDB is often more useful than the &lt;code&gt;po&lt;/code&gt; command for inspecting scope values.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;p/x&lt;/code&gt; in LLDB to print hexadecimal numbers, useful for debugging low-level code.&lt;/li&gt;
&lt;li&gt;Intentionally pausing the program without a breakpoint can help identify where the program is stuck if logging is insufficient.&lt;/li&gt;
&lt;li&gt;Breakpoint actions can be used to print debugging statements without committing them to the codebase.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;can-xcode-show-unused-vars-properties-and-functions&quot;&gt;Can Xcode show unused vars, properties, and functions?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Xcode shows warnings for unused variables because the compiler can reliably determine their lack of use within scope.&lt;/li&gt;
&lt;li&gt;Public properties are not flagged as unused because their usage cannot be reliably determined due to their public accessibility.&lt;/li&gt;
&lt;li&gt;Feedback is welcome for use cases where developers expect unused code to be flagged but Xcode does not.&lt;/li&gt;
&lt;li&gt;“Find Call Hierarchy” can help identify callers of a function, but it’s not a comprehensive solution for all unused code.&lt;/li&gt;
&lt;li&gt;Third-party tools may offer more extensive unused code detection.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;when-should-derived-data-be-deleted-and-what-else-fixes-haunted-builds&quot;&gt;When should derived data be deleted, and what else fixes haunted builds?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Deleting derived data is not a superstition; it can resolve issues caused by build system race conditions or outdated build artifacts.&lt;/li&gt;
&lt;li&gt;Xcode 27 adds a &lt;strong&gt;Delete Derived Data&lt;/strong&gt; menu item for easier cleanup.&lt;/li&gt;
&lt;li&gt;Common reasons for deleting derived data include build order dependencies between targets, disk space issues, or working around build system bugs.&lt;/li&gt;
&lt;li&gt;Xcode 27 has improved build system reliability, reducing the need to delete derived data.&lt;/li&gt;
&lt;li&gt;When developers frequently need to delete derived data, file a bug report with reproducible steps so the build system can be improved.&lt;/li&gt;
&lt;li&gt;Swift build is open source; developers can examine its source code to understand build system behavior.&lt;/li&gt;
&lt;li&gt;Other options when a build is “haunted” include using “Clean Build Folder” or disabling parallelized builds to identify missing dependencies.&lt;/li&gt;
&lt;li&gt;When developers still find yourself deleting derived data, please provide feedback to help improve the experience.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;can-xcode-show-when-agent-context-compression-occurs&quot;&gt;Can Xcode show when agent context compression occurs?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Filing feedback for a compression indicator and a pause before editing mode is recommended.&lt;/li&gt;
&lt;li&gt;Consider using “Plan Mode” to write artifacts to disk, making context persistent and accessible to the model.&lt;/li&gt;
&lt;li&gt;Creating artifacts that can be referenced helps maintain context across sessions or when switching between models.&lt;/li&gt;
&lt;li&gt;Be mindful that CLAUDE.md files loaded into context increase context size. Feedback on workflow impediments is highly valued.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-signing-and-provisioning-profile-mismatches-be-mitigated-in-xcode&quot;&gt;How can signing and provisioning profile mismatches be mitigated in Xcode?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Avoid using distribution certificates for release configurations when debugging or using tools like Instruments, as they require debuggable builds.&lt;/li&gt;
&lt;li&gt;Do not disable the “Code Sign Injects Base Entitlements” setting to work around issues.&lt;/li&gt;
&lt;li&gt;Use automatic signing for local development.&lt;/li&gt;
&lt;li&gt;Xcode Cloud handles signing automatically, simplifying CI workflows.&lt;/li&gt;
&lt;li&gt;For local development, use regular signing for debug and release configurations; distribution signing is only needed for App Store uploads.&lt;/li&gt;
&lt;li&gt;When developers encounter specific code signing issues, consult developer.apple.com/forums for community and engineer support.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-xcode-code-folding-suppress-noise-and-surface-high-value-logic&quot;&gt;How can Xcode code folding suppress noise and surface high-value logic?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;File feedback detailing the desired workflow and what constitutes “visual noise” for the use case.&lt;/li&gt;
&lt;li&gt;Organize source code by splitting definitions across multiple extensions or files to contain less critical code.&lt;/li&gt;
&lt;li&gt;Explore Xcode’s editor menu for code folding actions that might suit the workflow.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>Miká Kruschel</author></item><item><title>Camera and Photo Technologies</title><link>https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8018</link><guid isPermaLink="true">https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8018</guid><description>Yes, the file&apos;s metadata is modified with IPTC and EXIF metadata.</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;camera-and-photo-technologies&quot;&gt;Camera and Photo Technologies&lt;/h1&gt;
&lt;p&gt;Unofficial AI summary of the WWDC26 group lab. May contain mistakes.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/videos/play/wwdc2026/8018&quot;&gt;Watch on Apple Developer&lt;/a&gt; · &lt;a href=&quot;https://kruschel.dev/wwdc26-group-labs-transcripts/wwdc2026-8018.txt&quot;&gt;Raw transcript&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;does-ios-27-tag-ai-edited-photos-with-metadata-or-content-credentials&quot;&gt;Does iOS 27 tag AI-edited photos with metadata or content credentials?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, the file’s metadata is modified with IPTC and EXIF metadata.&lt;/li&gt;
&lt;li&gt;IPTC metadata is updated based on the specific AI modification performed (spatial, reframe, or cleanup).&lt;/li&gt;
&lt;li&gt;In the Photos app, the info panel displays which edit was used after modification.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;will-there-be-an-api-for-third-party-apps-to-use-or-edit-keywords-in-photos&quot;&gt;Will there be an API for third-party apps to use or edit keywords in Photos?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Keywords are a feature available in the Photos app on iOS and Mac, accessible via the info panel.&lt;/li&gt;
&lt;li&gt;Keywords will be reflected in IPTC metadata when exporting images.&lt;/li&gt;
&lt;li&gt;Currently, there is no PhotoKit-level API for fetching or querying based on these keywords.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-optimal-way-to-load-thumbnails-in-a-lazy-grid-with-matched-geometry&quot;&gt;What is the optimal way to load thumbnails in a lazy grid with matched geometry?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;On the Core Graphics side, use &lt;code&gt;openImage(withThumbnails:)&lt;/code&gt; which internally utilizes existing thumbnails or decodes and scales down the main image quickly.&lt;/li&gt;
&lt;li&gt;On the Core Image side, request a scale factor when opening images to instruct Core Image to scale down the image as early as possible.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;can-deferred-start-cause-issues-where-the-user-may-attempt-to-capture-a-photo-before-the-capture-photo-output-has-attached-to-the-session&quot;&gt;Can Deferred Start cause issues where the user may attempt to capture a photo before the capture photo output has attached to the session?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, if only deferred start is used, developers may miss a shot.&lt;/li&gt;
&lt;li&gt;Deferred Start was introduced in iOS 26.&lt;/li&gt;
&lt;li&gt;To prevent this, set the &lt;code&gt;isResponsiveCaptureEnabled&lt;/code&gt; property on the &lt;code&gt;AVCapturePhotoOutput&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;This enables system buffering, allowing quick launches and captures even if the output hasn’t fully initialized, ensuring the moment is not missed.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-best-way-to-get-the-depth-map-and-the-image-for-a-live-viewfinder-and-for-the-taken-image-to-create-a-nice-3d-effect-with-both&quot;&gt;What is the best way to get the depth map and the image for a live viewfinder and for the taken image to create a nice 3D effect with both?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;For the preview side, enable &lt;code&gt;depthDataOutputEnabled&lt;/code&gt; on the preview stream and use &lt;code&gt;AVCaptureSynchronizer&lt;/code&gt; to synchronize with the RGB stream.&lt;/li&gt;
&lt;li&gt;For the still capture side, set &lt;code&gt;depthDataDeliveryEnabled&lt;/code&gt; on &lt;code&gt;AVCapturePhotoSettings&lt;/code&gt; to get depth with the still capture.&lt;/li&gt;
&lt;li&gt;Alternatively, for a live depth effect in preview, enable &lt;code&gt;cinematicVideoCaptureEnabled&lt;/code&gt; on the device input for a simplified solution.&lt;/li&gt;
&lt;li&gt;To access actual depth samples for custom processing, use &lt;code&gt;AVCaptureVideoDataOutput&lt;/code&gt; and &lt;code&gt;AVCaptureDepthDataOutput&lt;/code&gt; with &lt;code&gt;AVCaptureDataOutputSynchronizer&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;can-final-exposure-settings-be-read-before-capture-when-quality-prioritization-overrides-manual-settings&quot;&gt;Can final exposure settings be read before capture when quality prioritization overrides manual settings?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;When &lt;code&gt;quality&lt;/code&gt; or &lt;code&gt;balanced&lt;/code&gt; photo quality prioritization is used, manual controls are not guaranteed and are often overridden.&lt;/li&gt;
&lt;li&gt;This is because these modes involve processing algorithms, including fusion, which require capturing different exposures.&lt;/li&gt;
&lt;li&gt;When developers require precise control over shutter speed and ISO, developers must use &lt;code&gt;speed&lt;/code&gt; for photo prioritization.&lt;/li&gt;
&lt;li&gt;There is &lt;strong&gt;no API to read the final exposure before capture&lt;/strong&gt; when using &lt;code&gt;quality&lt;/code&gt; or &lt;code&gt;balanced&lt;/code&gt; prioritization.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;quality&lt;/code&gt; and &lt;code&gt;balanced&lt;/code&gt; are treated as hints, and for photo formats, manual settings will be ignored in favor of the capture stack’s best algorithms.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-phasset-original-resource-choice-used-for&quot;&gt;What is the &lt;code&gt;PHAsset&lt;/code&gt; original resource choice used for?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;This API relates to the existing feature of RAW plus JPEG capture.&lt;/li&gt;
&lt;li&gt;It allows developers to choose whether the compressed image or the RAW image is considered the “original” for editing purposes.&lt;/li&gt;
&lt;li&gt;It also determines which resource is sourced for creating smaller image derivatives and thumbnails.&lt;/li&gt;
&lt;li&gt;Related APIs include &lt;code&gt;PHContentEditingInput.source&lt;/code&gt; for choosing the resource and change requests on assets for toggling the original resource.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;will-ios-27-support-linear-scene-referred-bayer-raw-preview-streams&quot;&gt;Will iOS 27 support linear scene-referred Bayer RAW preview streams?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Currently, the only way to get scene-referred linear data in camera capture is through the log format (&lt;code&gt;log&lt;/code&gt; and &lt;code&gt;log2&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Direct RAW frame output from camera capture (e.g., for ProRes RAW) includes metadata that is not compatible with what CI or filter would need for rendering.&lt;/li&gt;
&lt;li&gt;The idea of having RAW data from camera capture usable with CI filters is worth exploring for the future.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-must-have-recommendations-for-a-capture-centric-app&quot;&gt;What are must-have recommendations for a capture-centric app?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Performance is critical:&lt;/strong&gt; Ensure a fast launch, responsive capture, and utilize deferred processing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User Experience:&lt;/strong&gt; Focus on the specific user base and their needs; a capture experience for social media differs from a professional photography app.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reliability:&lt;/strong&gt; Ensure the app is stable and dependable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Leverage Sample Code:&lt;/strong&gt; Do not start from scratch; use sample code to understand best practices, such as using a dedicated serial queue for &lt;code&gt;AVCaptureSession&lt;/code&gt; to avoid blocking the UI thread.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Differentiation:&lt;/strong&gt; Identify what makes the app unique and provides value beyond the basic capture functionality.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Photos Framework Integration:&lt;/strong&gt; Properly handle user permissions for accessing the photo library and consider performance implications for capture-to-review workflows.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-optimal-and-recommended-way-for-streaming-video-and-audio-simultaneously-ensuring-synchronization&quot;&gt;What is the optimal and recommended way for streaming video and audio simultaneously, ensuring synchronization?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;AVCaptureSession&lt;/code&gt; for both audio and video by attaching device inputs for the camera and microphone.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AVCaptureSession&lt;/code&gt; synchronizes audio and video sources, providing synchronized output.&lt;/li&gt;
&lt;li&gt;If using a different audio API (e.g., &lt;code&gt;AURemoteIO&lt;/code&gt;), developers will need to use &lt;code&gt;CMClock&lt;/code&gt; and &lt;code&gt;CMClockConvertTime&lt;/code&gt; to synchronize the audio and video clocks.&lt;/li&gt;
&lt;li&gt;Generally, synchronize video to the audio clock to avoid audio rate conversion.&lt;/li&gt;
&lt;li&gt;For network streaming, ensure synchronization before transmission; playback synchronization is handled by APIs like &lt;code&gt;AVPlayer&lt;/code&gt; or &lt;code&gt;AVSampleBufferDisplayLayer&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;why-does-proraw-support-48-megapixel-output-from-a-quad-bayer-sensor-whereas-native-bayer-raw-output-is-limited-to-binned-resolution&quot;&gt;Why does ProRAW support 48-megapixel output from a Quad Bayer sensor, whereas native Bayer RAW output is limited to binned resolution?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Bayer RAW contains raw Bayer data, while ProRAW undergoes debayering and Photonic Engine merging, resulting in RGB linearized data.&lt;/li&gt;
&lt;li&gt;ProRAW’s output format is independent of the sensor’s native format (Bayer or Quad Bayer) because it’s already processed into RGB.&lt;/li&gt;
&lt;li&gt;The ability to output native Quad Bayer RAW is not yet available and would require support in tools like &lt;code&gt;CIImage&lt;/code&gt; filters.&lt;/li&gt;
&lt;li&gt;Debayering Quad Bayer data is significantly more complex than debayering standard Bayer data.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-should-iso-conformant-gain-maps-and-metadata-be-generated-on-ios&quot;&gt;How should ISO-conformant gain maps and metadata be generated on iOS?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Refer to WWDC talks from two years ago that detail the APIs for generating gain maps.&lt;/li&gt;
&lt;li&gt;Core Graphics and Core Image frameworks can handle gain map and ISO gain map data.&lt;/li&gt;
&lt;li&gt;The specifications for gain maps have been added to the HEIF and JPEG specifications.&lt;/li&gt;
&lt;li&gt;Understanding the metadata involves examining how the image is divided into SDR/RGB content and HDR additions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-do-deferred-start-and-setpreparedphotosettingsarray-compose-for-photo-output-warmup&quot;&gt;How do Deferred Start and &lt;code&gt;setPreparedPhotoSettingsArray&lt;/code&gt; compose for photo output warmup?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Deferred Start&lt;/code&gt; primarily focuses on getting the app launch and preview running quickly by moving initialization from before preview to after preview.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;setPreparedPhotoSettingsArray&lt;/code&gt; allows developers to inform the photo output upfront about the worst-case scenario (e.g., quality prioritization plus other features), enabling pre-allocation for the still image pipeline.&lt;/li&gt;
&lt;li&gt;These two APIs are orthogonal and can complement each other.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Deferred Start&lt;/code&gt; does not inherently conflict with using &lt;code&gt;setPreparedPhotoSettingsArray&lt;/code&gt; after the preview is running.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;setPreparedPhotoSettingsArray&lt;/code&gt; can be called at any time, but calling it before starting the session is beneficial.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;will-adjusting-the-phasset-new-rating-property-require-a-phassetchangerequest&quot;&gt;Will adjusting the &lt;code&gt;PHAsset&lt;/code&gt; new rating property require a &lt;code&gt;PHAssetChangeRequest&lt;/code&gt;?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, adjusting the rating property of a &lt;code&gt;PHAsset&lt;/code&gt; requires a &lt;code&gt;PHAssetChangeRequest&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;rating&lt;/code&gt; property accepts values from &lt;code&gt;unset&lt;/code&gt; to 1 through 5.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-there-a-native-way-to-obtain-metadata-of-the-original-file-type-png-jpeg-etc-from-a-photo-selected-via-the-photos-picker&quot;&gt;Is there a native way to obtain metadata of the original file type (PNG, JPEG, etc.) from a photo selected via the Photos picker?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;When using &lt;code&gt;Transferable&lt;/code&gt; to set up data, ensure developers are specifying the &lt;code&gt;UTType&lt;/code&gt; instead of leaving it as a default image type.&lt;/li&gt;
&lt;li&gt;Sample code for the Photos picker on developer.apple.com may provide further guidance.&lt;/li&gt;
&lt;li&gt;Some conversion might occur in the Photos picker if users disable captions or location data, but if developers are consistently getting PNG output, double-check the &lt;code&gt;UTType&lt;/code&gt; for &lt;code&gt;Transferable&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-there-a-way-to-learn-about-the-adjustment-plist-format-that-the-apple-photos-app-writes-and-when-exporting-that-file-is-there-a-way-to-import-those-adjustments-back-into-photos&quot;&gt;Is there a way to learn about the adjustment Plist format that the Apple Photos app writes, and when exporting that file, is there a way to import those adjustments back into Photos?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;There is currently no API available to decode the adjustment Plist format used by the Apple Photos app.&lt;/li&gt;
&lt;li&gt;If this functionality is desirable for the app, file a feedback request.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-biggest-mistakes-a-developer-can-make-when-building-camera-heavy-apps-on-iphone&quot;&gt;What are the biggest mistakes a developer can make when building camera-heavy apps on iPhone?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Running &lt;code&gt;AVCaptureSession&lt;/code&gt; on the main thread:&lt;/strong&gt; This blocks the UI and leads to a poor user experience. Always use a dedicated serial queue for &lt;code&gt;AVCaptureSession&lt;/code&gt; operations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not using &lt;code&gt;beginConfiguration&lt;/code&gt; and &lt;code&gt;commitConfiguration&lt;/code&gt; for session reconfiguration:&lt;/strong&gt; When changing multiple properties of the &lt;code&gt;AVCaptureSession&lt;/code&gt;, use these methods to ensure the underlying graph is reconfigured only once, improving efficiency.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Using &lt;code&gt;AVCaptureVideoDataOutput&lt;/code&gt; for preview when &lt;code&gt;AVCaptureVideoPreviewLayer&lt;/code&gt; suffices:&lt;/strong&gt; When developers only need to render the preview, &lt;code&gt;AVCaptureVideoPreviewLayer&lt;/code&gt; is highly optimized and more efficient than processing buffers from &lt;code&gt;AVCaptureVideoDataOutput&lt;/code&gt;. Use &lt;code&gt;AVCaptureVideoDataOutput&lt;/code&gt; only if developers need to interact with the buffers (e.g., for metadata or drawing).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-suggestions-for-a-close-to-native-performance-way-to-achieve-a-zoom-scroll-and-pan-feature-for-photo-images-up-to-their-original-max-resolution-without-pixelating&quot;&gt;What are the suggestions for a close-to-native performance way to achieve a zoom, scroll, and pan feature for photo images, up to their original max resolution without pixelating?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use Core Image, which is designed for UI movement, zoom, and pan by caching decoding pipeline operations.&lt;/li&gt;
&lt;li&gt;Core Image allows developers to decode only the visible rectangle and caches the results, enabling smooth interaction even with very large images.&lt;/li&gt;
&lt;li&gt;For RAW images, &lt;code&gt;CIImage&lt;/code&gt; has a counterpart, &lt;code&gt;CIImage.rawFilter&lt;/code&gt;, with similar capabilities for smooth zooming and panning.&lt;/li&gt;
&lt;li&gt;Core Image’s Region of Interest (ROI) management optimizes performance by recomputing only the zoomed-in area, even for large images.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-often-can-siri-camera-intelligence-be-used-and-does-it-affect-picture-quality&quot;&gt;How often can Siri camera intelligence be used, and does it affect picture quality?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Developers can use the Siri camera intelligence feature as much as the goal is to on the device.&lt;/li&gt;
&lt;li&gt;Captures from this feature are saved to the Siri app, not the user’s normal photo library.&lt;/li&gt;
&lt;li&gt;The quality is screen-resolution aspect ratio, meaning developers do not get the full image quality of photo mode.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-the-spatial-reframe-3d-reconstruction-pipeline-available-to-developers&quot;&gt;Is the spatial reframe 3D reconstruction pipeline available to developers?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;There is no developer API available for using the spatial reframe capability directly.&lt;/li&gt;
&lt;li&gt;ARKit framework offers some capabilities for 3D scene capture, reconstruction, and manipulation, but it’s not a direct equivalent to the Photos app’s reframe editing solution.&lt;/li&gt;
&lt;li&gt;For depth sensing, consider using the LiDAR camera on Pro phones via &lt;code&gt;AVCaptureDevice&lt;/code&gt; or the TrueDepth camera on the front-facing camera.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-should-camera-capture-orientation-be-handled-across-ios-ipados-and-macos&quot;&gt;How should camera capture orientation be handled across iOS, iPadOS, and macOS?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Handling device orientation is necessary because camera mounting and device orientation can vary.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;AVCaptureDevice.RotationCoordinator&lt;/code&gt; to determine the correct rotation degree for preview or to keep an image horizon-level upright.&lt;/li&gt;
&lt;li&gt;Developers can also set the &lt;code&gt;videoRotationAngle&lt;/code&gt; on the &lt;code&gt;AVCaptureConnection&lt;/code&gt; to have the framework automatically rotate the output.&lt;/li&gt;
&lt;li&gt;For video data output, rotation physically rotates buffers; for photo output and movies, EXIF data is used for rotation on playback.&lt;/li&gt;
&lt;li&gt;Refer to the WWDC session “Support the Center Stage Front Camera in The iOS App” for detailed guidance on handling rotation correctly and defending against future changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-it-possible-to-capture-24-megapixel-images-with-depth-data-on-deferred-photo-capture&quot;&gt;Is it possible to capture 24-megapixel images with depth data on deferred photo capture?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, it is possible to capture 24-megapixel images with depth data.&lt;/li&gt;
&lt;li&gt;Ensure developers opt into deferred processing, as 24-megapixel processing is time-consuming.&lt;/li&gt;
&lt;li&gt;Verify that the selected device supports 24-megapixel maximum photo dimensions.&lt;/li&gt;
&lt;li&gt;Select &lt;code&gt;quality&lt;/code&gt; prioritization and enable &lt;code&gt;depthDataDeliveryEnabled&lt;/code&gt; to receive captures with depth data.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-apis-support-multi-camera-streaming-apps&quot;&gt;What APIs support multi-camera streaming apps?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Locked Frame Duration:&lt;/strong&gt; Use the &lt;code&gt;lockedFrameDuration&lt;/code&gt; API to ensure a consistent frame rate (e.g., 29.97 fps) and synchronized audio.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GenLock:&lt;/strong&gt; Synchronize multiple iPhones to an external sync source using GenLock, often with third-party hardware like Blackmagic devices. This ensures perfect synchronization for multi-cam shoots.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Timecode Generation:&lt;/strong&gt; Output and associate timecode with video frames for easier post-production synchronization.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AVPro Video Storage API:&lt;/strong&gt; For ProRes 4K 30 video captures, this API provides deterministic file write speeds to prevent frame drops, especially on older or fragmented disks.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-there-a-niche-new-api-that-may-not-be-talked-about-so-much&quot;&gt;Is there a niche new API that may not be talked about so much?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AVPro Video Storage API:&lt;/strong&gt; This API is a performance optimization for ProRes video captures. It provides a pre-allocated file on disk for writing, ensuring deterministic write speeds and preventing frame drops, even on older devices.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RAW 9 Engine:&lt;/strong&gt; A new ML-based engine for enhancing RAW image processing (debayering, denoising) for third-party cameras, offering outstanding output quality.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>Miká Kruschel</author></item><item><title>Icon Composer for Beginners</title><link>https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8012</link><guid isPermaLink="true">https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8012</guid><description>Start by conceptualizing a visual metaphor for the app.</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;icon-composer-for-beginners&quot;&gt;Icon Composer for Beginners&lt;/h1&gt;
&lt;p&gt;Unofficial AI summary of the WWDC26 group lab. May contain mistakes.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/videos/play/wwdc2026/8012&quot;&gt;Watch on Apple Developer&lt;/a&gt; · &lt;a href=&quot;https://kruschel.dev/wwdc26-group-labs-transcripts/wwdc2026-8012.txt&quot;&gt;Raw transcript&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-is-the-recommended-workflow-for-designing-an-app-icon-from-scratch-using-icon-composer&quot;&gt;What is the recommended workflow for designing an app icon from scratch using Icon Composer?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Start by conceptualizing a visual metaphor for the app.&lt;/li&gt;
&lt;li&gt;Design the icon in a vector graphics tool, focusing on composition and layer organization.&lt;/li&gt;
&lt;li&gt;Export layers as individual files and import them into Icon Composer for annotation and Liquid Glass customization.&lt;/li&gt;
&lt;li&gt;Use Figma, Sketch, Illustrator, or Photoshop &lt;strong&gt;templates&lt;/strong&gt; from the Icon Composer website; Illustrator has an export script.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vectors are preferred over bitmaps&lt;/strong&gt; — bitmaps are allowed but not recommended.&lt;/li&gt;
&lt;li&gt;Use simple, elegant vector shapes rather than complex fine details for better adaptability across different sizes and conditions.&lt;/li&gt;
&lt;li&gt;Export layers at full canvas size to maintain correct positioning when imported into Icon Composer.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-common-mistakes-developers-make-that-cause-icons-to-look-good-in-icon-composer-but-weak-on-device&quot;&gt;What are common mistakes developers make that cause icons to look good in Icon Composer but weak on device?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Designing icons that are too complex, especially when using glass features like refraction.&lt;/li&gt;
&lt;li&gt;Failing to evaluate the icon at all different sizes and presentations it will appear in.&lt;/li&gt;
&lt;li&gt;Not testing the icon on a device in various lighting conditions and alongside other app icons.&lt;/li&gt;
&lt;li&gt;Overlooking the importance of simplicity, which is crucial for icons to be legible at small sizes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-problem-was-apple-trying-to-solve-with-icon-composer-and-what-is-the-broader-vision-for-app-icons&quot;&gt;What problem was Apple trying to solve with Icon Composer, and what is the broader vision for app icons?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;To provide a dedicated tool that allows icons to adapt and live within the device’s ecosystem (Mac, iPhone, Watch) by supporting features like light mode, dark mode, and clear adaptation.&lt;/li&gt;
&lt;li&gt;To enable icons to integrate with the system’s design language and material qualities, moving beyond static bitmaps to a resolution-independent representation.&lt;/li&gt;
&lt;li&gt;To give designers control over how Liquid Glass effects interact with individual icon elements, ensuring a harmonious user experience across all platforms and OS versions.&lt;/li&gt;
&lt;li&gt;Figma/Sketch glass recipes are &lt;strong&gt;not 1:1&lt;/strong&gt; with Icon Composer — expect to re-tune effects.&lt;/li&gt;
&lt;li&gt;Game and raster icon examples (e.g., Camera app) show bitmap-based icons can work but need extra care.&lt;/li&gt;
&lt;li&gt;To streamline the process of deploying a single icon that looks good across multiple devices and appearance modes, rather than managing numerous individual assets.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-are-ios-26-liquid-glass-icons-upgraded-to-the-ios-27-style&quot;&gt;How are iOS 26 Liquid Glass icons upgraded to the iOS 27 style?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Open the existing Icon Composer file in the updated Icon Composer; the new rendering will be applied automatically.&lt;/li&gt;
&lt;li&gt;Review and fine-tune specular highlights, especially for overlapping layers, by configuring them to “inside” or “outside” based on layer colors.&lt;/li&gt;
&lt;li&gt;Adjust shadows and refraction settings to optimize for the new rendering.&lt;/li&gt;
&lt;li&gt;Consider reducing the use of translucency, as this is a design change that does not happen automatically and may require manual adjustment for sharpness and legibility.&lt;/li&gt;
&lt;li&gt;Note that the application does not need to recompile to benefit from the new look; the icon adapts automatically.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;when-using-icon-composer-what-are-the-various-blend-modes-and-when-should-they-be-used&quot;&gt;When using Icon Composer, what are the various blend modes and when should they be used?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Blend modes determine how foreground and background pixels interact to form a final result.&lt;/li&gt;
&lt;li&gt;Darken, Multiply, and Plus Darker generally darken; Lighten, Screen, and Plus Lighter generally lighten — but the naming is historical and math-based, so try modes rather than relying on the labels.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Plus Darker&lt;/code&gt; and &lt;code&gt;Plus Lighter&lt;/code&gt; are used extensively in system glass controls and can help retain vibrancy.&lt;/li&gt;
&lt;li&gt;Blend modes are useful for making icons feel more like glass by controlling color intensity and how layers blend together.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;does-icon-composer-allow-previewing-liquid-glass-transparency-across-the-system-wide-slider-range-in-ios-27&quot;&gt;Does Icon Composer allow previewing Liquid Glass transparency across the system-wide slider range in iOS 27?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;No, Liquid Glass in clear mode for app icons does not respond to the system-wide transparency slider and remains constant.&lt;/li&gt;
&lt;li&gt;This is a deliberate choice to ensure consistent legibility across all possible foreground and background content combinations.&lt;/li&gt;
&lt;li&gt;The system aims to provide a consistent and legible experience regardless of user-selected wallpapers or system glass variations.&lt;/li&gt;
&lt;li&gt;A single mono mode is used for grayscale annotations, supporting light clear, dark clear, and all tinted modes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-do-flat-2d-brand-marks-get-a-convincing-physical-appearance-in-liquid-glass&quot;&gt;How do flat 2D brand marks get a convincing physical appearance in Liquid Glass?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Icon Composer automatically applies Liquid Glass properties to imported layers, which can be fine-tuned based on the artwork’s shape and size.&lt;/li&gt;
&lt;li&gt;Consider how the brand identity is executed in physical mediums (e.g., car logos) and adapt the icon accordingly.&lt;/li&gt;
&lt;li&gt;Expose layers that might have been hidden or subtracted in the original flat design to simulate depth and layering (e.g., eyes above a face, solid shapes instead of eraser paths).&lt;/li&gt;
&lt;li&gt;Think of the app icon as the “face” of the app, which can adapt with accessories like sunglasses and a hat while remaining recognizable.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-are-updated-icon-composer-icons-included-in-an-xcode-project&quot;&gt;How are updated Icon Composer icons included in an Xcode project?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Drag the Icon Composer file directly into the Xcode project, alongside the Swift files, as a normal resource.&lt;/li&gt;
&lt;li&gt;Xcode will suggest the correct target membership; verify or adjust this in the import dialog.&lt;/li&gt;
&lt;li&gt;In Xcode’s target editor, ensure the “App Icon” name matches the imported file (usually “App Icon” without a “.icon” extension).&lt;/li&gt;
&lt;li&gt;Remove any existing icons from the asset catalog when developers are replacing them with an Icon Composer file.&lt;/li&gt;
&lt;li&gt;There are no changes from the previous year in how Icon Composer documents are integrated into Xcode projects.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;do-the-actual-layers-inside-icon-composer-automatically-become-glassy-in-the-ios-27-style&quot;&gt;Do the actual layers inside Icon Composer automatically become glassy in the iOS 27 style?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, imported layers are rendered as Liquid Glass layers by default.&lt;/li&gt;
&lt;li&gt;For multiple layers, it’s recommended to group them so that Liquid Glass properties can be applied and configured at the group level.&lt;/li&gt;
&lt;li&gt;Developers can choose which layers to apply Liquid Glass effects to and which to opt out of if they have pre-rendered treatments (e.g., raster images, watermarks).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;when-in-tint-mode-alone-background-colors-look-washed-out-and-lack-contrast-with-text-what-settings-can-be-tweaked-for-better-vibrancy&quot;&gt;When in tint mode alone, background colors look washed out and lack contrast with text. What settings can be tweaked for better vibrancy?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Optimize for different modes by adjusting the color of the tint mode within Icon Composer, choosing either a desaturated or vibrant color.&lt;/li&gt;
&lt;li&gt;Ensure foreground elements are white or close to white to maintain contrast.&lt;/li&gt;
&lt;li&gt;Update to the latest versions of iOS 27 and Icon Composer, as tweaks have been made to address contrast issues.&lt;/li&gt;
&lt;li&gt;Pay attention to the shape of objects within the icon and avoid overly fine details or too many surrounding elements.&lt;/li&gt;
&lt;li&gt;When supplying custom backgrounds, be mindful of luminance values, especially in mono mode, and aim to maximize dynamic range with dark darks and bright highlights.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-do-developers-get-icon-composer&quot;&gt;How do developers get Icon Composer?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Icon Composer comes with Xcode.&lt;/li&gt;
&lt;li&gt;It is also available as a standalone download directly from Apple.com.&lt;/li&gt;
&lt;li&gt;Download templates and sample files from the Icon Composer website for experimentation.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;Device Hub&lt;/strong&gt; to preview icons across devices, light/dark variants, and appearance modes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-do-overlapping-layers-work-in-icon-composer-icons&quot;&gt;How do overlapping layers work in Icon Composer icons?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Slice elements into individual layers; what appears as a few elements is often composed of more.&lt;/li&gt;
&lt;li&gt;Use shadows to visually indicate that one element is passing beneath another.&lt;/li&gt;
&lt;li&gt;Assemble layers carefully so that when reassembled, they create the illusion of one shape behind another.&lt;/li&gt;
&lt;li&gt;This requires detailed layer separation and assembly to simulate depth.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-are-icons-handled-for-colorblind-users&quot;&gt;How are icons handled for colorblind users?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Icons should be recognizable through form, highlights, shading, and contrast, not solely relying on color.&lt;/li&gt;
&lt;li&gt;Ensure icons work and are recognizable in clear or tinted modes, regardless of color perception.&lt;/li&gt;
&lt;li&gt;Develop a strong fundamental shape and design language for the icon’s form before adding colors, gradients, or glass effects.&lt;/li&gt;
&lt;li&gt;Mono annotation is crucial for adjusting contrast so shapes remain legible in all appearance modes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-beginners-create-an-app-icon-from-scratch&quot;&gt;How can beginners create an app icon from scratch?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Begin by defining how to represent the app and what to communicate visually.&lt;/li&gt;
&lt;li&gt;Capture the essence of the app in a distilled image that is recognizable and memorable.&lt;/li&gt;
&lt;li&gt;Start by sketching ideas on paper with a pencil to explore shapes and forms.&lt;/li&gt;
&lt;li&gt;Focus on the core message and visual identity before moving to digital tools.&lt;/li&gt;
&lt;li&gt;Consider the relationship between the app’s name and potential metaphors for the icon.&lt;/li&gt;
&lt;li&gt;Simplify the design to its core meaning without losing significance (e.g., not needing 88 piano keys for a piano app).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-apples-best-practices-for-balancing-a-shared-liquid-glass-icon-with-platform-specific-tweaks-while-maintaining-brand-consistency&quot;&gt;What are Apple’s best practices for balancing a shared Liquid Glass icon with platform-specific tweaks while maintaining brand consistency?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use Icon Composer to adapt icons to different platform shapes (e.g., watchOS circles vs. iOS rounded rectangles) by repositioning and scaling elements.&lt;/li&gt;
&lt;li&gt;The Maps icon on watchOS is a good example of repositioning elements for a smaller circular canvas.&lt;/li&gt;
&lt;li&gt;Ensure that the design created in Icon Composer is faithfully executed and distributed across all endpoints, including App Store product pages.&lt;/li&gt;
&lt;li&gt;The system renders reasonable representations for earlier OS versions, reflecting the full rendering quality while adhering to platform-specific constraints like corner radii.&lt;/li&gt;
&lt;li&gt;Prioritize the overall current visual brand identity while ensuring fundamental aspects like icon shape are maintained.&lt;/li&gt;
&lt;li&gt;Simplify elements where necessary, especially for smaller sizes or different form factors, to maintain legibility and impact.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-notable-new-icon-composer-features-and-top-radar-items&quot;&gt;What are notable new Icon Composer features and top radar items?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Refraction inspector for exploring design space; top radar item: automatic specular highlight defaults.&lt;/li&gt;
&lt;li&gt;Usability enhancements like snap-to guides and grids.&lt;/li&gt;
&lt;li&gt;Refraction control for navigating the design space.&lt;/li&gt;
&lt;li&gt;Copy and paste attributes between icons; automatic gradients and 2D custom modifiers.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>Miká Kruschel</author></item><item><title>Privacy and Security</title><link>https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8009</link><guid isPermaLink="true">https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8009</guid><description>Indirect prompt injection involves an attacker sending malicious instructions within a document that an agentic tool might read, causing the model to perform unintended actions.</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;privacy-and-security&quot;&gt;Privacy and Security&lt;/h1&gt;
&lt;p&gt;Unofficial AI summary of the WWDC26 group lab. May contain mistakes.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/videos/play/wwdc2026/8009&quot;&gt;Watch on Apple Developer&lt;/a&gt; · &lt;a href=&quot;https://kruschel.dev/wwdc26-group-labs-transcripts/wwdc2026-8009.txt&quot;&gt;Raw transcript&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;how-is-apple-ensuring-models-are-not-hijacked-through-prompt-injection-techniques&quot;&gt;How is Apple ensuring models are not hijacked through prompt injection techniques?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Indirect prompt injection involves an attacker sending malicious instructions within a document that an agentic tool might read, causing the model to perform unintended actions.&lt;/li&gt;
&lt;li&gt;Models are most at risk when they have access to private data, can perform actions, and have access to untrusted context.&lt;/li&gt;
&lt;li&gt;Mitigation strategies include deterministic methods like confirmation prompts and probabilistic methods like highlighting untrusted content.&lt;/li&gt;
&lt;li&gt;A WWDC session on securing agentic features provides further details.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-happens-to-data-sent-to-private-cloud-compute-or-a-third-party-model&quot;&gt;What happens to data sent to Private Cloud Compute or a third-party model?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;For third-party AI APIs (e.g., Anthropic, Google), Apple’s PCC guarantees do not apply. Developers must review those providers’ terms.&lt;/li&gt;
&lt;li&gt;When using Apple’s PCC interfaces, data is processed with stateless computation and non-targetability guarantees.&lt;/li&gt;
&lt;li&gt;Data sent to PCC is only used to fulfill the request and is not accessible by Apple or anyone else.&lt;/li&gt;
&lt;li&gt;Data is removed from PCC nodes once the request is complete, and nodes are wiped clean upon reboot.&lt;/li&gt;
&lt;li&gt;PCC guarantees are cryptographically provable and verifiable through documentation and tooling.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-distinction-does-apple-draw-between-developer-collected-data-and-third-party-processor-data&quot;&gt;What distinction does Apple draw between developer-collected data and third-party processor data?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Developers are responsible for declaring all data collected from their app, regardless of whether it’s sent to their own servers or a third-party service.&lt;/li&gt;
&lt;li&gt;This responsibility is tied to App Store “Nutrition Labels,” where developers must accurately represent their app’s privacy practices.&lt;/li&gt;
&lt;li&gt;Developers must understand what third parties do with the data and their specific uses to correctly inform users.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-security-risks-are-there-when-using-the-new-agentic-coding-features-in-xcode-and-what-are-the-best-practices-to-mitigate-them&quot;&gt;What security risks are there when using the new agentic coding features in Xcode, and what are the best practices to mitigate them?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Risks are similar to prompt injection vulnerabilities, requiring a secure-by-design approach.&lt;/li&gt;
&lt;li&gt;Xcode features include additional mitigations like allow-listing common tools that Xcode can call.&lt;/li&gt;
&lt;li&gt;Each use case is evaluated to determine the appropriate set of mitigations for the user experience.&lt;/li&gt;
&lt;li&gt;Security is a primary consideration during the design and development of these features before release.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-core-architecture-behind-private-cloud-compute-pcc-for-cloud-ai-processing-and-how-does-apple-mathematically-ensure-no-one-can-see-this-data&quot;&gt;What is the core architecture behind Private Cloud Compute (PCC) for cloud AI processing, and how does Apple mathematically ensure no one can see this data?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;PCC offers verifiable privacy and transparency, going beyond traditional confidential compute with additional security layers.&lt;/li&gt;
&lt;li&gt;For PCC infrastructure running on Google Cloud, two verifiable attestations for every piece of hardware from two separate vendors are required.&lt;/li&gt;
&lt;li&gt;Complex data parsing (e.g., images) is isolated into separate nodes with extra sandboxing.&lt;/li&gt;
&lt;li&gt;PCC systems are hardened operating systems purpose-built for safe and isolated user data processing.&lt;/li&gt;
&lt;li&gt;A virtual research environment is provided, allowing independent researchers to verify Apple’s claims by running the same software on their own machines.&lt;/li&gt;
&lt;li&gt;This research environment is eligible for Apple’s security bounty program and is publicly available.&lt;/li&gt;
&lt;li&gt;Continuous transparency is a key aspect; backend changes are noticeable and verifiable in real-time.&lt;/li&gt;
&lt;li&gt;Compromised nodes will have changed attestations, causing devices to automatically reject them.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;are-there-new-features-for-auditing-an-apps-privacy-and-security-posture&quot;&gt;Are there new features for auditing an app’s privacy and security posture?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;AI models can be used as tools to review an app’s privacy and security guarantees and check expected behavior.&lt;/li&gt;
&lt;li&gt;Developers should leverage security and privacy features like out-of-process pickers to help build secure apps.&lt;/li&gt;
&lt;li&gt;WWDC sessions on security and privacy offer valuable guidance.&lt;/li&gt;
&lt;li&gt;Frameworks like Network Framework, when using TLS, default to the latest post-quantum cipher suites for enhanced security.&lt;/li&gt;
&lt;li&gt;CloudKit provides a secure way to sync user data between devices without requiring developers to manage their own servers.&lt;/li&gt;
&lt;li&gt;Developers are responsible for the privacy and security of their users’ data.&lt;/li&gt;
&lt;li&gt;Focus on inputs to the application and where user data is vended to others.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-privacy-and-security-tools-should-new-apple-platform-developers-learn-first&quot;&gt;What privacy and security tools should new Apple platform developers learn first?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Privacy:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;CloudKit for syncing data between devices.&lt;/li&gt;
&lt;li&gt;Keychain for secure on-device storage.&lt;/li&gt;
&lt;li&gt;CryptoKit library for cryptographic operations.&lt;/li&gt;
&lt;li&gt;Encourage users to adopt Passkeys.&lt;/li&gt;
&lt;li&gt;Practice data minimization: consider if access to user data is truly necessary.&lt;/li&gt;
&lt;li&gt;Use out-of-process pickers for data like photos and contacts to allow user selection.&lt;/li&gt;
&lt;li&gt;For location data, consider if only one-time access is needed.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Utilize data protection classes for Keychain and file storage to classify data sensitivity (e.g., “available after first unlock”).&lt;/li&gt;
&lt;li&gt;Leverage platform-native methods like CloudKit APIs for secure data handling.&lt;/li&gt;
&lt;li&gt;Focus on inputs to the application and how much trust is placed in them.&lt;/li&gt;
&lt;li&gt;Consider where user information is vended to others.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Telemetry:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Start with data minimization and define the specific question developers need to answer.&lt;/li&gt;
&lt;li&gt;Ensure telemetry is actionable (e.g., leads to code changes or business decisions).&lt;/li&gt;
&lt;li&gt;Communicate to users what data is being used and why.&lt;/li&gt;
&lt;li&gt;Consider identifiers: rotating, session-based, or device-based.&lt;/li&gt;
&lt;li&gt;Employ strategies like bucketing and de-identifying data.&lt;/li&gt;
&lt;li&gt;Explore Private Federated Learning and Differential Privacy for collecting sensitive data with mathematical guarantees of non-identifiability.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Passkeys:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Adopt Passkeys from the start for user accounts, as they are designed to replace passwords and are phishing-resistant.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;if-a-user-stores-highly-personal-journal-entries-readings-or-history-in-swift-data-what-are-apples-recommended-approaches-for-protecting-that-data-while-still-enabling-search-and-synchronization&quot;&gt;If a user stores highly personal journal entries, readings, or history in Swift data, what are Apple’s recommended approaches for protecting that data while still enabling search and synchronization?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;On-device protection:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Use data protection classes for Keychain keys (e.g., “only when unlocked,” “only when biometrically unlocked”).&lt;/li&gt;
&lt;li&gt;Set data protection classes for files on disk (e.g., “only when device is unlocked”).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Synchronization with CloudKit:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;CKRecord.encryptedValues&lt;/code&gt; for end-to-end encryption, especially for users with Advanced Data Protection.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enabling search and indexing:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Keys may remain viable for some period of hours after device lock, allowing background indexing — the exact API name and configurability are unclear.&lt;/li&gt;
&lt;li&gt;After this period, the key locks and the data becomes inaccessible.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Example:&lt;/strong&gt; Contacts data protection class ensures data is only available after the phone is fully unlocked with a passcode.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;with-the-xcode-ai-coding-features-can-xcode-be-run-inside-a-virtual-machine-on-an-air-gapped-mac-walled-off-from-the-internet-to-help-improve-security-and-privacy&quot;&gt;With the Xcode AI coding features, can Xcode be run inside a virtual machine on an air-gapped Mac walled off from the internet to help improve security and privacy?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Existing code completion features are entirely on-device and work offline.&lt;/li&gt;
&lt;li&gt;Other AI features, particularly those integrating with third-party coding tools or providers (e.g., Claude Code or OpenAI Codex), will require an internet connection.&lt;/li&gt;
&lt;li&gt;The ability to run in an air-gapped environment depends on the specific AI feature being used.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-does-the-new-siri-ai-ensure-privacy-and-security&quot;&gt;How does the new Siri AI ensure privacy and security?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Siri AI leverages Private Cloud Compute (PCC) for processing requests that require larger models hosted in the cloud.&lt;/li&gt;
&lt;li&gt;On-device protections, including entitlements and sandboxing, ensure that only authorized processes access user data before sending it to PCC.&lt;/li&gt;
&lt;li&gt;A secure daemon processes prompts and prepares them for PCC.&lt;/li&gt;
&lt;li&gt;When interacting with third-party apps, data is minimized and only the data relevant to the query is sent.&lt;/li&gt;
&lt;li&gt;User choice is respected; for example, users can control whether Siri uses their location.&lt;/li&gt;
&lt;li&gt;Apple prioritizes on-device processing, only using PCC when necessary for large foundation models or operations too complex for the device.&lt;/li&gt;
&lt;li&gt;Multi-turn conversations may involve back-and-forth communication with PCC, with on-device protections still applying.&lt;/li&gt;
&lt;li&gt;Apple Silicon enables significant on-device processing, creating security boundaries where platform technologies can be applied.&lt;/li&gt;
&lt;li&gt;Optimization of models to run on-device by the AI/ML and Silicon teams enhances privacy and reduces reliance on PCC.&lt;/li&gt;
&lt;li&gt;Developers can also use the &lt;strong&gt;Core AI&lt;/strong&gt; framework to run custom on-device models with platform guarantees.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-tcc-transparency-consent-and-control&quot;&gt;What is TCC (Transparency, Consent, and Control)?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;TCC refers to frameworks and protections on-device that allow apps to request user access to additional data.&lt;/li&gt;
&lt;li&gt;Developers use the TCC framework to prompt users for access to data like photos or microphone access.&lt;/li&gt;
&lt;li&gt;Users can grant or deny these requests, ensuring apps only access data with explicit permission.&lt;/li&gt;
&lt;li&gt;This provides users with a high level of trust that an app does not have unauthorized access to their sensitive data.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;will-siri-ai-have-a-new-configurable-policy-in-an-mdm-solution-when-released&quot;&gt;Will Siri AI have a new configurable policy in an MDM solution when released?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, existing MDM controls for Siri will continue to apply.&lt;/li&gt;
&lt;li&gt;Enterprises can configure how they want to use Siri AI features, potentially selecting specific functionalities.&lt;/li&gt;
&lt;li&gt;Safari automatic password-changing was also mentioned as an enterprise enabler for small businesses.&lt;/li&gt;
&lt;li&gt;Developers can submit feedback requests for proposed MDM configurations.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;are-there-any-new-enhancements-to-safaris-intelligent-tracking-prevention-itp-on-the-new-oss&quot;&gt;Are there any new enhancements to Safari’s Intelligent Tracking Prevention (ITP) on the new OSs?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Apple continues to invest in and evolve ITP.&lt;/li&gt;
&lt;li&gt;While there are no specific new enhancements to reference this year, ITP remains an important technology.&lt;/li&gt;
&lt;li&gt;Further details can be found on WebKit.org.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-apps-communicate-security-and-privacy-without-sounding-like-marketing&quot;&gt;How can apps communicate security and privacy without sounding like marketing?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;App Store Nutrition Labels:&lt;/strong&gt; Provide an easy way for users to understand an app’s privacy practices before downloading.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;In-App Transparency:&lt;/strong&gt; Allow users to see what data the app has collected about them.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Privacy Assurances:&lt;/strong&gt; Define simple, understandable privacy promises for each feature that act as a guiding principle for development.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consistency:&lt;/strong&gt; Continuously demonstrate commitment to privacy and security through ongoing development and clear communication.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security Story:&lt;/strong&gt; Clearly articulate the security claims and guarantees for features (e.g., Memory Integrity Enforcement, PQ3 encryption for iMessage).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User Experience:&lt;/strong&gt; Build trust by providing features like Passkeys or Sign in with Apple, and by only requesting necessary user data.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;API Usage:&lt;/strong&gt; Use platform APIs like Accessory Setup Kit instead of broader permissions (e.g., full Bluetooth access) to provide a better user experience and limit data collection.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Avoid Vague Claims:&lt;/strong&gt; Do not use terms like “bank-grade” or “military-grade” encryption, as they are often meaningless to users.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transparency:&lt;/strong&gt; Share source code for parts of the system (like PCC) to demonstrate verifiable actions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lean into Apple’s Ecosystem:&lt;/strong&gt; Integrating with Apple technologies and adhering to the Apple experience can convey a sense of trust.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contextual Permissions:&lt;/strong&gt; Request permissions (e.g., camera, microphone) only when the feature requiring them is being used, not at app launch.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Purpose Strings:&lt;/strong&gt; Clearly explain why specific data access is needed in purpose strings to help users understand the value exchange.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sensor Indicators:&lt;/strong&gt; Ensure sensor data (microphone, camera) is only used when the user expects it, as indicated by device sensor lights.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-security-concepts-should-students-learn-first-for-apple-platform-development&quot;&gt;What security concepts should students learn first for Apple platform development?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;For Students:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Platform Security Guide:&lt;/strong&gt; Provides in-depth information on data protection, the Secure Enclave, and OS security technologies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;security.apple.com:&lt;/strong&gt; The security blog offers details on the bug bounty program, vulnerability reporting, and in-depth articles on security technologies.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Low-Level Security:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Binary exploitation and reverse engineering.&lt;/li&gt;
&lt;li&gt;Understanding how systems work is crucial for both attacking and defending.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Networking:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Focus on protocols like TLS and how the internet functions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;General Concepts:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Understanding how something works is fundamental to securing or attacking it.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-is-apple-approaching-stale-expired-or-no-longer-valid-passkeys-in-the-passwords-app&quot;&gt;How is Apple approaching stale, expired, or no longer valid passkeys in the Passwords app?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The new Signal API will notify apps and websites when changes occur, prompting them to update credentials.&lt;/li&gt;
&lt;li&gt;Passkeys are part of a wide standard, and Apple, as part of the governing body, works with other companies to ensure cross-platform syncing and lifecycle management.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;does-apple-recommend-encrypting-secrets-while-resident-in-ram-or-are-platform-protections-generally-considered-sufficient&quot;&gt;Does Apple recommend encrypting secrets while resident in RAM, or are platform protections generally considered sufficient?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;macOS:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Enable Hardened Runtime: Prevents other applications from reading the application’s memory and mapping malicious code into the process.&lt;/li&gt;
&lt;li&gt;This protection is deeply integrated into the operating system.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Encryption vs. Destruction:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;For secrets needed only briefly in memory, destruction is the answer, not encryption. Destroy tokens once used.&lt;/li&gt;
&lt;li&gt;For longer-term secrets, consider DRM-level solutions, but pure security may not be the primary focus.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CryptoKit:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Use CryptoKit APIs for handling keys and other sensitive data in memory.&lt;/li&gt;
&lt;li&gt;CryptoKit ensures data backing keys is zeroized. Avoid custom memory management that might not zeroize correctly.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Secure Enclave:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Bind keys to the Secure Enclave hardware. This makes keys non-exportable, even if the device or app is compromised.&lt;/li&gt;
&lt;li&gt;Use the attestation interface to verify that a key is held by the Secure Enclave.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-should-developers-balance-privacy-with-useful-telemetry&quot;&gt;How should developers balance privacy with useful telemetry?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Great Features and Great Privacy:&lt;/strong&gt; Aim for both, requiring creativity and work.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Privacy Pillars:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Data Minimization:&lt;/strong&gt; Collect only the necessary data to answer a specific question. Avoid collecting full-grain timestamps if daily or weekly aggregation suffices.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;On-Device Processing:&lt;/strong&gt; Perform aggregation and data minimization on-device before sending data to servers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transparency and Control:&lt;/strong&gt; Ensure users have control over data collection and are shown what data is being collected.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Technically enforce user choices regarding data collection.&lt;/li&gt;
&lt;li&gt;Secure collected data against attackers.&lt;/li&gt;
&lt;li&gt;Implement data deletion policies.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aggregation:&lt;/strong&gt; Distill data to its most essential form to protect privacy and reduce network bandwidth.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Telemetry Example:&lt;/strong&gt; For alarm telemetry, collecting only whether an alarm went off is sufficient, rather than precise wake-up times, which could reveal personal patterns.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User Control:&lt;/strong&gt; Users should have ultimate control over their data.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Actionable Insights:&lt;/strong&gt; Telemetry should lead to concrete actions, like code changes or business decisions.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>Miká Kruschel</author></item><item><title>Safari and Web Technologies</title><link>https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8015</link><guid isPermaLink="true">https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8015</guid><description>Focus on the fundamentals: HTML, CSS, and JavaScript. Understand their core purpose and how they work together.</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;safari-and-web-technologies&quot;&gt;Safari and Web Technologies&lt;/h1&gt;
&lt;p&gt;Unofficial AI summary of the WWDC26 group lab. May contain mistakes.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/videos/play/wwdc2026/8015&quot;&gt;Watch on Apple Developer&lt;/a&gt; · &lt;a href=&quot;https://kruschel.dev/wwdc26-group-labs-transcripts/wwdc2026-8015.txt&quot;&gt;Raw transcript&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-web-technologies-or-apis-should-new-web-developers-learn-to-prepare-for-the-future&quot;&gt;What web technologies or APIs should new web developers learn to prepare for the future?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Focus on the fundamentals: HTML, CSS, and JavaScript. Understand their core purpose and how they work together.&lt;/li&gt;
&lt;li&gt;Learn semantic HTML for better accessibility and declarative functionality, reducing reliance on JavaScript for basic tasks.&lt;/li&gt;
&lt;li&gt;Master CSS layout techniques for responsive design and progressive enhancement to ensure broad browser and device compatibility.&lt;/li&gt;
&lt;li&gt;Explore the evolving landscape of 3D and spatial web technologies like the &lt;code&gt;&amp;#x3C;model&gt;&lt;/code&gt; element and WebXR.&lt;/li&gt;
&lt;li&gt;Prioritize accessibility by using semantic HTML, which provides built-in robustness and accessibility.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;where-do-web-extensions-fit-into-essential-web-development-skills-for-the-future&quot;&gt;Where do web extensions fit into essential web development skills for the future?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Web extensions utilize core web technologies: JavaScript, CSS, and HTML.&lt;/li&gt;
&lt;li&gt;They can enhance browsing experiences and provide useful tools for users.&lt;/li&gt;
&lt;li&gt;Extensions can be ported between browsers, and efforts are underway to standardize Web Extension APIs for smoother cross-browser development.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-upcoming-web-standards-is-the-team-most-excited-about&quot;&gt;What upcoming web standards is the team most excited about?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Web Extensions Working Group:&lt;/strong&gt; Excitement for formalizing specifications and improving interoperability across browsers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Random Item function in CSS:&lt;/strong&gt; Allows for picking between different values for CSS properties, opening up new creative possibilities.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spatial CSS (proposal):&lt;/strong&gt; Enables advanced 3D transformations — still a proposal with no shipping news; relevant for Apple Vision Pro and e-commerce.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;&amp;#x3C;model&gt;&lt;/code&gt; element:&lt;/strong&gt; Facilitates adding 3D models to websites, with potential for JavaScript manipulation and integration with Spatial CSS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;install&lt;/code&gt; element, declarative partial updates, and Canvas&lt;/strong&gt; are also on the team’s radar.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-is-it-possible-for-safari-to-sometimes-be-more-performant-than-native-apps-in-terms-of-uiux-for-a-native-app-developer&quot;&gt;How is it possible for Safari to sometimes be more performant than native apps in terms of UI/UX for a native app developer?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;WebKit is deeply integrated into Apple’s operating systems, including JavaScriptCore, which powers JavaScript execution.&lt;/li&gt;
&lt;li&gt;WebKit is actively optimized for performance, handling content refreshes and other complex tasks efficiently.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;&amp;#x3C;webkit&gt;&lt;/code&gt; view in SwiftUI allows native app developers to seamlessly integrate web technologies into their applications.&lt;/li&gt;
&lt;li&gt;Users prioritize functionality over the underlying technology; they simply want their desired experience, regardless of whether it’s native or web-based.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-should-web-developers-advocate-for-desired-web-features-and-what-should-they-avoid&quot;&gt;How should web developers advocate for desired web features, and what should they avoid?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Advocate:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Use bugs.webkit.org to report bugs and suggest features.&lt;/li&gt;
&lt;li&gt;Engage with evangelists on social media.&lt;/li&gt;
&lt;li&gt;Clearly articulate use cases and the benefits of a feature for users.&lt;/li&gt;
&lt;li&gt;Create demos that represent actual use cases, not just flashy examples.&lt;/li&gt;
&lt;li&gt;Be vocal and share the needs through demos, JavaScript libraries, and social media.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Avoid:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Assuming that a feature implemented in one browser is a web standard.&lt;/li&gt;
&lt;li&gt;Overly aggressive advocacy without clear use cases.&lt;/li&gt;
&lt;li&gt;Being unkind; remember that these are human conversations.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-apples-recommendations-regarding-web-standards-positions-and-developer-advocacy&quot;&gt;What are Apple’s recommendations regarding web standards positions and developer advocacy?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Apple prioritizes user safety, privacy, and ease of use in its standards positions.&lt;/li&gt;
&lt;li&gt;Developers should articulate their needs clearly, even if Apple has a different standards position.&lt;/li&gt;
&lt;li&gt;The web standards process is collaborative and can be slow, but it aims for well-designed, long-lasting APIs.&lt;/li&gt;
&lt;li&gt;Developers can find published standards positions on GitHub.&lt;/li&gt;
&lt;li&gt;Filing requests and articulating needs is vital for meeting user requirements, even if a specific feature isn’t immediately supported.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;are-there-any-improvements-to-cookie-synchronization-in-wkwebview-or-recommended-approaches&quot;&gt;Are there any improvements to cookie synchronization in WKWebView, or recommended approaches?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;WKHTTPCookieStore&lt;/code&gt; to observe and manipulate cookies for &lt;code&gt;WKWebView&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;For detailed cookie handling, the developer forums are recommended as there are no specific experts on cookies present.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;are-there-plans-to-further-close-the-gap-in-api-support-for-safari-extensions-compared-to-chrome-and-firefox-for-example-tab-group-apis&quot;&gt;Are there plans to further close the gap in API support for Safari extensions compared to Chrome and Firefox, for example, tab group APIs?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, there are ongoing efforts to standardize Web Extension APIs and achieve parity with other browsers.&lt;/li&gt;
&lt;li&gt;Developers are encouraged to file bugs on bugs.webkit.org and clearly state the use case for desired APIs.&lt;/li&gt;
&lt;li&gt;The WebKit team is working hard in community groups to standardize APIs and ensure consistent behavior across platforms.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;with-spatial-css-will-we-see-3d-content-from-the-web-on-apple-vision-pro&quot;&gt;With spatial CSS, will we see 3D content from the web on Apple Vision Pro?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Spatial CSS is currently a proposal, with no specific shipping news.&lt;/li&gt;
&lt;li&gt;The inline HTML &lt;code&gt;&amp;#x3C;model&gt;&lt;/code&gt; element already allows for 3D models (USD and other formats) on the web.&lt;/li&gt;
&lt;li&gt;Immersive environments enable viewing these models at full scale.&lt;/li&gt;
&lt;li&gt;Spatial CSS, combined with full accessibility trees and other features, is seen as the future for spatial web experiences.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-there-still-headroom-for-web-performance-optimization&quot;&gt;Is there still headroom for web performance optimization?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Performance optimization is an ongoing process.&lt;/li&gt;
&lt;li&gt;Developers are constantly working to improve JavaScript execution, image loading, and overall website speed.&lt;/li&gt;
&lt;li&gt;Battery life is a significant consideration for performance, especially on mobile devices.&lt;/li&gt;
&lt;li&gt;New technologies like WebGPU are developed to better match modern silicon and improve performance.&lt;/li&gt;
&lt;li&gt;The evolution of websites and user needs necessitates continuous optimization.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-large-should-web-3d-models-be&quot;&gt;How large should web 3D models be?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Models should be optimized and kept as small as possible, similar to images.&lt;/li&gt;
&lt;li&gt;For most content on a page, models around 10MB can achieve maximum visual quality.&lt;/li&gt;
&lt;li&gt;Larger models may be necessary for full-screen experiences, similar to large videos.&lt;/li&gt;
&lt;li&gt;Optimization involves managing texture sizes, geometry complexity, USDZ compression, AVIF textures, and future mesh compression.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-should-developers-think-about-permissions-in-safari-extensions-compared-to-other-browsers-are-there-things-safari-is-more-restrictive-about&quot;&gt;How should developers think about permissions in Safari extensions compared to other browsers? Are there things Safari is more restrictive about?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Safari’s permission model prioritizes user privacy, giving users control over which sites extensions can access.&lt;/li&gt;
&lt;li&gt;Permissions are not automatically granted and require explicit user consent.&lt;/li&gt;
&lt;li&gt;Extensions can use the “active tab” permission to limit access to the current tab, avoiding broad host permissions.&lt;/li&gt;
&lt;li&gt;The goal is to protect user privacy and ensure transparency about extension access.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-does-the-immersive-api-interact-with-existing-web-content-if-a-user-is-in-an-immersive-environment-and-something-on-the-page-needs-their-attention-how-does-that-handoff-work&quot;&gt;How does the immersive API interact with existing web content? If a user is in an immersive environment and something on the page needs their attention, how does that handoff work?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The web page remains accessible within an immersive environment.&lt;/li&gt;
&lt;li&gt;Users can interact with the web page as needed.&lt;/li&gt;
&lt;li&gt;If switching to another application is required, it’s a single-app experience; other apps may dim but can be restored.&lt;/li&gt;
&lt;li&gt;Pressing the Digital Crown restores the shared web view from an immersive environment.&lt;/li&gt;
&lt;li&gt;The web page can alter the immersive environment (e.g., change position, control animations) through UI elements.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;with-customizable-select-shipping-safari-27-how-much-styling-works-out-of-the-box-versus-what-needs-explicit-reset&quot;&gt;With Customizable Select (shipping Safari 27), how much styling works out of the box versus what needs explicit reset?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Customizable Select&lt;/strong&gt; is the feature shipping in Safari 27.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Appearance-based select&lt;/strong&gt; is a separate spec still in progress and &lt;strong&gt;not shipping yet&lt;/strong&gt; — don’t rely on it today.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Out of the box (Customizable Select):&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;The layout works correctly.&lt;/li&gt;
&lt;li&gt;The font inherits from the website, unlike &lt;code&gt;appearance: none&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Developer control:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Pseudo-elements allow styling specific parts like the picker icon or dropdown menu.&lt;/li&gt;
&lt;li&gt;When layering icons or custom styling, keep &lt;strong&gt;text content&lt;/strong&gt; in the element for fallback and accessibility (progressive enhancement).&lt;/li&gt;
&lt;li&gt;The goal is 100% interoperability and a consistent base for styling across browsers.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;for-a-developer-with-an-existing-chrome-or-firefox-extension-whats-the-realistic-amount-of-work-to-get-it-into-safari-and-where-do-manifest-or-api-differences-tend-to-bite-people&quot;&gt;For a developer with an existing Chrome or Firefox extension, what’s the realistic amount of work to get it into Safari, and where do manifest or API differences tend to bite people?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The effort varies; some extensions may work with minimal changes.&lt;/li&gt;
&lt;li&gt;Safari has worked to reduce manifest differences and generally doesn’t fail on unsupported keys.&lt;/li&gt;
&lt;li&gt;Test extensions temporarily in Safari via the developer menu.&lt;/li&gt;
&lt;li&gt;If API inconsistencies are found, report them on bugs.webkit.org or use Feedback Assistant.&lt;/li&gt;
&lt;li&gt;Contributions to WebKit are welcome for improving API support.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-should-web-developers-know-about-the-upcoming-safariwebkit-release&quot;&gt;What should web developers know about the upcoming Safari/WebKit release?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The Safari 27 release notes are exceptionally long due to extensive quality improvements and bug fixes. WebKit is committed to improving the browser engine and aligning with web standards.&lt;/li&gt;
&lt;li&gt;Web extension support is now integrated into WebKit, allowing developers to contribute directly to the codebase.&lt;/li&gt;
&lt;li&gt;Explore the &lt;code&gt;&amp;#x3C;model&gt;&lt;/code&gt; element to experience 3D on the web across different platforms.&lt;/li&gt;
&lt;li&gt;The web platform is powerful — a lot is achievable with minimal frameworks by leveraging web standards.&lt;/li&gt;
&lt;li&gt;Look for Safari-specific technologies like the &lt;code&gt;random()&lt;/code&gt; function and filter functions that are web standards and will be available in other browsers.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-do-model-element-loading-states-and-errors-work&quot;&gt;How do &lt;code&gt;&amp;#x3C;model&gt;&lt;/code&gt; element loading states and errors work?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Model loading is promise-based — listen for load completion via the promise.&lt;/li&gt;
&lt;li&gt;Show a spinner or placeholder while loading; distinguish fetch vs. decode phases in the UX.&lt;/li&gt;
&lt;li&gt;Procedurally generated models may need extra wait time before display.&lt;/li&gt;
&lt;li&gt;Handle load failures gracefully with fallback content.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-a-safari-extension-with-a-swiftui-window-communicate-with-a-native-macos-app-for-seo-workflows&quot;&gt;How can a Safari extension with a SwiftUI window communicate with a native macOS app for SEO workflows?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Extension popups can use web navigation APIs within the extension context.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Native messaging&lt;/strong&gt; bridges the extension and the macOS app for bidirectional communication.&lt;/li&gt;
&lt;li&gt;A SwiftUI window in the host app can display extension-driven UI or receive data from the extension.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>Miká Kruschel</author></item><item><title>SwiftUI</title><link>https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8006</link><guid isPermaLink="true">https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8006</guid><description>SwiftUI is architecture-agnostic; any architecture that works for the app should work with SwiftUI.</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;swiftui&quot;&gt;SwiftUI&lt;/h1&gt;
&lt;p&gt;Unofficial AI summary of the WWDC26 group lab. May contain mistakes.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/videos/play/wwdc2026/8006&quot;&gt;Watch on Apple Developer&lt;/a&gt; · &lt;a href=&quot;https://kruschel.dev/wwdc26-group-labs-transcripts/wwdc2026-8006.txt&quot;&gt;Raw transcript&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Related Labs: &lt;a href=&quot;https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8002&quot;&gt;SwiftUI for Beginners&lt;/a&gt;, &lt;a href=&quot;https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8120&quot;&gt;SwiftUI (June 11)&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;is-there-a-specific-architecture-that-the-swiftui-team-expects-developers-to-adopt&quot;&gt;Is there a specific architecture that the SwiftUI team expects developers to adopt?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;SwiftUI is architecture-agnostic; any architecture that works for the app should work with SwiftUI.&lt;/li&gt;
&lt;li&gt;When developers encounter ergonomic issues integrating the chosen architecture with SwiftUI, provide feedback.&lt;/li&gt;
&lt;li&gt;Observable can be used to store models and facilitate transitions to SwiftUI, independent of UI frameworks.&lt;/li&gt;
&lt;li&gt;App architecture decisions should be driven by the need to ship features, not by the architecture itself.&lt;/li&gt;
&lt;li&gt;Structure the data model robustly and testably, with SwiftUI views acting as a projection of this data.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-performance-tradeoffs-of-viewbuilder-closures-vs-separate-view-structs&quot;&gt;What are the performance tradeoffs of &lt;code&gt;@ViewBuilder&lt;/code&gt; closures vs separate view structs?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Separate view structs have their own identity, allowing for independent dependency tracking and more granular invalidation.&lt;/li&gt;
&lt;li&gt;Computed properties within a view body are treated as part of the parent view’s body, offering less granular control — they do &lt;strong&gt;not&lt;/strong&gt; create separate invalidation boundaries.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@ViewBuilder&lt;/code&gt; and &lt;code&gt;@ContentBuilder&lt;/code&gt; are equivalent (type alias); use either for computed properties that return views.&lt;/li&gt;
&lt;li&gt;Creating separate custom views allows SwiftUI to more precisely update only the views that have changed, improving performance.&lt;/li&gt;
&lt;li&gt;Extracting subviews also makes Xcode Previews more useful — developers can preview smaller units in isolation.&lt;/li&gt;
&lt;li&gt;Views are structs allocated on the stack, making them inexpensive to create, render, and discard.&lt;/li&gt;
&lt;li&gt;Extracting parts of a view into custom views or custom modifiers can minimize dependencies and improve performance.&lt;/li&gt;
&lt;li&gt;Custom views can also be necessary for reading environment values like &lt;code&gt;backgroundProminence&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-common-swiftui-anti-patterns-and-how-can-they-be-avoided&quot;&gt;What are common SwiftUI anti-patterns and how can they be avoided?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;GeometryReader&lt;/code&gt;&lt;/strong&gt;: Prefer using layout APIs instead to avoid invalidating entire view hierarchies when layout changes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;onChange&lt;/code&gt;&lt;/strong&gt;: Avoid using &lt;code&gt;onChange&lt;/code&gt; to trampoline data back and forth; aim for more declarative views that respond directly to data.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Environment Properties&lt;/strong&gt;: Analyze usage of environment properties; frequent changes can invalidate many views unnecessarily. Consider using &lt;code&gt;@Observable&lt;/code&gt; reference types passed via the environment to stabilize dependencies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wrapper Views for Controls&lt;/strong&gt;: Instead of wrapping controls like &lt;code&gt;Button&lt;/code&gt; with custom views and modifiers, explore using &lt;code&gt;ButtonStyle&lt;/code&gt; or other style protocols for better reusability and access to built-in initializers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Building Custom Components from Scratch&lt;/strong&gt;: Leverage built-in components like &lt;code&gt;List&lt;/code&gt; and &lt;code&gt;Grid&lt;/code&gt; as much as possible, as they evolve with system updates. Interoperability with UIKit/AppKit is also a valid approach when a native SwiftUI component is missing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conditional Modifiers&lt;/strong&gt;: Avoid using conditional modifiers that change while the view is on screen, as this can lead to view recreation, broken animations, and state reinitialization. Prefer inert modifier variants (e.g., &lt;code&gt;opacity(0)&lt;/code&gt; vs removing the view) when possible.&lt;/li&gt;
&lt;li&gt;If a modifier lacks an inert variant, file feedback with the use case.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Large View Bodies&lt;/strong&gt;: Split large view bodies into smaller, more manageable custom views to limit the scope of invalidation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-a-core-concept-in-swiftui-that-developers-often-struggle-to-understand-and-how-can-it-be-explained&quot;&gt;What is a core concept in SwiftUI that developers often struggle to understand, and how can it be explained?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;SwiftUI has an internal graph representation of views with nodes and edges representing views and their inputs.&lt;/li&gt;
&lt;li&gt;This internal mechanism diffs and updates the view hierarchy based on state changes.&lt;/li&gt;
&lt;li&gt;UIKit layout is top-down; SwiftUI layout is bottom-up — understanding this direction matters for debugging layout issues.&lt;/li&gt;
&lt;li&gt;Body re-evaluation does not equal re-rendering; SwiftUI may re-run &lt;code&gt;body&lt;/code&gt; without actually updating the on-screen result.&lt;/li&gt;
&lt;li&gt;Understanding this update mechanism is crucial for diagnosing performance issues and unexpected view updates.&lt;/li&gt;
&lt;li&gt;Updates are driven by state changes, not by re-rendering and comparing views like in a DOM.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-does-filtering-data-within-a-foreach-loop-impact-swiftuis-performance-and-behavior&quot;&gt;How does filtering data within a &lt;code&gt;ForEach&lt;/code&gt; loop impact SwiftUI’s performance and behavior?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Placing &lt;code&gt;if&lt;/code&gt; statements directly within a &lt;code&gt;ForEach&lt;/code&gt; body can hinder SwiftUI’s ability to efficiently determine the total number of elements.&lt;/li&gt;
&lt;li&gt;This can lead to SwiftUI iterating through the entire &lt;code&gt;ForEach&lt;/code&gt; loop for operations that require a count.&lt;/li&gt;
&lt;li&gt;Solutions include filtering data upfront before passing it to &lt;code&gt;ForEach&lt;/code&gt; or wrapping conditional views in an &lt;code&gt;HStack&lt;/code&gt; or &lt;code&gt;ZStack&lt;/code&gt; to maintain a constant view count.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-mental-model-for-connecting-state-and-state-management-with-swift-concurrency&quot;&gt;What is the mental model for connecting &lt;code&gt;@State&lt;/code&gt; and state management with Swift Concurrency?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;SwiftUI views are &lt;code&gt;MainActor&lt;/code&gt; isolated, meaning their state and property wrappers are also main actor isolated.&lt;/li&gt;
&lt;li&gt;This simplifies concurrency by ensuring state is accessed and modified on the main thread.&lt;/li&gt;
&lt;li&gt;Rare exceptions exist where closures might be &lt;code&gt;Sendable&lt;/code&gt; and executed off-main; in these cases, explicitly capture a copy of the state value to avoid concurrency errors.&lt;/li&gt;
&lt;li&gt;Most SwiftUI closures are &lt;code&gt;MainActor&lt;/code&gt; isolated, so these concurrency issues are uncommon.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-recommended-approach-for-implementing-navigation-with-custom-transitions-in-ios-27&quot;&gt;What is the recommended approach for implementing navigation with custom transitions in iOS 27?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;iOS 27 introduces built-in support for customizing navigation transitions in SwiftUI, including crossfades.&lt;/li&gt;
&lt;li&gt;If the needs are met by these built-in transitions, they are the recommended approach.&lt;/li&gt;
&lt;li&gt;For older iOS versions or more complex custom transitions, consider interoperating with UIKit navigation controllers.&lt;/li&gt;
&lt;li&gt;App resizing is a key consideration; sticking to system navigation components (SwiftUI, UIKit, AppKit) generally provides better support for resizable apps.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-recommended-way-to-track-a-scroll-views-scrolling-offset-to-showhide-view-elements&quot;&gt;What is the recommended way to track a scroll view’s scrolling offset to show/hide view elements?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use modifiers like &lt;code&gt;onGeometryChange&lt;/code&gt; or &lt;code&gt;scrollEffects&lt;/code&gt; for tracking scroll position.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;scrollPosition&lt;/code&gt; modifier can identify the item currently on screen.&lt;/li&gt;
&lt;li&gt;Consider using APIs that track the percentage of a view’s visibility, especially for analytics or triggering actions when content enters the viewport.&lt;/li&gt;
&lt;li&gt;Content offset should be treated as an implementation detail, especially with lazy stacks; focus on relative view positions.&lt;/li&gt;
&lt;li&gt;For infinite scrolling, consider adding a view at the end of the list with an &lt;code&gt;onAppear&lt;/code&gt; modifier to trigger fetching more data.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-it-possible-to-build-custom-layouts-that-are-lazy-in-swiftui-similar-to-lazyvstack&quot;&gt;Is it possible to build custom layouts that are lazy in SwiftUI, similar to &lt;code&gt;LazyVStack&lt;/code&gt;?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Currently, there is no specific protocol for describing custom lazy layouts.&lt;/li&gt;
&lt;li&gt;File feedback with detailed use cases when developers require this functionality.&lt;/li&gt;
&lt;li&gt;For complex layout needs, consider interoperating with &lt;code&gt;UICollectionView&lt;/code&gt; or composing existing lazy layouts with custom non-lazy sub-layouts (e.g., a lazy built-in container with a custom non-lazy mosaic sub-layout).&lt;/li&gt;
&lt;li&gt;The protocol for non-lazy custom layouts is available and optimized compared to manual arrangement with &lt;code&gt;GeometryReader&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;are-lazy-stacks-sufficient-for-infinite-scrolling-or-is-uicollectionview-needed&quot;&gt;Are lazy stacks sufficient for infinite scrolling, or is &lt;code&gt;UICollectionView&lt;/code&gt; needed?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Lazy stacks allocate views on the heap as needed and benefit from implicit prefetching and partial graph evaluation.&lt;/li&gt;
&lt;li&gt;However, &lt;code&gt;onAppear&lt;/code&gt; on list items can invalidate prefetch work if it triggers heavy side effects.&lt;/li&gt;
&lt;li&gt;For very large infinite-scroll lists with complex cell reuse needs, &lt;code&gt;UICollectionView&lt;/code&gt; via interop remains a valid option.&lt;/li&gt;
&lt;li&gt;Profile the specific use case before assuming developers need to drop to UIKit.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;why-does-contentbuilder-improve-type-checking-performance&quot;&gt;Why does &lt;code&gt;ContentBuilder&lt;/code&gt; improve type-checking performance?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ContentBuilder&lt;/code&gt; collapses many overloads into a single builder, reducing the compiler’s search space.&lt;/li&gt;
&lt;li&gt;This turns a wide set of competing overloads into a single entry point the type checker can follow more efficiently.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@ViewBuilder&lt;/code&gt; is a type alias for &lt;code&gt;ContentBuilder&lt;/code&gt;, so the same benefits apply to view bodies.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-difference-between-viewbuilder-and-contentbuilder&quot;&gt;What is the difference between &lt;code&gt;@ViewBuilder&lt;/code&gt; and &lt;code&gt;@ContentBuilder&lt;/code&gt;?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;They are the same type — &lt;code&gt;@ViewBuilder&lt;/code&gt; is a type alias for &lt;code&gt;ContentBuilder&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ContentBuilder&lt;/code&gt; is the general name; use it (or the alias) for custom DSLs outside view bodies, not just SwiftUI views.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-do-i-debug-mystery-re-renders-in-swiftui&quot;&gt;How do I debug mystery re-renders in SwiftUI?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;_printChanges()&lt;/code&gt; and &lt;code&gt;_logChanges()&lt;/code&gt; in debug builds to see what triggered a view update (underscore APIs — don’t ship to production).&lt;/li&gt;
&lt;li&gt;A random-color &lt;code&gt;body&lt;/code&gt; trick can visually reveal which views are re-rendering.&lt;/li&gt;
&lt;li&gt;Use the SwiftUI instrument in Instruments to analyze update patterns.&lt;/li&gt;
&lt;li&gt;Agents can help analyze SwiftUI instrument traces.&lt;/li&gt;
&lt;li&gt;Split views to isolate dependencies once developers have identified the trigger.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-most-common-performance-mistakes-in-large-swiftui-apps&quot;&gt;What are the most common performance mistakes in large SwiftUI apps?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Excessive Invalidations&lt;/strong&gt;: Too many invalidations, often starting from the top of the view hierarchy and propagating down, are a common issue.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frequent Environment Updates&lt;/strong&gt;: Placing frequently changing values (e.g., time in milliseconds, scroll position) in the environment can cause widespread invalidations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Passing Large Value Types&lt;/strong&gt;: Passing complex value types down through many views, even if not all views use them, requires quality comparisons at each level. Using &lt;code&gt;@Observable&lt;/code&gt; reference types can be more performant as only the reference is passed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resizing Issues&lt;/strong&gt;: Over-reliance on &lt;code&gt;GeometryReader&lt;/code&gt; can cause views to update on every frame during app resizing. Aim to minimize view updates during resize events.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Large View Bodies&lt;/strong&gt;: Large view bodies increase the scope of invalidation. Splitting them into smaller custom views helps limit updates.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;do-state-properties-holding-observable-classes-allocate-on-the-correct-thread&quot;&gt;Do &lt;code&gt;@State&lt;/code&gt; properties holding &lt;code&gt;@Observable&lt;/code&gt; classes allocate on the correct thread?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;SwiftUI views are &lt;code&gt;MainActor&lt;/code&gt; isolated, meaning their bodies and state are called on the main thread.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@State&lt;/code&gt; properties holding &lt;code&gt;@Observable&lt;/code&gt; classes will automatically be allocated on the main thread.&lt;/li&gt;
&lt;li&gt;With modern concurrency settings (main actor isolation inferred), custom observable classes are also automatically main actor isolated for UI code.&lt;/li&gt;
&lt;li&gt;For background computations, factor them into separate functions, &lt;code&gt;await&lt;/code&gt; their results, and then update the UI on the main thread to ensure atomic updates and smooth animations.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TimelineView&lt;/code&gt; can be used for updates that need to occur on every frame.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-multi-module-apps-hide-concrete-view-types-without-anyview&quot;&gt;How can multi-module apps hide concrete view types without &lt;code&gt;AnyView&lt;/code&gt;?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;some View&lt;/code&gt; is the preferred approach as it provides opaque types, allowing the type checker to know the concrete type without exposing it externally. This maintains static information for features like &lt;code&gt;ForEach&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If &lt;code&gt;some View&lt;/code&gt; is not feasible, &lt;code&gt;AnyView&lt;/code&gt; can be used, but ensure the underlying type remains consistent to avoid performance issues.&lt;/li&gt;
&lt;li&gt;Wrapping &lt;code&gt;AnyView&lt;/code&gt; in an &lt;code&gt;HStack&lt;/code&gt; or &lt;code&gt;ZStack&lt;/code&gt; can help &lt;code&gt;ForEach&lt;/code&gt; by communicating that only a single view is returned.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-performance-tradeoffs-speed-and-memory-of-using-compositinggroup-or-drawinggroup&quot;&gt;What are the performance tradeoffs (speed and memory) of using &lt;code&gt;CompositingGroup&lt;/code&gt; or &lt;code&gt;DrawingGroup&lt;/code&gt;?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CompositingGroup&lt;/code&gt;&lt;/strong&gt;: Primarily for visual effects, not performance. It allows applying effects (like shadows) to the entire group of views as a single unit, rather than to each individual element.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;DrawingGroup&lt;/code&gt;&lt;/strong&gt;: Consolidates rendered layers into a single layer, significantly improving performance for complex custom graphics by reducing the number of on-screen layer representations. This is useful when many individual views would otherwise be rendered.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Canvas&lt;/code&gt;&lt;/strong&gt;: Offers more direct control over drawing invocations, similar to &lt;code&gt;drawRect&lt;/code&gt; in UIKit/AppKit. It’s suitable for custom graphics but does not draw SwiftUI views, meaning gestures and accessibility need to be handled manually.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>Miká Kruschel</author></item><item><title>Accessibility Technologies</title><link>https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8005</link><guid isPermaLink="true">https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8005</guid><description>Apple Intelligence is integrated into accessibility features, enhancing VoiceOver image descriptions, live recognition, personalized accessibility reader, and voice control.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;accessibility-technologies&quot;&gt;Accessibility Technologies&lt;/h1&gt;
&lt;p&gt;Unofficial AI summary of the WWDC26 group lab. May contain mistakes.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/videos/play/wwdc2026/8005&quot;&gt;Watch on Apple Developer&lt;/a&gt; · &lt;a href=&quot;https://kruschel.dev/wwdc26-group-labs-transcripts/wwdc2026-8005.txt&quot;&gt;Raw transcript&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;whats-new-in-accessibility-features&quot;&gt;What’s new in accessibility features?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Apple Intelligence is integrated into accessibility features, enhancing VoiceOver image descriptions, live recognition, personalized accessibility reader, and voice control.&lt;/li&gt;
&lt;li&gt;Automatic subtitles for personal videos are now available.&lt;/li&gt;
&lt;li&gt;Vehicle motion cues have been extended to visionOS with spatialization.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-best-advice-for-testing-ui-usability-and-accessibility&quot;&gt;What is the best advice for testing UI usability and accessibility?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use Accessibility Inspector to audit elements and Device Hub for testing across different screen sizes.&lt;/li&gt;
&lt;li&gt;Consider Dynamic Type and Large Text, ensuring the UI lays out dynamically based on font size.&lt;/li&gt;
&lt;li&gt;Test with VoiceOver first, as it often provides significant accessibility benefits that carry over to other assistive technologies.&lt;/li&gt;
&lt;li&gt;Incorporate feedback from real users to polish the accessibility experience.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-should-developers-prioritize-accessibility-testing-when-they-cant-test-every-assistive-technology&quot;&gt;How should developers prioritize accessibility testing when they can’t test every assistive technology?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Prioritize VoiceOver testing as it’s approachable and often provides benefits for other assistive technologies like Switch Control and Voice Control.&lt;/li&gt;
&lt;li&gt;Many assistive technologies share underlying APIs (e.g., &lt;code&gt;accessibilityLabel&lt;/code&gt;), meaning a good VoiceOver experience often translates to good experiences for others.&lt;/li&gt;
&lt;li&gt;If resources allow, test other technologies, but a strong VoiceOver implementation is a solid foundation.&lt;/li&gt;
&lt;li&gt;Gathering feedback from real users can significantly help refine the accessibility experience.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-voiceover-avoid-reading-both-a-custom-label-and-the-system-image-description&quot;&gt;How can VoiceOver avoid reading both a custom label and the system image description?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Remove the &lt;code&gt;image&lt;/code&gt; trait from the element. VoiceOver will then use the provided accessibility label without appending its own description.&lt;/li&gt;
&lt;li&gt;When developers keep the &lt;code&gt;image&lt;/code&gt; trait, VoiceOver plays a &lt;strong&gt;subtle sound&lt;/strong&gt; before the auto-generated description so users can distinguish it from author-provided alt text.&lt;/li&gt;
&lt;li&gt;Be aware that removing the image trait may disable features like image exploration and the ability for users to ask follow-up questions about the image.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-new-accessibility-features-can-help-patients-using-an-ehr-patient-portal&quot;&gt;What new accessibility features can help patients using an EHR patient portal?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Accessibility Reader:&lt;/strong&gt; A system-wide tool for customizing reading experiences, especially for long-form content, and integrated with spoken content.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Image Descriptions and Image Explorer:&lt;/strong&gt; Useful for describing data-rich images and charts within the portal.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-first-steps-for-making-a-data-rich-app-accessible&quot;&gt;What are the first steps for making a data-rich app accessible?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Start with &lt;strong&gt;Dynamic Type&lt;/strong&gt;, as many users benefit from adjustable font sizes.&lt;/li&gt;
&lt;li&gt;Implement &lt;strong&gt;VoiceOver support&lt;/strong&gt;, which provides significant accessibility wins.&lt;/li&gt;
&lt;li&gt;Continue by adding &lt;strong&gt;accessibility labels&lt;/strong&gt; and refining the application’s VoiceOver experience.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-network-request-progress-be-exposed-to-voiceover&quot;&gt;How can network request progress be exposed to VoiceOver?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;&lt;code&gt;layoutChanged&lt;/code&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;code&gt;screenChanged&lt;/code&gt;&lt;/strong&gt; notifications to inform VoiceOver about UI changes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;layoutChanged&lt;/code&gt; is suitable for smaller UI updates, while &lt;code&gt;screenChanged&lt;/code&gt; is for more significant screen alterations.&lt;/li&gt;
&lt;li&gt;Developers can optionally use &lt;code&gt;accessibilityElement&lt;/code&gt; with &lt;code&gt;layoutChanged&lt;/code&gt; to direct VoiceOver focus, but use this sparingly to avoid disrupting the user’s focus.&lt;/li&gt;
&lt;li&gt;Alternatively, use &lt;strong&gt;&lt;code&gt;accessibilityAnnounceNotification&lt;/code&gt;&lt;/strong&gt; with a descriptive string to have VoiceOver speak the completion message.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;are-there-any-updates-to-the-text-to-speech-apis-this-year&quot;&gt;Are there any updates to the Text-to-Speech APIs this year?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;There are no new Text-to-Speech APIs announced this year, but backend improvements may exist.&lt;/li&gt;
&lt;li&gt;Developers are encouraged to file feedback requests for new API features.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-should-tvos-developers-consider-when-implementing-dynamic-type&quot;&gt;What should tvOS developers consider when implementing Dynamic Type?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Familiarize yourself with best practices for Large Text and how UI flow might need to adapt for accessibility font sizes.&lt;/li&gt;
&lt;li&gt;Watch the WWDC session on Large Text and tvOS for specific guidance.&lt;/li&gt;
&lt;li&gt;Previous talks on Large Text for iOS can also provide a good starting point.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-valuable-are-accessibility-nutrition-labels-and-what-details-should-developers-know&quot;&gt;How valuable are Accessibility Nutrition Labels, and what details should developers know?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;For Users:&lt;/strong&gt; Nutrition labels allow users to understand an app’s accessibility features before downloading, saving time and reducing cognitive load.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;For Developers:&lt;/strong&gt; They provide a way to showcase accessibility efforts and distinguish their apps. They also come with guidelines that serve as a benchmark for testing and improvement.&lt;/li&gt;
&lt;li&gt;The labels can be a powerful tool for advocating for accessibility within organizations.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-the-voiceover-option-in-xcodes-device-hub-intended-for-simulators-or-physical-devices&quot;&gt;Is the VoiceOver option in Xcode’s Device Hub intended for simulators or physical devices?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A new XCTest API allows testing VoiceOver on iOS devices from a Mac.&lt;/li&gt;
&lt;li&gt;This functionality is expected to work in the simulator starting with Seed 1.&lt;/li&gt;
&lt;li&gt;For specific details and further questions, consult the developer forums.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-should-developers-revisit-for-macos-voiceover-support-and-how-should-they-test-across-assistive-technologies-on-mac&quot;&gt;What should developers revisit for macOS VoiceOver support, and how should they test across assistive technologies on Mac?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;User Expectations:&lt;/strong&gt; Mac users often multitask and have higher expectations for keyboard shortcuts and accelerators.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accelerators:&lt;/strong&gt; Implement features like hotkeys for quick navigation to different app sections (e.g., sidebar, inspector).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testing:&lt;/strong&gt; Use the Accessibility Shortcut (Command+F5 on macOS, Command+Option+F5 when Touch ID isn’t available, triple-click Touch ID if available) to quickly toggle accessibility features on and off.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New Features:&lt;/strong&gt; macOS apps automatically benefit from new VoiceOver features like image descriptions.&lt;/li&gt;
&lt;li&gt;See the &lt;strong&gt;Improving Mac accessibility&lt;/strong&gt; session for grouping and navigation guidance.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-custom-appkit-controls-context-menus-hover-actions-custom-buttons-be-made-accessible-to-voiceover-users-on-macos&quot;&gt;How can custom AppKit controls (context menus, hover actions, custom buttons) be made accessible to VoiceOver users on macOS?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Custom Actions:&lt;/strong&gt; A primary method, but can be less discoverable for Mac users. Consider them for advanced features.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Additional Buttons:&lt;/strong&gt; Create separate buttons for critical actions, especially hover actions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accessibility Representation (SwiftUI concept):&lt;/strong&gt; While the question is AppKit-specific, the principle applies: expose complex controls as multiple simpler accessibility elements. In AppKit, this involves implementing &lt;code&gt;accessibilityChildren&lt;/code&gt; and creating custom accessibility elements.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hotkeys:&lt;/strong&gt; Implement keyboard shortcuts for discoverability and efficiency, benefiting both VoiceOver and power users.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hover Actions:&lt;/strong&gt; Use sparingly, as they can be difficult to discover, especially for users with cognitive impairments. Reserve them for secondary actions or enhancements.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-does-apple-design-accessibility-features-for-people-with-limited-or-no-use-of-their-hands-or-arms&quot;&gt;How does Apple design accessibility features for people with limited or no use of their hands or arms?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Interaction Methods:&lt;/strong&gt; Offers diverse options beyond hands, including Voice Control, Head Tracking, Eye Tracking, Sound Actions, and Switch Control.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Touch Accommodations:&lt;/strong&gt; Provides features like AssistiveTouch and new setup flows for iOS 27 that calibrate touch responses for personalized interaction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;On-Device Eye Tracking:&lt;/strong&gt; Enables interaction using the built-in camera, offering a simpler setup than external eye trackers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Personalization:&lt;/strong&gt; Recognizes that solutions vary greatly even for individuals with the same disability, offering a wide array of technologies to accommodate different needs and preferences.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-accessibility-features-are-designed-with-neurodivergent-people-in-mind&quot;&gt;What accessibility features are designed with neurodivergent people in mind?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Guided Access:&lt;/strong&gt; Helps users stay within a single app or experience, preventing accidental navigation away.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assistive Access:&lt;/strong&gt; Offers a simplified visual interface with larger icons, text, and touch targets, focusing on core controls. This is available for first-party apps and via APIs for developers.&lt;/li&gt;
&lt;li&gt;See the &lt;strong&gt;Assistive Access for developers&lt;/strong&gt; session for building simplified app experiences.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Other Helpful Features:&lt;/strong&gt; Screen Time, Speak Screen, Speak Selection, and Accessibility Reader can also be beneficial.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-the-new-reorderable-modifier-in-swiftui-be-made-accessible-to-voiceover-users&quot;&gt;How can the new reorderable modifier in SwiftUI be made accessible to VoiceOver users?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Drag and drop is not a standard VoiceOver idiom.&lt;/li&gt;
&lt;li&gt;The accessibility of the reorderable modifier with VoiceOver is still under investigation and may vary between platforms (iOS vs. macOS).&lt;/li&gt;
&lt;li&gt;This is a good question for the developer forums.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-third-party-apps-integrate-with-the-new-facetime-video-interpreting-feature&quot;&gt;How can third-party apps integrate with the new FaceTime video interpreting feature?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The video interpreting feature is not yet available in the iOS 27 beta.&lt;/li&gt;
&lt;li&gt;More information on integration, initiation, entitlements, and API restrictions will be provided when the APIs become available.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-recommended-way-to-expose-stable-accessibility-identifiers-for-custom-swiftui-reusable-views&quot;&gt;What is the recommended way to expose stable accessibility identifiers for custom SwiftUI reusable views?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Create a wrapper around reusable views (like labels or buttons) that requires users to provide an &lt;code&gt;accessibilityIdentifier&lt;/code&gt; and &lt;code&gt;accessibilityLabel&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Implement checks to prevent nil accessibility labels, enforcing concrete labels for testing and stability.&lt;/li&gt;
&lt;li&gt;For symbols and buttons, require both an accessibility label and an identifier.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-process-builds-accessibility-into-an-app-from-the-start&quot;&gt;What process builds accessibility into an app from the start?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Early Consideration:&lt;/strong&gt; Integrate accessibility from day one, rather than adding it later.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Basic Checks:&lt;/strong&gt; Regularly check UI elements with VoiceOver and research how users of different assistive technologies interact with similar apps.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Usability Research:&lt;/strong&gt; Conduct research with real users to gather valuable suggestions and insights.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Team Integration:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Human Connection:&lt;/strong&gt; Show developers how accessibility issues directly impact users by demonstrating real-world problems.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Iteration:&lt;/strong&gt; Build accessibility into every iteration of the development process, not as a separate phase.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Planning:&lt;/strong&gt; Include accessibility as a key category alongside security and privacy in project planning.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prototyping:&lt;/strong&gt; Ensure prototypes incorporate accessibility from the design phase.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Refinement:&lt;/strong&gt; Allocate time at the end of the project for fine-tuning accessibility features after the UI is solidified.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Criticality over Utilization:&lt;/strong&gt; When prioritizing features, consider the criticality of accessibility to users, not just the number of users who might benefit.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-platform-specific-pitfalls-should-developers-look-out-for-when-creating-universal-apps-with-accessibility-in-mind&quot;&gt;What platform-specific pitfalls should developers look out for when creating universal apps with accessibility in mind?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Platform Testing:&lt;/strong&gt; Test accessibility features (like VoiceOver) individually on each platform (macOS, iPadOS, watchOS, tvOS) as user expectations and interaction models differ.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User Expectations:&lt;/strong&gt; Mac users expect more keyboard shortcuts and accelerators compared to iOS users.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interaction Modalities:&lt;/strong&gt; Consider the primary input methods for each platform: keyboard (Mac), touch (iOS/iPadOS), remote (tvOS), Digital Crown (watchOS), and eye/gaze tracking (visionOS).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hit Testing vs. Child Order:&lt;/strong&gt; Hit testing is more critical on iOS for VoiceOver, while accessibility child order is more important on macOS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Navigation:&lt;/strong&gt; Mac VoiceOver navigation is hierarchical, while iOS is linear. Grouping elements is crucial for efficient Mac navigation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;will-the-new-ai-voices-be-available-for-voiceover&quot;&gt;Will the new AI voices be available for VoiceOver?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The voices used for VoiceOver are specifically tailored and tuned for screen reader use.&lt;/li&gt;
&lt;li&gt;Users of VoiceOver often increase speech rate, which influences voice selection and tuning.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-accessibility-regressions-be-prevented-besides-manual-testing&quot;&gt;How can accessibility regressions be prevented besides manual testing?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Automated Testing:&lt;/strong&gt; Use XCUI tests, which rely on the accessibility hierarchy. If an app is not accessible, XC tests will fail.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accessibility Assertions:&lt;/strong&gt; Add assertions in XC tests to check for &lt;code&gt;accessibilityLabel&lt;/code&gt; presence or other accessibility properties.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New XCTest API:&lt;/strong&gt; A new API allows programmatic control of VoiceOver for element-by-element navigation and validation, enabling smoke tests for accessibility.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-accessibility-improvements-are-available-in-xcode-and-developer-tools-this-year-especially-for-blind-developers&quot;&gt;What accessibility improvements are available in Xcode and developer tools this year, especially for blind developers?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Terminal Accessibility:&lt;/strong&gt; Improved VoiceOver support for Terminal, including better access to marks, tab autocomplete suggestions, and moving to the visible beginning.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Xcode Bug Fixes:&lt;/strong&gt; Numerous bug fixes for VoiceOver in Xcode are available in Seed 1.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SwiftUI:&lt;/strong&gt; Levels the playing field by allowing all developers, including those using VoiceOver, to define and edit UI in code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Xcode Rotors (macOS):&lt;/strong&gt; Enhanced rotors allow quick navigation between methods, errors, warnings, and variable names within Xcode.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI Coding Assistant:&lt;/strong&gt; New AI skills in Xcode (Seed 1) for VoiceOver and Dynamic Type can help developers make their apps accessible by suggesting code edits and identifying issues.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI for Efficiency:&lt;/strong&gt; AI tools can help developers scan and summarize code, potentially leveling the playing field for those with vision or cognitive impairments.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;for-spatial-computing-tools-using-eye-tracking-or-gaze-like-visionos-how-can-designers-avoid-assuming-visual-gaze-is-the-primary-input-method&quot;&gt;For spatial computing tools using eye tracking or gaze (like visionOS), how can designers avoid assuming visual gaze is the primary input method?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pointer Control:&lt;/strong&gt; visionOS offers Pointer Control, allowing users to use other body parts (head, finger, wrist) as pointers instead of gaze.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comprehensive Sessions:&lt;/strong&gt; WWDC sessions cover these topics in detail, including making RealityKit content accessible.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>Miká Kruschel</author></item><item><title>Coding Intelligence, Machine Learning &amp; AI</title><link>https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8121</link><guid isPermaLink="true">https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8121</guid><description>Foundation Models Framework: Top-level for LLM use cases. Integrates with various inference backends. The framework will be open source very soon, tying together the Language Model Protocol ecosystem.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;coding-intelligence-machine-learning--ai&quot;&gt;Coding Intelligence, Machine Learning &amp;#x26; AI&lt;/h1&gt;
&lt;p&gt;Unofficial AI summary of the WWDC26 group lab. May contain mistakes.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/videos/play/wwdc2026/8121&quot;&gt;Watch on Apple Developer&lt;/a&gt; · &lt;a href=&quot;https://kruschel.dev/wwdc26-group-labs-transcripts/wwdc2026-8121.txt&quot;&gt;Raw transcript&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Related Labs: &lt;a href=&quot;https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8007&quot;&gt;Coding Intelligence for Beginners&lt;/a&gt;, &lt;a href=&quot;https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8011&quot;&gt;Apple Intelligence&lt;/a&gt;, &lt;a href=&quot;https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8016&quot;&gt;Machine Learning &amp;#x26; AI&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-are-the-roles-of-core-ai-core-ml-and-mlx-and-how-should-a-beginner-understand-them&quot;&gt;What are the roles of Core AI, Core ML, and MLX, and how should a beginner understand them?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Foundation Models Framework:&lt;/strong&gt; Top-level for LLM use cases. Integrates with various inference backends. The framework will be &lt;strong&gt;open source very soon&lt;/strong&gt;, tying together the Language Model Protocol ecosystem.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Core AI:&lt;/strong&gt; For custom models (trained or downloaded). Offers SLAs and guarantees, suitable for applications.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MLX:&lt;/strong&gt; For powerful, custom use cases, including distributed training and local AI.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Core ML:&lt;/strong&gt; Primarily for traditional ML models like decision trees; new neural network work should use Core AI.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Recommendation:&lt;/strong&gt; Start with Foundation Models for LLMs. For custom non-LLM tasks, use Core AI. Use MLX for advanced or custom training needs.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-on-device-foundation-models-context-window-in-ios-27-and-is-the-input-and-output-counted-against-one-shared-token-budget&quot;&gt;What is the on-device foundation model’s context window in iOS 27, and is the input and output counted against one shared token budget?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The on-device context window is 4096 tokens.&lt;/li&gt;
&lt;li&gt;This is a shared budget for both input and output. For example, 4000 input tokens leave only 96 for the response.&lt;/li&gt;
&lt;li&gt;Private Cloud Compute (PCC) offers a larger 32K context window with the same shared budget principle.&lt;/li&gt;
&lt;li&gt;For even larger context needs (up to 1 million tokens), consider third-party models via MLX or Core AI.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;can-foundation-models-run-inside-background-app-refresh-or-background-processing-tasks-especially-when-the-phone-is-locked-or-the-app-has-been-backgrounded&quot;&gt;Can foundation models run inside background app refresh or background processing tasks, especially when the phone is locked or the app has been backgrounded?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, foundation models can run in background tasks.&lt;/li&gt;
&lt;li&gt;The system may rate-limit requests if it’s busy, returning a rate-limited error. Developers should handle this by retrying later.&lt;/li&gt;
&lt;li&gt;On &lt;strong&gt;iOS&lt;/strong&gt;, background LLM use may be rate-limited or deprioritized when the system is busy.&lt;/li&gt;
&lt;li&gt;On &lt;strong&gt;macOS&lt;/strong&gt;, will not be rate-limited with the local foundation model while the app is in the foreground.&lt;/li&gt;
&lt;li&gt;Private Cloud Compute may experience rate limiting due to system load (&lt;code&gt;system busy&lt;/code&gt;) or excessive requests (&lt;code&gt;too many requests&lt;/code&gt; / quota exhaustion).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;for-macos-27-apple-intelligence-what-does-waitlist-mean-and-are-different-models-offered-on-the-waitlist&quot;&gt;For macOS 27, Apple Intelligence, what does “waitlist” mean, and are different models offered on the waitlist?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The “waitlist” applies only to Siri.&lt;/li&gt;
&lt;li&gt;It does not apply to on-device Apple Intelligence features or Private Cloud Compute (PCC) language models.&lt;/li&gt;
&lt;li&gt;The beta includes the AFM core advanced 20 billion model, used for voice features.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;can-the-foundation-models-framework-mix-on-device-models-private-cloud-compute-and-third-party-llm-providers-within-a-single-agentic-flow-and-what-are-the-data-privacy-and-attribution-boundaries&quot;&gt;Can the Foundation Models Framework mix on-device models, private cloud compute, and third-party LLM providers within a single agentic flow, and what are the data privacy and attribution boundaries?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yes, developers can mix these using the &lt;code&gt;Dynamic Profiles&lt;/code&gt; API.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Baton Pass:&lt;/strong&gt; A pattern where context is fully shared between models in a flow. Suitable for on-device or PCC models where privacy is not a concern.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Phone a Friend:&lt;/strong&gt; A pattern where only the current query is sent to a third-party model, preserving privacy of previous interactions. This is akin to tool calling with an ephemeral session.&lt;/li&gt;
&lt;li&gt;Privacy and attribution boundaries depend on the chosen pattern and the third-party provider’s policies.&lt;/li&gt;
&lt;li&gt;Profile modifiers can manage context window sizes between different models.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;who-handles-on-device-speech-personalization-for-user-specific-names&quot;&gt;Who handles on-device speech personalization for user-specific names?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Configure speech personalization through the speech framework documentation and developer forums.&lt;/li&gt;
&lt;li&gt;Speech recognition systems often include a separate personalization component that developers may be able to fine-tune.&lt;/li&gt;
&lt;li&gt;Building a custom model to handle specific names and pronunciations is possible for supported languages.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-coding-agents-learn-a-projects-code-style-and-architecture&quot;&gt;How can coding agents learn a project’s code style and architecture?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Leverage Source Code:&lt;/strong&gt; Agents learn by observing existing code in the project.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Provide Examples:&lt;/strong&gt; Use agent-specific files (e.g., &lt;code&gt;AGENTS.md&lt;/code&gt;) to provide examples of code style. Keep these files concise to fit within context windows.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reference Other Files:&lt;/strong&gt; Link to style guides or documentation within the &lt;code&gt;AGENTS.md&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Document Learnings:&lt;/strong&gt; Instruct agents to document their findings and assumptions about the codebase. This creates a knowledge base for future reference.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Search and Learning:&lt;/strong&gt; Agents learn by searching for information. Providing access to relevant markdown files or documentation enhances their learning.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Xcode Integration:&lt;/strong&gt; Xcode’s documentation search can help agents learn new APIs, even if the model is older.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent Client Protocol (ACP):&lt;/strong&gt; Using ACP with local LLM providers (like LM Studio) in Xcode 27 offers more capabilities than simple chat completions, including state management and file I/O.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Model Choice:&lt;/strong&gt; Smaller local models may have limitations with very large codebases or complex reasoning.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Continuous Teaching:&lt;/strong&gt; Developers need to continuously teach agents their style and project-specific preferences.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resetting:&lt;/strong&gt; When new models are released, consider starting with a clean slate to see what the new model can do without prior context.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-practical-steps-can-teams-take-to-integrate-automated-ui-testing-into-their-workflows-on-apple-platforms&quot;&gt;What practical steps can teams take to integrate automated UI testing into their workflows on Apple platforms?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unit Tests:&lt;/strong&gt; Focus on testing small, independent kernels of functionality. Agents can help enumerate permutations and combinations for comprehensive unit tests.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integration Tests:&lt;/strong&gt; Introduce dependencies and run tests that are slightly longer and more expensive. Agents can help structure code for better testability.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UI Tests:&lt;/strong&gt; Use these as a final check for the overall UI integration. Agents can now interact with the simulator to perform actions (tap, swipe, type) and analyze accessibility trees and screenshots to identify bugs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent-driven UI Testing:&lt;/strong&gt; In Xcode 27, agents can use the simulator to test and learn patterns, then write UI tests. They can also run for extended periods to find bugs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Screenshots and Finalized UI:&lt;/strong&gt; Providing screenshots of finalized UI can help agents understand and potentially recreate it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;have-there-been-any-updates-to-natural-language-processing-and-apple-vision-kit-and-what-is-the-preferred-method-for-image-extraction-now-that-foundation-models-support-image-attachments&quot;&gt;Have there been any updates to Natural Language Processing and Apple Vision Kit, and what is the preferred method for image extraction now that Foundation Models support image attachments?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vision Framework:&lt;/strong&gt; Has significant updates, including segmentation models. Refer to the “What’s New in Image Understanding” session.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Foundation Models vs. Vision Framework:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vision Framework:&lt;/strong&gt; Preferred for well-understood, structured tasks like barcode detection or OCR. It’s optimized, efficient, and highly testable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Foundation Models:&lt;/strong&gt; Preferred for tasks requiring semantic understanding, natural language nuance, or when dealing with novel or complex image analysis that doesn’t fit a predefined structure.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New Tools:&lt;/strong&gt; Foundation Models now include tools like barcode readers and OCR, blurring the lines.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use Case Driven:&lt;/strong&gt; If a structured API exists (like Translate API for translation), use it. If the task is dynamic, requires stylistic changes, or involves natural language prompts, Foundation Models are more suitable.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;on-device-llms-have-limited-token-capacity-what-are-the-best-practices-for-managing-prompt-size-tool-definitions-and-context-to-avoid-exceeding-limits-while-maintaining-high-quality-responses&quot;&gt;On-device LLMs have limited token capacity. What are the best practices for managing prompt size, tool definitions, and context to avoid exceeding limits while maintaining high-quality responses?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Track Token Usage:&lt;/strong&gt; Use new symbols in the Foundation Models Framework (iOS 26.4) to programmatically check context size and count tokens. Access &lt;code&gt;response.usage&lt;/code&gt; to see input, output, and cached tokens.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Drop Tool Calls/Results:&lt;/strong&gt; After a tool call is processed and a response is generated, consider dropping the tool call and its output from the transcript to save context.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Summarize History:&lt;/strong&gt; Use the &lt;code&gt;Summarize History&lt;/code&gt; modifier from the open-source &lt;code&gt;Foundation Models Utilities&lt;/code&gt; repo to periodically compress older, less relevant transcript entries.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compress or Drop Older Entries:&lt;/strong&gt; Remove or compress entries that are no longer relevant to save context.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Profile Modifiers:&lt;/strong&gt; Use these to manage context window sizes, especially when switching between models with different capacities.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Open Source Utilities:&lt;/strong&gt; The &lt;code&gt;Foundation Models Utilities&lt;/code&gt; repo provides building blocks applicable to any backend conforming to the language model protocol.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evaluations Framework:&lt;/strong&gt; Crucial for determining optimal context management strategies (e.g., how often to summarize, what to condense) based on use case and model performance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configurable Prompts:&lt;/strong&gt; Prompts used for summarization or other context management should be overwritable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Break Down Tasks:&lt;/strong&gt; Avoid giving a single session too many independent tasks; break them into multiple sessions to utilize context windows more effectively.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Model Architecture:&lt;/strong&gt; Newer models often have more efficient attention mechanisms (e.g., sliding window, linear attention) that handle context better.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configurable Reasoning:&lt;/strong&gt; Some models offer configurable reasoning levels, allowing developers to trade-offs between reasoning depth for latency and context handling.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;can-foundation-models-guardrails-be-prevented-from-refusing-emotionally-intense-but-legitimate-journal-entries-and-how-can-guardrail-refusals-be-detected-separately-from-other-errors&quot;&gt;Can Foundation Models guardrails be prevented from refusing emotionally intense but legitimate journal entries, and how can guardrail refusals be detected separately from other errors?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Permissive Content Transformations:&lt;/strong&gt; For system language models, enabling this setting during guardrail initialization prevents refusals on emotionally charged input.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Model Refusal vs. Guardrail Error:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Model Refusal:&lt;/strong&gt; The model itself declines to elaborate or expand on content due to its alignment training. This is a model response, not a guardrail error.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guardrail Error:&lt;/strong&gt; A separate moderation model flags input or output as problematic. This can be caught and handled separately.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Third-Party Models:&lt;/strong&gt; Guardrails and these specific refusal mechanisms do not apply when using custom custom models.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feedback:&lt;/strong&gt; If guardrails are not behaving as expected, file feedback. Explore custom model options if Apple’s models don’t meet specific needs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improvements:&lt;/strong&gt; Guardrails have been significantly improved with more training data to reduce false positives.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-apples-guiding-philosophy-or-approach-to-ai-evaluation&quot;&gt;What is Apple’s guiding philosophy or approach to AI evaluation?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Evaluation-Driven Development:&lt;/strong&gt; Start with evaluation from the beginning, treating it as the “living specification” of the feature.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Formative Assessment:&lt;/strong&gt; Evaluations are for learning and improvement, not just checking what’s already learned. They identify weak spots.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comprehensive Test Cases:&lt;/strong&gt; Include core use cases, headroom for growth, and edge cases in evaluations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tools and Frameworks:&lt;/strong&gt; Apple provides tools and a framework to make evaluation easy, from curated datasets to synthetic data generation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Iterative Improvement:&lt;/strong&gt; Use evaluation results to refine models and configurations, comparing different approaches to “hill climb” the feature’s performance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Confidence in Choices:&lt;/strong&gt; Evaluation helps developers confidently select the best models and configurations for their specific use cases.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-it-possible-for-models-used-by-different-apps-on-iphone-to-be-shared-across-apps-to-save-storage-space&quot;&gt;Is it possible for models used by different apps on iPhone to be shared across apps to save storage space?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No, direct sharing of models across unrelated apps is not possible.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Complexity:&lt;/strong&gt; Sharing models is complicated due to resource contention and the need to control access.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;App Groups:&lt;/strong&gt; Model caching in Core AI can be shared if apps belong to the same app group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use Case Specific Optimizations:&lt;/strong&gt; Models are often optimized (quantized) differently for specific use cases, making a universal shared model impractical.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sandboxing:&lt;/strong&gt; iOS app sandboxing prevents apps from accessing each other’s downloaded models directly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Developer Ownership:&lt;/strong&gt; Model weights can be shared between apps owned by the same developer within an app group, but the runtime loading of models in memory is not shared.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>Miká Kruschel</author></item><item><title>Power and Performance</title><link>https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8003</link><guid isPermaLink="true">https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8003</guid><description>Profile the overall app first before assuming SwiftUI is the bottleneck.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;power-and-performance&quot;&gt;Power and Performance&lt;/h1&gt;
&lt;p&gt;Unofficial AI summary of the WWDC26 group lab. May contain mistakes.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/videos/play/wwdc2026/8003&quot;&gt;Watch on Apple Developer&lt;/a&gt; · &lt;a href=&quot;https://kruschel.dev/wwdc26-group-labs-transcripts/wwdc2026-8003.txt&quot;&gt;Raw transcript&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-are-the-main-factors-affecting-app-power-usage-and-performance-in-swiftui-for-beginners&quot;&gt;What are the main factors affecting app power usage and performance in SwiftUI for beginners?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Profile the overall app first before assuming SwiftUI is the bottleneck.&lt;/li&gt;
&lt;li&gt;Review the &lt;strong&gt;Optimize SwiftUI using Instruments&lt;/strong&gt; session for SwiftUI-specific profiling guidance.&lt;/li&gt;
&lt;li&gt;Separate views from their inputs to avoid unnecessary redraws.&lt;/li&gt;
&lt;li&gt;Use tools like Instruments to understand view dependencies and break them up.&lt;/li&gt;
&lt;li&gt;Invest in SwiftUI performance optimizations, as they often lead to power wins.&lt;/li&gt;
&lt;li&gt;Avoid deeply nested SwiftUI hierarchies.&lt;/li&gt;
&lt;li&gt;Any SwiftUI optimization generally helps with both performance and power.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-biggest-power-mistake-developers-commonly-make-without-realizing-it&quot;&gt;What is the biggest power mistake developers commonly make without realizing it?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Not having enough telemetry or instrumentation, leading to focus on low-ROI areas.&lt;/li&gt;
&lt;li&gt;Underestimating the importance of instrumentation and measurement before optimizing.&lt;/li&gt;
&lt;li&gt;Not accounting for different app states that can affect power characteristics (e.g., testing with large data sets).&lt;/li&gt;
&lt;li&gt;Not inducing different conditions (e.g., thermal state, network changes) to test app behavior.&lt;/li&gt;
&lt;li&gt;Underestimating the power cost of file system access and network requests.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-best-documentation-for-instruments&quot;&gt;What is the best documentation for Instruments?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The “Instruments Tutorials” is the recommended starting point for beginners.&lt;/li&gt;
&lt;li&gt;This tutorial includes an associated project with built-in performance issues to practice detection and fixing.&lt;/li&gt;
&lt;li&gt;Guides are available for specific Instruments tools as needed.&lt;/li&gt;
&lt;li&gt;Use Feedback Assistant to request missing documentation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-a-good-starting-point-for-beginners-using-instruments&quot;&gt;What is a good starting point for beginners using Instruments?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use the Time Profiler with the Flame Graph view.&lt;/li&gt;
&lt;li&gt;Flame Graphs visually show the cost of operations and call stacks, making performance bottlenecks easy to identify.&lt;/li&gt;
&lt;li&gt;Consider using “Top Functions” for a flatter list of helper and compiler runtime functions.&lt;/li&gt;
&lt;li&gt;New in Instruments: &lt;strong&gt;run comparison&lt;/strong&gt; lets developers diff call trees across runs to see what changed between profiling sessions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-should-high-battery-usage-be-diagnosed-when-background-work-seems-minimal&quot;&gt;How should high battery usage be diagnosed when background work seems minimal?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Investigate potential background task scheduling, even if not explicitly coded.&lt;/li&gt;
&lt;li&gt;Use the Power Profiler in untethered mode to record traces on the device without Instruments attached.&lt;/li&gt;
&lt;li&gt;Analyze the trace in Instruments to identify background workloads.&lt;/li&gt;
&lt;li&gt;Examine the breakdown of energy usage by subsystem (CPU, GPU, display, networking).&lt;/li&gt;
&lt;li&gt;High brightness or frequent color swaps can also contribute to energy drain.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;when-does-injecting-a-theme-object-via-environmentobject-become-a-performance-bottleneck-in-large-swiftui-apps&quot;&gt;When does injecting a theme object via &lt;code&gt;@EnvironmentObject&lt;/code&gt; become a performance bottleneck in large SwiftUI apps?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;It’s difficult to give specific numbers, as performance impact varies by view complexity.&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;@EnvironmentObject&lt;/code&gt; is generally a useful abstraction for passing data.&lt;/li&gt;
&lt;li&gt;Use the SwiftUI instrument in Instruments to assess the downstream impact of environment changes.&lt;/li&gt;
&lt;li&gt;Performance issues are case-by-case and depend on the view tree configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-should-large-data-sets-be-loaded-in-swiftui-tables-and-how-can-metrickit-help&quot;&gt;How should large data sets be loaded in SwiftUI tables, and how can MetricKit help?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Load only the data necessary for the current user experience.&lt;/li&gt;
&lt;li&gt;Use SwiftUI’s lazy loading mechanisms (e.g., lazy &lt;code&gt;HStack&lt;/code&gt;, &lt;code&gt;VStack&lt;/code&gt;) to load data as it scrolls into view.&lt;/li&gt;
&lt;li&gt;Use MetricKit’s state reporting to categorize batch sizes (e.g., large, medium, small) to analyze performance within those ranges.&lt;/li&gt;
&lt;li&gt;Avoid logging very frequently changing numbers; categorize data into meaningful boundaries for analysis.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-does-ios-prioritize-background-tasks-when-the-system-is-under-heavy-apple-intelligence-workloads&quot;&gt;How does iOS prioritize background tasks when the system is under heavy Apple Intelligence workloads?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Many Apple Intelligence features run on the Neural Engine or private cloud compute, potentially not impacting CPU-bound app tasks.&lt;/li&gt;
&lt;li&gt;Configure background tasks in small, easily pausable chunks to allow the system to resume them efficiently.&lt;/li&gt;
&lt;li&gt;Use System Trace in Instruments to see thread priorities and identify tasks that preempt the app’s threads.&lt;/li&gt;
&lt;li&gt;The system aims to schedule workloads automatically to provide the best user experience.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;performing-expensive-tasks-on-background-threads-during-launch-causes-thread-hops-how-expensive-is-this-compared-to-thread-blocking-and-are-there-better-solutions&quot;&gt;Performing expensive tasks on background threads during launch causes thread hops. How expensive is this compared to thread blocking, and are there better solutions?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Frequent thread hopping adds overhead, but the cost is negligible unless done thousands of times per second.&lt;/li&gt;
&lt;li&gt;Defer non-critical work until after the initial launch to minimize thread hops.&lt;/li&gt;
&lt;li&gt;Prioritize background threads lower than main content loading threads.&lt;/li&gt;
&lt;li&gt;Use pre-warming with &lt;code&gt;BGAppRefreshTasks&lt;/code&gt; to fetch necessary information before launch.&lt;/li&gt;
&lt;li&gt;Instruments’ System Trace can graph context switch counts to help correlate with launch metrics.&lt;/li&gt;
&lt;li&gt;Avoid fetching A/B test experiments or similar during launch; cache previous results.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-launch-delays-from-background-work-be-identified&quot;&gt;How can launch delays from background work be identified?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use Instruments’ System Trace template to record thread states and identify if the main thread is blocked.&lt;/li&gt;
&lt;li&gt;A common real-world issue: spawning background work at launch then &lt;strong&gt;blocking the main thread until it completes&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Inspect what’s on the critical path to launch, including network requests and framework-related tasks.&lt;/li&gt;
&lt;li&gt;Check Xcode Organizer’s launch metrics for top issues and call stacks causing slow launches.&lt;/li&gt;
&lt;li&gt;Don’t measure launch time with kernel APIs or in-process heuristics — the app process can’t reliably measure its own launch.&lt;/li&gt;
&lt;li&gt;Use MetricKit or Xcode Organizer; the system measures &lt;strong&gt;tap on icon → first screen drawn&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Measure the app’s launch time and compare it across versions to identify regressions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-most-common-silent-battery-killer-in-swiftui-and-how-can-it-be-caught&quot;&gt;What is the most common silent battery killer in SwiftUI, and how can it be caught?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;View over-invalidation is a significant battery killer, causing unnecessary CPU work without visual changes.&lt;/li&gt;
&lt;li&gt;Minimize redraws and flatten the UI hierarchy to reduce foreground energy drain.&lt;/li&gt;
&lt;li&gt;Monitor background threads dispatching workloads for data fetching and display.&lt;/li&gt;
&lt;li&gt;Apply basic software engineering principles: cache when possible and minimize repetitive work.&lt;/li&gt;
&lt;li&gt;Use the SwiftUI instrument in Instruments to focus on these issues.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;are-there-performance-improvements-for-large-lists-and-table-views-in-swiftui-for-macos-27-and-what-are-best-practices&quot;&gt;Are there performance improvements for large lists and table views in SwiftUI for macOS 27, and what are best practices?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Keeping list size constant helps SwiftUI manage updates efficiently.&lt;/li&gt;
&lt;li&gt;Use lazy data structures to load items as needed.&lt;/li&gt;
&lt;li&gt;Move filtering and data manipulation to the model layer before providing data to SwiftUI.&lt;/li&gt;
&lt;li&gt;Avoid cells that change size frequently, as this causes cascading recalculations.&lt;/li&gt;
&lt;li&gt;Consistent cell sizes allow SwiftUI to utilize its caching capabilities.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-expensive-is-anyview-for-type-erasure-in-swiftui-and-when-should-it-be-avoided&quot;&gt;How expensive is &lt;code&gt;AnyView&lt;/code&gt; for type erasure in SwiftUI, and when should it be avoided?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AnyView&lt;/code&gt; adds overhead during view creation due to type erasure.&lt;/li&gt;
&lt;li&gt;Avoid &lt;code&gt;AnyView&lt;/code&gt; if easily avoidable, but don’t over-optimize prematurely.&lt;/li&gt;
&lt;li&gt;If &lt;code&gt;AnyView&lt;/code&gt; becomes a performance problem, it can be addressed later.&lt;/li&gt;
&lt;li&gt;Measurement is key; use Instruments to determine if &lt;code&gt;AnyView&lt;/code&gt; is a bottleneck.&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;AnyView&lt;/code&gt; for features like accessibility (e.g., switching layouts) is generally acceptable.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-noteworthy-developer-tools-beyond-metrickits-state-reporting-and-crash-report-extensions&quot;&gt;What are noteworthy developer tools beyond MetricKit’s state reporting and crash report extensions?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Xcode Organizer offers aggregated field data with less flexibility than MetricKit but provides visualization.&lt;/li&gt;
&lt;li&gt;Metric goals in Xcode Organizer offer guidance by comparing the app’s performance to similar apps.&lt;/li&gt;
&lt;li&gt;Foundation Models has an updated Instruments tool for debugging requests, prompts, and token caching.&lt;/li&gt;
&lt;li&gt;A tool for profiling long-term Metal apps shipped in 26.4, recording performance over hours.&lt;/li&gt;
&lt;li&gt;Check developer forums for posts tagged with MetricKit for updates on performance and power tools.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-one-big-thing-developers-should-check-out-from-the-new-tools-this-year&quot;&gt;What is the one big thing developers should check out from the new tools this year?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Metric goals in Xcode Organizer: Compare the app’s metrics against similar applications to identify areas for investment (power, foreground energy, launches, hangs).&lt;/li&gt;
&lt;li&gt;State reporting in MetricKit: Slice data to understand which application states are performing poorly.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;beyond-wwdc-sessions-and-swift-evolution-proposals-what-is-the-pathway-to-deep-expertise-in-swift-performance&quot;&gt;Beyond WWDC sessions and Swift evolution proposals, what is the pathway to deep expertise in Swift performance?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Gain experience by building things and using Instruments tools (Time Profiler, SwiftUI Instrument) to understand framework behavior.&lt;/li&gt;
&lt;li&gt;Study resources like the “Optimized CPU Performance with Instruments” session and the “Apple Silicon Optimization Guide.”&lt;/li&gt;
&lt;li&gt;Understand how Apple’s CPUs and hardware work to implement performant Swift algorithms.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-swiftui-avoid-performance-issues-from-escaping-closure-parameters&quot;&gt;How can SwiftUI avoid performance issues from escaping closure parameters?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Call closures in the &lt;code&gt;init&lt;/code&gt; rather than the &lt;code&gt;body&lt;/code&gt; to prevent execution on every view re-evaluation.&lt;/li&gt;
&lt;li&gt;If closures cause performance issues, explore alternative APIs or data structures.&lt;/li&gt;
&lt;li&gt;Consider the &lt;a href=&quot;https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8006&quot;&gt;SwiftUI (June 10)&lt;/a&gt; and &lt;a href=&quot;https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8120&quot;&gt;SwiftUI (June 11)&lt;/a&gt; labs for more in-depth architectural advice.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-best-practices-for-handling-dynamic-data-or-heavy-assets-in-swiftui-to-avoid-performance-stutters-on-older-devices&quot;&gt;What are best practices for handling dynamic data or heavy assets in SwiftUI to avoid performance stutters on older devices?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use assets appropriately sized for their use case (e.g., smaller images for thumbnails).&lt;/li&gt;
&lt;li&gt;Implement caching for assets to minimize refetching and recomputing.&lt;/li&gt;
&lt;li&gt;Use placeholders or loading indicators for non-critical assets to improve perceived performance and responsiveness.&lt;/li&gt;
&lt;li&gt;Test on older devices or use low power mode on newer devices to simulate performance constraints.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;Xcode condition inducers&lt;/strong&gt; (thermal and network limits) in addition to Low Power Mode for realistic stress testing.&lt;/li&gt;
&lt;li&gt;Use physical devices for profiling; simulators do not accurately reflect device performance.&lt;/li&gt;
&lt;li&gt;Leverage MetricKit and Xcode Organizer for field data from users with diverse devices.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-recommended-strategies-for-managing-thermal-pressure-and-preserving-user-experience-in-compute-intensive-apps-arkit-metal-used-outdoors&quot;&gt;What are recommended strategies for managing thermal pressure and preserving user experience in compute-intensive apps (ARKit, Metal) used outdoors?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Listen for &lt;code&gt;ProcessInfo.thermalState&lt;/code&gt; to detect elevated thermal states.&lt;/li&gt;
&lt;li&gt;Back off on richer experiences when thermal pressure is high without significantly compromising user experience.&lt;/li&gt;
&lt;li&gt;Examples of backing off include: requesting lighter resources from the network, simplifying animations, reducing frame rates, or lowering resolution.&lt;/li&gt;
&lt;li&gt;Optimize the controllable aspects of the app’s power draw to maximize performance under thermal constraints.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;does-using-many-environment-properties-in-a-large-swiftui-app-impact-rendering-or-update-performance&quot;&gt;Does using many &lt;code&gt;@Environment&lt;/code&gt; properties in a large SwiftUI app impact rendering or update performance?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The primary performance concern with &lt;code&gt;@Environment&lt;/code&gt; is “environment churn.”&lt;/li&gt;
&lt;li&gt;Updating environment values at high frequency can cause views reading from the environment to re-evaluate unnecessarily.&lt;/li&gt;
&lt;li&gt;Simply reading values from the environment is generally not expensive.&lt;/li&gt;
&lt;li&gt;Use Instruments (e.g., SwiftUI instrument) to monitor and identify environment churn issues.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;whats-new-in-metrickit-for-ios-27&quot;&gt;What’s new in MetricKit for iOS 27?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;MetricKit has been rebuilt with a &lt;strong&gt;Swift-first API&lt;/strong&gt;; much of the old API is marked deprecated.&lt;/li&gt;
&lt;li&gt;New diagnostic and metric types are only available on the new API.&lt;/li&gt;
&lt;li&gt;Finer-grained reporting intervals are supported.&lt;/li&gt;
&lt;li&gt;State reporting (categorizing batch sizes) remains useful for analyzing performance within meaningful ranges.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>Miká Kruschel</author></item><item><title>Swift</title><link>https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8001</link><guid isPermaLink="true">https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8001</guid><description>Swift 6.4 includes general diagnostic improvements and the @diagnose attribute for fine-grained warning control.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;swift&quot;&gt;Swift&lt;/h1&gt;
&lt;p&gt;Unofficial AI summary of the WWDC26 group lab. May contain mistakes.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/videos/play/wwdc2026/8001&quot;&gt;Watch on Apple Developer&lt;/a&gt; · &lt;a href=&quot;https://kruschel.dev/wwdc26-group-labs-transcripts/wwdc2026-8001.txt&quot;&gt;Raw transcript&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-are-notable-swift-64-features-worth-knowing-about&quot;&gt;What are notable Swift 6.4 features worth knowing about?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Swift 6.4 includes general diagnostic improvements and the &lt;code&gt;@diagnose&lt;/code&gt; attribute for fine-grained warning control.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@diagnose&lt;/code&gt; can suppress deprecation warnings in specific code regions or opt into warnings that are off by default (e.g., strict memory safety, strict concurrency).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;async defer&lt;/code&gt; and cancellation shields improve resource cleanup in structured concurrency.&lt;/li&gt;
&lt;li&gt;A new open-source subprocess package, Foundation performance improvements, and APIs like &lt;code&gt;ProgressManager&lt;/code&gt; are also new.&lt;/li&gt;
&lt;li&gt;Embedded Swift improvements make bare-metal and firmware targets easier to use with familiar Swift code.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-is-data-ownership-transferred-between-isolation-domains&quot;&gt;How is data ownership transferred between isolation domains?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Swift concurrency uses region-based isolation for transferring non-sendable data between actors.&lt;/li&gt;
&lt;li&gt;The original actor must no longer access the data after the transfer.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;sending&lt;/code&gt; keyword can be used to explicitly annotate parameters or return types for safe transfer.&lt;/li&gt;
&lt;li&gt;For storing such values, unsafe opt-outs are currently available, with an active pitch for a &lt;code&gt;disconnected&lt;/code&gt; data type to preserve transfer properties.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-best-practices-and-pitfalls-when-using-swift-structured-concurrency&quot;&gt;What are best practices and pitfalls when using Swift Structured Concurrency?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Lean into structured concurrency assertively; avoid escape hatches.&lt;/li&gt;
&lt;li&gt;Refactor smaller code parts into single units.&lt;/li&gt;
&lt;li&gt;Prefer &lt;code&gt;task groups&lt;/code&gt; over &lt;code&gt;task.detached&lt;/code&gt; or &lt;code&gt;Task.init&lt;/code&gt; for mainline flow.&lt;/li&gt;
&lt;li&gt;Use objects with life cycles that fit task groups’ lexical scope.&lt;/li&gt;
&lt;li&gt;Consider &lt;code&gt;with-style&lt;/code&gt; functions or &lt;code&gt;deinit&lt;/code&gt;-based cleanup for lexical scoping.&lt;/li&gt;
&lt;li&gt;Avoid fanning out too much; write linear asynchronous code within task groups.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;cancellation shields&lt;/code&gt; for asynchronous cleanup operations in canceled contexts, especially for resources like file I/O or database transactions.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;async defer&lt;/code&gt; blocks can be placed within cancellation shields if they contain &lt;code&gt;await&lt;/code&gt; calls that might suspend.&lt;/li&gt;
&lt;li&gt;Non-sendable types help reason about linear data flow within asynchronous control flow, preventing accidental escapes.&lt;/li&gt;
&lt;li&gt;Explicitly marking ephemeral data types as non-sendable can simplify data models and improve performance by ensuring cheap passing of intermediate types.&lt;/li&gt;
&lt;li&gt;Don’t overuse &lt;code&gt;unchecked&lt;/code&gt; Sendable during Swift 6 migration — it deprives the project of the compiler’s safety benefits.&lt;/li&gt;
&lt;li&gt;Fork-join, scatter-gather, and similar patterns are useful models for structured concurrency when developers have repetitive parallel work.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-overhead-of-unnecessary-protocol-conformances-like-sendable-equatable-hashable-identifiable-comparable&quot;&gt;What is the overhead of unnecessary protocol conformances like Sendable, Equatable, Hashable, Identifiable, Comparable?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Conformances like &lt;code&gt;Equatable&lt;/code&gt; and &lt;code&gt;Hashable&lt;/code&gt; incur a cost because the associated equality or hashing functions must be available, even if not directly used. The compiler keeps this code around for potential runtime discovery (e.g., via &lt;code&gt;as?&lt;/code&gt; casts).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Sendable&lt;/code&gt; is a tag with no runtime representation and thus no overhead.&lt;/li&gt;
&lt;li&gt;Adding generic overloads on protocols can potentially increase compilation time by widening the set of types that satisfy type-checking problems.&lt;/li&gt;
&lt;li&gt;API design should prioritize meaningful conformances; don’t conform just because it’s possible.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-cleanest-architectural-pattern-to-stop-mainactor-contagion-in-legacy-apps-without-sacrificing-swift-6-safety&quot;&gt;What is the cleanest architectural pattern to stop &lt;code&gt;@MainActor&lt;/code&gt; contagion in legacy apps without sacrificing Swift 6 safety?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Propagating &lt;code&gt;@MainActor&lt;/code&gt; annotations requires making code &lt;code&gt;async&lt;/code&gt; or adding the annotation elsewhere.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Option 1:&lt;/strong&gt; Enable &lt;code&gt;main actor by default&lt;/code&gt; mode for the entire module if most code belongs on the main actor. Annotate exceptions explicitly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Option 2:&lt;/strong&gt; Start with “leaf types” and work outwards.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Option 3:&lt;/strong&gt; Mark specific methods as &lt;code&gt;non-isolated&lt;/code&gt; if they don’t touch mutable state, reducing the need for all uses of the type to be on &lt;code&gt;@MainActor&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Consider making static variables immutable (&lt;code&gt;let&lt;/code&gt;) if they are never mutated, as these don’t require &lt;code&gt;@MainActor&lt;/code&gt; annotation.&lt;/li&gt;
&lt;li&gt;Refer to the “Migrate the app to Swift 6” session for code-along examples.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-most-essential-modern-swift-features-or-official-resources-for-high-efficiency-and-great-performance&quot;&gt;What are the most essential modern Swift features or official resources for high efficiency and great performance?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Profile first:&lt;/strong&gt; Use tools like Instruments (especially the flame graph and top functions views) to identify performance bottlenecks.&lt;/li&gt;
&lt;li&gt;Review WWDC sessions on Swift performance, such as the &lt;strong&gt;Swift performance using Instruments&lt;/strong&gt; session.&lt;/li&gt;
&lt;li&gt;Explore efficient data structures like &lt;code&gt;Span&lt;/code&gt; and &lt;code&gt;UniqueArray&lt;/code&gt; (available in the Swift Collections package).&lt;/li&gt;
&lt;li&gt;Apply fundamental computer science principles: use correct algorithms and consider Big O notation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;should-redundant-swift-6-concurrency-annotations-be-removed-after-the-isolation-model-changes&quot;&gt;Should redundant Swift 6 concurrency annotations be removed after the isolation model changes?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Redundant annotations are not harmful and can be left in place.&lt;/li&gt;
&lt;li&gt;Some developers prefer explicit annotations for clarity, documentation, or to prevent future regressions.&lt;/li&gt;
&lt;li&gt;Explicit annotations can serve as documentation of intent (e.g., “this type absolutely should not be sendable”).&lt;/li&gt;
&lt;li&gt;Removing redundant annotations is optional; when developers prefer explicitness, developers can keep them.&lt;/li&gt;
&lt;li&gt;Developers can now put &lt;code&gt;non-isolated&lt;/code&gt; directly on an extension (Swift 6.0/6.2), simplifying cleanup of per-method annotations.&lt;/li&gt;
&lt;li&gt;Adding comments explaining the rationale behind explicit annotations can be helpful for future understanding.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;why-is-userdefaults-not-sendable-if-its-documented-as-thread-safe&quot;&gt;Why is &lt;code&gt;UserDefaults&lt;/code&gt; not &lt;code&gt;Sendable&lt;/code&gt; if it’s documented as thread-safe?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Some classes in Foundation, while thread-safe, are not marked &lt;code&gt;Sendable&lt;/code&gt; due to potential subclassing issues (e.g., &lt;code&gt;NSString&lt;/code&gt; is immutable and &lt;code&gt;Sendable&lt;/code&gt;, but &lt;code&gt;NSMutableString&lt;/code&gt; is a mutable subclass and not &lt;code&gt;Sendable&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;To avoid propagating a “not &lt;code&gt;Sendable&lt;/code&gt;” status to all subclasses, some classes were marked as not &lt;code&gt;Sendable&lt;/code&gt; by default.&lt;/li&gt;
&lt;li&gt;Swift 6.4 introduces &lt;code&gt;~Sendable&lt;/code&gt; (tilde &lt;code&gt;Sendable&lt;/code&gt;) which allows more accurate annotation. This indicates a lack of &lt;code&gt;Sendable&lt;/code&gt; conformance, allowing subclasses to opt-in if they don’t introduce mutable state.&lt;/li&gt;
&lt;li&gt;The standard global &lt;code&gt;UserDefaults&lt;/code&gt; is expected to have a &lt;code&gt;Sendable&lt;/code&gt; conformance.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-it-good-practice-to-migrate-to-using-borrow-and-mutate-instead-of-get-and-set-altogether&quot;&gt;Is it good practice to migrate to using &lt;code&gt;borrow&lt;/code&gt; and &lt;code&gt;mutate&lt;/code&gt; instead of &lt;code&gt;get&lt;/code&gt; and &lt;code&gt;set&lt;/code&gt; altogether?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;borrow&lt;/code&gt; and &lt;code&gt;mutate&lt;/code&gt; are part of Swift’s ownership model and can be more efficient as they avoid copies and extra code by directly referencing data.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;borrow&lt;/code&gt; provides a reference to data held elsewhere.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mutate&lt;/code&gt; provides a mutable reference, requiring exclusive access to the data.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;get&lt;/code&gt; and &lt;code&gt;set&lt;/code&gt; are more general: &lt;code&gt;get&lt;/code&gt; produces a value (potentially computed), and &lt;code&gt;set&lt;/code&gt; can involve arbitrary code to make changes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Recommendation:&lt;/strong&gt; Use &lt;code&gt;borrow&lt;/code&gt; and &lt;code&gt;mutate&lt;/code&gt; for performance-sensitive scenarios where data is already sharing data already stored. Use &lt;code&gt;get&lt;/code&gt; and &lt;code&gt;set&lt;/code&gt; for all other cases.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-do-app-developers-choose-between-app-focused-and-systemsembedded-swift-features&quot;&gt;How do app developers choose between app-focused and systems/embedded Swift features?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Swift is designed with progressive disclosure; do not need to learn all features immediately.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Measure first:&lt;/strong&gt; Use profiling tools to identify performance issues before adopting advanced features.&lt;/li&gt;
&lt;li&gt;Advanced features like non-copyable types add complexity and should only be used when a measured need exists.&lt;/li&gt;
&lt;li&gt;Features are designed to work together; aim for complementary usage rather than mixing and matching unnecessarily.&lt;/li&gt;
&lt;li&gt;When when issues arise a problem (e.g., a performance bottleneck), there’s likely a Swift tool to help. Learn about that specific tool when the need arises.&lt;/li&gt;
&lt;li&gt;Language features are not “collectibles”; focus on solving problems rather than collecting features.&lt;/li&gt;
&lt;li&gt;Advanced performance features are often most effective in isolated, “hot path” areas of code.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-do-type-inference-generics-and-associated-types-affect-incremental-build-performance&quot;&gt;How do type inference, generics, and associated types affect incremental build performance?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Features like type inference, generics, and associated types can affect build performance in extreme cases, but generally don’t impact overall project build times.&lt;/li&gt;
&lt;li&gt;Slow module emission is often related to the number of imported modules.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;explicit module builds&lt;/strong&gt; (now on by default in Xcode) and the &lt;strong&gt;build timeline&lt;/strong&gt; in Xcode to diagnose where the compiler is spending its time.&lt;/li&gt;
&lt;li&gt;Look for excess dependencies that might be causing rebuilds.&lt;/li&gt;
&lt;li&gt;Performance tuning the build requires analyzing where the compiler is spending its time.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;would-the-swift-team-approach-concurrency-differently-if-designing-it-today&quot;&gt;Would the Swift team approach concurrency differently if designing it today?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The behavior of non-isolated &lt;code&gt;async&lt;/code&gt; functions is a key area of reflection.&lt;/li&gt;
&lt;li&gt;Initially, non-isolated &lt;code&gt;async&lt;/code&gt; functions were designed to always switch to the global concurrent thread pool.&lt;/li&gt;
&lt;li&gt;Experience showed that this could lead to data race safety errors when passing non-sendable types between actor-isolated contexts and these functions.&lt;/li&gt;
&lt;li&gt;The behavior was changed in Swift 6.2 to make non-isolated &lt;code&gt;async&lt;/code&gt; functions stay on the context they were called from (e.g., remain on the main actor if called from there).&lt;/li&gt;
&lt;li&gt;This change avoids issues with concurrent access to non-sendable values.&lt;/li&gt;
&lt;li&gt;Offloading work to the global concurrent thread pool is still useful but should be explicit and opt-in.&lt;/li&gt;
&lt;li&gt;The revised model is more approachable, mirroring non-concurrent behavior and making explicit choices about introducing concurrency.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-notable-swift-package-manager-build-improvements-in-recent-releases&quot;&gt;What are notable Swift Package Manager build improvements in recent releases?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The primary improvement in Swift 6.4 is the unification of build system implementations for Swift Package Manager (SPM) in Xcode and the open-source &lt;code&gt;swift build&lt;/code&gt; tool.&lt;/li&gt;
&lt;li&gt;A preview shipped in Swift 6.3; unification is on by default in Swift 6.4.&lt;/li&gt;
&lt;li&gt;Both now use the Swift build package, leading to a single point of maintenance for bug fixes and improvements.&lt;/li&gt;
&lt;li&gt;This unification brings performance optimizations from the Swift build system to normal package builds.&lt;/li&gt;
&lt;li&gt;Explicit modules are now available for package builds.&lt;/li&gt;
&lt;li&gt;The build system can better parallelize module builds, improving overall build performance.&lt;/li&gt;
&lt;li&gt;These improvements are under-the-hood and do not require opt-in.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;whats-the-one-swift-feature-most-developers-dont-know-exists-but-should-know&quot;&gt;What’s the one Swift feature most developers don’t know exists but should know?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;inlineable&lt;/code&gt; attribute combined with &lt;code&gt;inline never&lt;/code&gt;:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;inlineable&lt;/code&gt; unlocks optimization opportunities beyond just inlining, such as generic specialization and effects propagation, especially across module boundaries.&lt;/li&gt;
&lt;li&gt;Combining &lt;code&gt;inlineable&lt;/code&gt; with &lt;code&gt;inline never&lt;/code&gt; is a powerful performance tool for generic code with cold paths, preventing the compiler from inlining potentially large, infrequently used code while allowing the fast path to be inlined.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Type annotations with &lt;code&gt;as&lt;/code&gt;:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Using &lt;code&gt;as&lt;/code&gt; with a specific type can help resolve ambiguity errors from the compiler, influence overload resolution, infer type parameters, or provide more precise error messages.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Swift as an open-source project:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Development happens in the open on forums.swift.org. Participation is valuable for all developers, not just those on non-Apple platforms. Feedback on APIs, diagnostics, and proposals is welcome.&lt;/li&gt;
&lt;li&gt;Confusing compiler diagnostics can be improved by describing what was unclear on the forums — no compiler expertise required.&lt;/li&gt;
&lt;li&gt;SwiftSyntax is a good entry point for contributing to the open-source project.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;~Sendable&lt;/code&gt; (tilde Sendable):&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;This feature allows more accurate annotation of types that are not &lt;code&gt;Sendable&lt;/code&gt;, distinguishing between types that are definitively not &lt;code&gt;Sendable&lt;/code&gt; and those where subclasses might be &lt;code&gt;Sendable&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integer overflow APIs:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Swift provides APIs to carry overflow, allowing computations to complete and then checking for overflow at the end. This is useful for integers that might grow large.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key Paths:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Key paths allow referring to properties in the abstract without an instance, useful for abstracting over properties and building elegant API constructions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Swiftly:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;A tool for easily installing newer toolchains and trying out experimental Swift features, usable directly from Xcode.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;whats-left-in-language-evolution-to-get-tuples-to-finally-conform-to-equatable-hashable-comparable-etc-conditionally&quot;&gt;What’s left in language evolution to get tuples to finally conform to &lt;code&gt;Equatable&lt;/code&gt;, &lt;code&gt;Hashable&lt;/code&gt;, &lt;code&gt;Comparable&lt;/code&gt; etc. conditionally?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;This requires an evolution of parameter packs.&lt;/li&gt;
&lt;li&gt;The necessary components are:
&lt;ul&gt;
&lt;li&gt;The ability to write an extension over a tuple type where element types are represented by a parameter pack.&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;where&lt;/code&gt; clause condition on each element in the parameter pack (e.g., &lt;code&gt;where each T conforms to Protocol&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Syntax for writing a parameterized extension where the extension itself has a parameter pack.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;An experimental implementation exists in the compiler repository.&lt;/li&gt;
&lt;li&gt;This evolution aims to provide general conditional conformance for tuples to protocols, not just the three mentioned.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-should-high-frequency-sensor-data-reach-an-observable-model-on-the-main-actor-without-blocking-the-ui&quot;&gt;How should high-frequency sensor data reach an &lt;code&gt;@Observable&lt;/code&gt; model on the main actor without blocking the UI?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The definition of “high frequency” is crucial; if it’s significantly lower than UI update rates, less work may be needed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Avoid excessive context switching:&lt;/strong&gt; Minimize switches between the background actor and the main actor’s observable data model.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Debouncing:&lt;/strong&gt; Accumulate data and coalesce multiple updates into fewer events before sending them.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Loss:&lt;/strong&gt; Consider acceptable data loss. Not every nanosecond update may need to be rendered.&lt;/li&gt;
&lt;li&gt;SwiftUI and &lt;code&gt;@Observable&lt;/code&gt; naturally coalesce updates for efficiency.&lt;/li&gt;
&lt;li&gt;Ensure UI updates are only for what the user needs to see, potentially splitting the problem into halves if necessary.&lt;/li&gt;
&lt;li&gt;Swift Async Algorithms offers a &lt;code&gt;debounce&lt;/code&gt; implementation for async sequences.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;why-is-a-tuple-more-expensive-than-a-struct-when-returned-from-a-method-or-is-it-a-custom-case-and-theres-actually-no-difference&quot;&gt;Why is a tuple more expensive than a struct when returned from a method? Or is it a custom case and there’s actually no difference?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Tuples and structs are handled differently by the compiler.&lt;/li&gt;
&lt;li&gt;Structs are generally passed as a single entity.&lt;/li&gt;
&lt;li&gt;Tuples are often “exploded” inside the compiler, meaning each element is treated as a separate parameter.&lt;/li&gt;
&lt;li&gt;For very large tuples, this “exploding” might be less performant than passing a single, large struct.&lt;/li&gt;
&lt;li&gt;Further investigation via actual code and optimizer output is needed for a definitive answer. A GitHub issue with a sample project is requested.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-notable-lesser-known-swift-quality-of-life-features&quot;&gt;What are notable lesser-known Swift quality-of-life features?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Iterable Protocols (forward-looking):&lt;/strong&gt; Aims to make complex topics like non-copyable/non-escapable types feel natural, enabling operations like &lt;code&gt;for-in&lt;/code&gt; over spans.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bidirectional Type Inference and Generics Diagnostics:&lt;/strong&gt; The ability to write less explicit type information and receive error messages at the implementation site of generic code, rather than the use site.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Avoiding Mutable Shared State:&lt;/strong&gt; Features like copy-on-write and the ownership model provide confidence that code is purely a function of its inputs and outputs, simplifying complex code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Generic System and Protocol Extensions:&lt;/strong&gt; Extending protocols to add operations creates reusable generic algorithms that are natural and simple to use, leading to better code patterns.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integer Overflow APIs:&lt;/strong&gt; APIs that allow carrying overflow, enabling computations to complete and then checking for errors, useful for integers that might grow large.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key Paths:&lt;/strong&gt; Abstracting over properties without an instance, enabling elegant API constructions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Swiftly:&lt;/strong&gt; A tool for easily installing and trying newer toolchains and experimental features.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>Miká Kruschel</author></item><item><title>SwiftUI for Beginners</title><link>https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8002</link><guid isPermaLink="true">https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8002</guid><description>SwiftUI is tightly integrated with Apple&apos;s platforms, providing immediate access to new design languages and platform features.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;swiftui-for-beginners&quot;&gt;SwiftUI for Beginners&lt;/h1&gt;
&lt;p&gt;Unofficial AI summary of the WWDC26 group lab. May contain mistakes.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/videos/play/wwdc2026/8002&quot;&gt;Watch on Apple Developer&lt;/a&gt; · &lt;a href=&quot;https://kruschel.dev/wwdc26-group-labs-transcripts/wwdc2026-8002.txt&quot;&gt;Raw transcript&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Related Labs: &lt;a href=&quot;https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8006&quot;&gt;SwiftUI (June 10)&lt;/a&gt;, &lt;a href=&quot;https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8120&quot;&gt;SwiftUI (June 11)&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;should-i-use-react-native-or-swiftui&quot;&gt;Should I use React Native or SwiftUI?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;SwiftUI is tightly integrated with Apple’s platforms, providing immediate access to new design languages and platform features.&lt;/li&gt;
&lt;li&gt;Cross-platform frameworks like React Native may lag behind native platform updates, leading to an “awkward middle spot” and more work to adapt.&lt;/li&gt;
&lt;li&gt;SwiftUI leverages the power and expressiveness of the Swift programming language, offering performance benefits.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-best-approach-to-learn-swiftui-with-no-coding-background&quot;&gt;What is the best approach to learn SwiftUI with no coding background?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Identify a personal problem or a need for a family member that an app could solve, which will provide motivation.&lt;/li&gt;
&lt;li&gt;Utilize agentic coding tools in Xcode to build and see the app come to life quickly.&lt;/li&gt;
&lt;li&gt;Focus on finding the “spark” or what motivates development to build, and let that guide the learning process.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-roadmap-leads-to-job-ready-ios-engineering-skills-in-2026&quot;&gt;What roadmap leads to job-ready iOS engineering skills in 2026?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Start with a strong understanding of Swift fundamentals, including its type system and concurrency features.&lt;/li&gt;
&lt;li&gt;Dive into SwiftUI by building a basic app that is interesting, utilizing online interactive tutorials.&lt;/li&gt;
&lt;li&gt;Treat AI coding tools as tutors: ask questions about the generated code, understand its logic, and use them for code reviews.&lt;/li&gt;
&lt;li&gt;Focus on understanding underlying computer science concepts, networking, and data storage, not just UI.&lt;/li&gt;
&lt;li&gt;Read the &lt;strong&gt;Human Interface Guidelines&lt;/strong&gt; alongside technical tutorials.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-happens-under-the-hood-with-state-and-why-not-a-plain-var&quot;&gt;What happens under the hood with &lt;code&gt;@State&lt;/code&gt;, and why not a plain &lt;code&gt;var&lt;/code&gt;?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@State&lt;/code&gt; tells SwiftUI to own and persistently store a value, allocating a dedicated piece of memory for it.&lt;/li&gt;
&lt;li&gt;SwiftUI views are value types (structs) that are recreated frequently. Standard &lt;code&gt;var&lt;/code&gt; properties would be lost on recreation.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@State&lt;/code&gt; ensures that when the value changes, SwiftUI knows to re-render the view, while standard &lt;code&gt;var&lt;/code&gt;s would not trigger updates.&lt;/li&gt;
&lt;li&gt;The Swift compiler prevents direct modification of &lt;code&gt;var&lt;/code&gt;s within a view’s &lt;code&gt;body&lt;/code&gt;, guiding developers to use &lt;code&gt;@State&lt;/code&gt; for mutable UI data.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-easy-is-it-for-web-developers-to-get-started-with-swift-and-swiftui&quot;&gt;How easy is it for web developers to get started with Swift and SwiftUI?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Swift’s syntax is C-like and shares many concepts with JavaScript, making it familiar.&lt;/li&gt;
&lt;li&gt;SwiftUI’s declarative nature and hierarchical view declaration are similar to HTML and CSS concepts.&lt;/li&gt;
&lt;li&gt;Existing coding knowledge, even from web development, provides a significant advantage.&lt;/li&gt;
&lt;li&gt;Utilize Xcode’s previews and &lt;strong&gt;Device Hub&lt;/strong&gt; for dynamic layout updates, similar to a browser’s live reload.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;where-should-a-java-developer-start-with-swiftui-given-the-abundance-of-tutorials&quot;&gt;Where should a Java developer start with SwiftUI, given the abundance of tutorials?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Begin with the official Apple SwiftUI tutorials, which cover views, state, animations, and data flow.&lt;/li&gt;
&lt;li&gt;Consider Paul Hudson’s “100 Days of SwiftUI” for bite-sized, helpful content.&lt;/li&gt;
&lt;li&gt;Explore community resources like books and articles for supplementary learning.&lt;/li&gt;
&lt;li&gt;Let the desired app idea guide the learning; search for how to implement specific features.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-should-swiftui-handle-frequent-real-time-state-updates-without-lag&quot;&gt;How should SwiftUI handle frequent real-time state updates without lag?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;@Observable&lt;/code&gt; for frequently updating data; SwiftUI ensures only changed observable properties trigger UI updates.&lt;/li&gt;
&lt;li&gt;Keep view bodies as lightweight as possible, ideally as “leaf views,” to minimize redraws.&lt;/li&gt;
&lt;li&gt;Utilize lazy stacks (&lt;code&gt;LazyVStack&lt;/code&gt;, &lt;code&gt;LazyHStack&lt;/code&gt;) and &lt;code&gt;List&lt;/code&gt; for content that only needs to be rendered when visible.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ForEach&lt;/code&gt; inside lazy containers (&lt;code&gt;List&lt;/code&gt;, &lt;code&gt;LazyVStack&lt;/code&gt;) is optimized by default — profile before adding custom optimizations.&lt;/li&gt;
&lt;li&gt;Trust SwiftUI’s built-in laziness; optimize only when profiling shows a need.&lt;/li&gt;
&lt;li&gt;Limit dependencies on rapidly changing data within the UI and avoid putting constantly updating values (like current time) in the environment.&lt;/li&gt;
&lt;li&gt;Consider if the UI truly needs per-frame updates or if a semantic state change is sufficient.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;TimelineView&lt;/code&gt; when developers need time-driven updates rather than pushing constantly changing values through state.&lt;/li&gt;
&lt;li&gt;Coarsen semantic state when possible (e.g., three discrete states instead of per-frame values).&lt;/li&gt;
&lt;li&gt;Keep async work out of view bodies; use the SwiftUI instrument in Instruments to profile update patterns.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;has-apples-intelligence-within-xcode-been-fed-with-all-the-information-and-documentation-around-swiftui&quot;&gt;Has Apple’s intelligence within Xcode been fed with all the information and documentation around SwiftUI?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Xcode’s agentic coding now includes “SwiftUI skills” trained on internal knowledge and best practices for data flow and new APIs.&lt;/li&gt;
&lt;li&gt;These skills are automatically invoked by the coding agent in Xcode.&lt;/li&gt;
&lt;li&gt;Skills can be exported for use with third-party AI models.&lt;/li&gt;
&lt;li&gt;File feedback when developers encounter issues with the skills to help improve them.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-best-practices-to-make-swiftui-views-performant-and-avoid-unnecessary-view-updates&quot;&gt;What are the best practices to make SwiftUI views performant and avoid unnecessary view updates?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;@Observable&lt;/code&gt; to establish dependencies only on properties read by a view, ensuring only relevant parts update.&lt;/li&gt;
&lt;li&gt;Break down large views into smaller, reusable custom views to allow SwiftUI to re-evaluate only necessary components.&lt;/li&gt;
&lt;li&gt;Moving code from &lt;code&gt;body&lt;/code&gt; into computed properties does &lt;strong&gt;not&lt;/strong&gt; improve performance — only extracting custom &lt;code&gt;struct&lt;/code&gt; views enables separate invalidation boundaries.&lt;/li&gt;
&lt;li&gt;Minimize the properties read from the environment within &lt;code&gt;ViewBody&lt;/code&gt; to prevent unnecessary invalidations.&lt;/li&gt;
&lt;li&gt;Extract repetitive modifiers or view snippets into custom modifiers or custom views for better maintainability and reusability.&lt;/li&gt;
&lt;li&gt;Avoid heavy work or frequent allocations (like creating &lt;code&gt;NumberFormatter&lt;/code&gt; or array transformations) directly within view bodies.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-using-ai-to-write-swiftui-code-effective-for-beginners&quot;&gt;Is using AI to write SwiftUI code effective for beginners?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Treat AI tools as tutors: ask questions about generated code, explore alternative approaches, and understand the “why” behind the suggestions.&lt;/li&gt;
&lt;li&gt;Interrogate the AI’s output; if a step is unclear, ask for clarification until understood.&lt;/li&gt;
&lt;li&gt;Use AI for code reviews by providing custom code and asking for feedback on improvements or alternative APIs.&lt;/li&gt;
&lt;li&gt;Focus on gaining a deeper understanding of the code and concepts rather than just generating more code faster.&lt;/li&gt;
&lt;li&gt;Weigh trade-offs between different solutions and avoid letting the AI make all the architectural decisions for developers.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-there-a-high-level-resource-like-a-one-page-overview-or-flow-diagram-to-build-a-clear-mental-model-of-swiftui&quot;&gt;Is there a high-level resource, like a one-page overview or flow diagram, to build a clear mental model of SwiftUI?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Explore talks from early SwiftUI releases, such as “Intro to SwiftUI” and “SwiftUI Essentials.”&lt;/li&gt;
&lt;li&gt;Refer to the official one-pager on getting started with SwiftUI on the developer website.&lt;/li&gt;
&lt;li&gt;SwiftUI sessions from WWDC are highly recommended for quickly learning concepts.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-beginners-use-xcode-ai-tools-to-learn-correct-swiftui-patterns&quot;&gt;How can beginners use Xcode AI tools to learn correct SwiftUI patterns?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Utilize Xcode’s “skills” which are trained on best practices and newer APIs to avoid incorrect patterns.&lt;/li&gt;
&lt;li&gt;Allow the AI model to check its work by compiling; Swift’s compile-time error checking helps identify issues early.&lt;/li&gt;
&lt;li&gt;Break down requests into smaller, piecemeal steps rather than asking the AI to implement everything at once.&lt;/li&gt;
&lt;li&gt;Focus on encapsulated, well-structured code generated by the AI.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;whats-one-thing-announced-yesterday-that-beginners-will-overlook-but-will-matter-very-much-as-they-grow-in-swiftui&quot;&gt;What’s one thing announced yesterday that beginners will overlook but will matter very much as they grow in SwiftUI?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Layout flexibility improvements, especially for resizable apps across different Apple platforms (iPad, macOS, Vision Pro, and mirrored iPhones).&lt;/li&gt;
&lt;li&gt;Leverage SwiftUI constructs for flexible layouts and consider creating custom layouts for complex scenarios.&lt;/li&gt;
&lt;li&gt;Use DeviceHub to test apps across various aspect ratios and screen sizes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-should-designer-mockups-be-converted-to-swiftui&quot;&gt;How should designer mockups be converted to SwiftUI?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Translate designs by considering SwiftUI’s layout primitives and custom understanding of how to map design elements to code.&lt;/li&gt;
&lt;li&gt;Explore Figma and Sketch connections that can generate SwiftUI code directly from designs.&lt;/li&gt;
&lt;li&gt;Avoid relying solely on AI for direct design-to-code conversion; manual translation and understanding are key.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>Miká Kruschel</author></item><item><title>visionOS</title><link>https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8004</link><guid isPermaLink="true">https://kruschel.dev/notes/wwdc26-group-labs/wwdc2026-8004</guid><description>Access to stereoscopic camera pairs is available through standard Apple Developer Program accounts, typically for incorporated businesses.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;visionos&quot;&gt;visionOS&lt;/h1&gt;
&lt;p&gt;Unofficial AI summary of the WWDC26 group lab. May contain mistakes.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/videos/play/wwdc2026/8004&quot;&gt;Watch on Apple Developer&lt;/a&gt; · &lt;a href=&quot;https://kruschel.dev/wwdc26-group-labs-transcripts/wwdc2026-8004.txt&quot;&gt;Raw transcript&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;how-can-independent-developers-gain-access-to-the-front-facing-cameras-for-app-development&quot;&gt;How can independent developers gain access to the front-facing cameras for app development?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Access to stereoscopic camera pairs is available through standard Apple Developer Program accounts, typically for incorporated businesses.&lt;/li&gt;
&lt;li&gt;Developers with a clear use case and need for camera access can apply for it.&lt;/li&gt;
&lt;li&gt;When developers encounter issues accessing cameras and have a valid use case, post on the developer forums.&lt;/li&gt;
&lt;li&gt;Share the use cases for front-facing camera access on Feedback Assistant to help Apple understand developer needs.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-developers-debug-applications-in-immersive-spaces-without-losing-context-or-relying-solely-on-pass-through&quot;&gt;How can developers debug applications in immersive spaces without losing context or relying solely on pass-through?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Enable the “Mac virtual display” developer setting within an immersive environment.&lt;/li&gt;
&lt;li&gt;This allows developers to run and debug the app in Xcode while remaining within the immersive space, providing a safer and more efficient workflow.&lt;/li&gt;
&lt;li&gt;The Mac Virtual Display offers a large, high-quality display for debugging and triaging issues.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;are-there-any-agent-skills-from-wwdc-that-are-particularly-relevant-for-visionos-development&quot;&gt;Are there any agent skills from WWDC that are particularly relevant for visionOS development?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The most relevant agent skill helps resize existing iOS apps for visionOS.&lt;/li&gt;
&lt;li&gt;This skill assists in translating iOS UI elements to the visionOS form factor, maintaining best practices for the platform.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-recommended-workflow-for-exporting-3d-models-to-usd-especially-when-dealing-with-fbx-or-glb-files&quot;&gt;What is the recommended workflow for exporting 3D models to USD, especially when dealing with FBX or GLB files?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Start with USD export directly from the 3D content creation tool (3DCC) to avoid format conversion issues.&lt;/li&gt;
&lt;li&gt;Be aware that different 3DCCs may have variations in how they build files, which can sometimes complicate USD export.&lt;/li&gt;
&lt;li&gt;For iterative workflows, consider using the USDA (ASCII) format over USDC (binary) to modify individual files without repackaging the entire scene.&lt;/li&gt;
&lt;li&gt;Modern LLMs can potentially assist with USD file understanding and manipulation, leveraging the core USD specification.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;can-spatial-accessories-be-tracked-when-they-are-outside-of-the-users-direct-line-of-sight&quot;&gt;Can spatial accessories be tracked when they are outside of the user’s direct line of sight?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;visionOS 27 has expanded support for spatial accessories, opening the spec to new accessory types.&lt;/li&gt;
&lt;li&gt;Accessories use a combination of Bluetooth, onboard IMUs for high-frequency tracking, and infrared emitters visible to Vision Pro’s cameras.&lt;/li&gt;
&lt;li&gt;Tracking fidelity for occluded or distant accessories depends on the accessory’s size, distance, and the Vision Pro’s ability to see the infrared emitters.&lt;/li&gt;
&lt;li&gt;A new debugging mode allows developers to see the infrared feed from Vision Pro to assess accessory visibility.&lt;/li&gt;
&lt;li&gt;Developers are encouraged to share use cases, such as foot trackers, via Feedback Assistant.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;when-using-gaussian-splatting-why-are-splats-culled-when-the-users-face-moves-close-to-or-inside-them-and-can-this-be-disabled&quot;&gt;When using Gaussian splatting, why are splats culled when the user’s face moves close to or inside them, and can this be disabled?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;There is currently no known way to disable the vignetting or culling effect for Gaussian splats when they get too close to the user’s face.&lt;/li&gt;
&lt;li&gt;This effect is also present for other 3D models to ensure an unobstructed user field of view.&lt;/li&gt;
&lt;li&gt;Developers are encouraged to file feedback with detailed use cases, especially for telepresence applications, to inform future development.&lt;/li&gt;
&lt;li&gt;Providing sample projects, videos, or screenshots with specific distances can help engineers reproduce and address issues.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-gaussian-splat-rendering-supported-on-platforms-other-than-visionos-such-as-ios&quot;&gt;Is Gaussian splat rendering supported on platforms other than visionOS, such as iOS?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Gaussian splatting should be supported across both iOS and visionOS.&lt;/li&gt;
&lt;li&gt;When developers encounter issues or documentation mismatches in Xcode, file feedback.&lt;/li&gt;
&lt;li&gt;Beta versions of features may not always work as expected, so reporting issues is important.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;why-arent-there-user-profiles-on-vision-pro-similar-to-macos-to-allow-for-easy-switching-between-different-users-eg-owner-child-guest&quot;&gt;Why aren’t there user profiles on Vision Pro, similar to macOS, to allow for easy switching between different users (e.g., owner, child, guest)?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Vision Pro is designed as a personal device, prioritizing the best experience for the primary user.&lt;/li&gt;
&lt;li&gt;To facilitate sharing, enrollment data can be saved to an &lt;strong&gt;iOS 26+&lt;/strong&gt; device, allowing quick switching via an App Clip code when in guest user mode.&lt;/li&gt;
&lt;li&gt;Guest user mode with nearby device pairing allows others to access the Vision Pro without needing the owner’s passcode, with screen mirroring via AirPlay for assistance.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;is-there-an-api-to-detect-the-owners-lips-and-face-to-mimic-them-on-3d-models-like-persona-but-with-different-effects&quot;&gt;Is there an API to detect the owner’s lips and face to mimic them on 3D models like Persona, but with different effects?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Face tracking provided by ARKit is an iOS-only feature and is not available on visionOS.&lt;/li&gt;
&lt;li&gt;While raw face data is not exposed, third-party apps can access a simulated video feed from the front-facing camera equivalent.&lt;/li&gt;
&lt;li&gt;This simulated feed provides a matted version of the persona (persona in front of a background), suitable for video conferencing but not for applying lens-style effects to the face.&lt;/li&gt;
&lt;li&gt;Developers are encouraged to file feedback for use cases involving custom face manipulation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;does-visual-intelligence-require-third-party-apps-to-access-the-main-camera&quot;&gt;Does Visual Intelligence require third-party apps to access the main camera?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Visual Intelligence is a system-level capability and does not require third-party apps to access the main camera.&lt;/li&gt;
&lt;li&gt;Information is not shared with third parties, ensuring a privacy-preserving experience.&lt;/li&gt;
&lt;li&gt;The system can provide immediate answers about viewed content, including real-world objects.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-do-game-controllers-fit-into-the-visionos-interaction-model-in-version-27&quot;&gt;How do game controllers fit into the visionOS interaction model in version 27?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Apple initially supported PlayStation VR2 Sense controllers and the Logitech Muse stylus via the Game Controller framework and ARKit.&lt;/li&gt;
&lt;li&gt;These inputs are deeply integrated at the system level, usable for launching apps and controlling window behavior.&lt;/li&gt;
&lt;li&gt;visionOS 27 introduced expanded spatial accessory capabilities, allowing developers to build custom accessories with high frame rate and accurate pose tracking.&lt;/li&gt;
&lt;li&gt;The primary interaction model remains gaze and pinch, with controllers and spatial accessories offering extended capabilities for specific experiences.&lt;/li&gt;
&lt;li&gt;The type of input should be thoughtfully chosen based on the intended user experience, whether for refined input, gaming, productivity, or natural interaction.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;are-there-any-updates-to-webxr-in-safari-with-visionos-27-particularly-for-immersive-ar-mode&quot;&gt;Are there any updates to WebXR in Safari with visionOS 27, particularly for immersive AR mode?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Safari on visionOS supports WebXR, but currently only in an immersive-only rendering mode (VR).&lt;/li&gt;
&lt;li&gt;Immersive AR mode for WebXR is not yet supported.&lt;/li&gt;
&lt;li&gt;Developers are encouraged to investigate visionOS’s platform APIs for augmented reality experiences, which may offer capabilities beyond current WebXR limitations.&lt;/li&gt;
&lt;li&gt;New features like the &lt;code&gt;&amp;#x3C;model&gt;&lt;/code&gt; tag allow for positioning USD assets within a webpage and then pulling them out into the user’s environment.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;for-visual-intelligence-on-visionos-is-it-purely-camera-based-or-does-it-leverage-depth-sensors&quot;&gt;For Visual Intelligence on visionOS, is it purely camera-based, or does it leverage depth sensors?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The system uses a blend of all available sensors on the device to provide the best possible and most accurate results.&lt;/li&gt;
&lt;li&gt;This approach is not unique to Visual Intelligence and applies to other system-level functionalities like SLAM and hand tracking.&lt;/li&gt;
&lt;li&gt;The specific sensor implementation varies by device to optimize for its capabilities.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-vision-pro-stay-awake-on-a-desk-during-development&quot;&gt;How can Vision Pro stay awake on a desk during development?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;There is no sanctioned way to keep the device awake on a desk during development due to security reasons.&lt;/li&gt;
&lt;li&gt;Vision Pro lacks a lock button, and the device automatically locks when removed from the head to ensure authentication (Optic ID or passcode) upon re-wearing.&lt;/li&gt;
&lt;li&gt;Mac Virtual Display (MVD) is the recommended workflow for development, allowing developers to keep the device active and connected while debugging.&lt;/li&gt;
&lt;li&gt;Setting up Optic ID can significantly speed up re-authentication when removing and re-wearing the headset.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-the-state-of-automated-testing-for-visionos-arkit-and-realitykit&quot;&gt;What is the state of automated testing for visionOS, ARKit, and RealityKit?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;For RealityKit, use the &lt;code&gt;RealityRenderer&lt;/code&gt; class for driving rendering through automated tests.&lt;/li&gt;
&lt;li&gt;Explore the “Migrate to Swift testing” and “Get the Most Out of Device Hub” sessions for automated testing strategies.&lt;/li&gt;
&lt;li&gt;Device Hub offers significant capabilities for automated testing.&lt;/li&gt;
&lt;li&gt;RealityKit is written in Swift, so existing Swift automated testing infrastructure and Xcode tooling should work.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-biggest-mistakes-new-visionos-developers-make&quot;&gt;What are the biggest mistakes new visionOS developers make?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Information Density:&lt;/strong&gt; Avoid overwhelming users with too much text or information in large windows, as it differs from 2D platforms.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tap Target Size:&lt;/strong&gt; Adjust the size of tap targets and UI elements for eye and hand interaction, which is different from touch-based interfaces.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Leveraging visionOS Capabilities:&lt;/strong&gt; Don’t just port 2D apps; create new features and experiences that are uniquely possible in visionOS, such as 3D product models that can be placed in the user’s environment.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content Quality:&lt;/strong&gt; Pay close attention to encoding settings and visual quality for compressed content (video, images) as Vision Pro’s high-fidelity display can reveal artifacts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Thinking Beyond Existing Paradigms:&lt;/strong&gt; Embrace spatial computing’s unique capabilities rather than solely relying on past technological approaches.&lt;/li&gt;
&lt;li&gt;Review the &lt;strong&gt;Build Next Generation Experiences for visionOS 27&lt;/strong&gt; session for Unity, Unreal, and streaming pathways.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;regarding-agentic-coding-in-visionos-if-an-llm-generates-visionos-project-code-with-incorrect-syntax-is-there-a-way-to-fix-this-or-teach-the-ai-about-visionos-code&quot;&gt;Regarding agentic coding in visionOS, if an LLM generates visionOS project code with incorrect syntax, is there a way to fix this or teach the AI about visionOS code?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;LLM-generated code may contain errors; always double-check the output (“trust but verify”).&lt;/li&gt;
&lt;li&gt;Use the robust library of visionOS sample projects as training data for local LLMs.&lt;/li&gt;
&lt;li&gt;Newer LLM models may not be trained on the latest API SDK capabilities, leading to potential discrepancies.&lt;/li&gt;
&lt;li&gt;Utilize specific visionOS sample projects like “Hello World,” “Petite Asteroids,” “Canyon Crosser,” and the “Model Manipulator” sample for targeted learning.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;for-object-tracking-in-visionos-how-fast-can-it-get-and-what-are-the-possible-frame-rates-and-latency&quot;&gt;For object tracking in visionOS, how fast can it get, and what are the possible frame rates and latency?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;visionOS 2.0 primarily focused on tracking stationary objects at approximately 5 frames per second (Hz).&lt;/li&gt;
&lt;li&gt;visionOS 27 introduces a high frame rate mode, supporting up to 30 frames per second with significantly lower latency.&lt;/li&gt;
&lt;li&gt;Engineers have implemented smoothing algorithms that make tracked objects feel more attached and responsive.&lt;/li&gt;
&lt;li&gt;The same trained object tracking models can now work on iOS devices, with an extended training mode in CreateML for higher accuracy and lower latency.&lt;/li&gt;
&lt;li&gt;Object tracking updates are now frame display time-aligned, eliminating guesswork about frame timing.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;will-apple-expose-more-underlying-sensors-and-frameworks-for-accessibility-telepresence&quot;&gt;Will Apple expose more underlying sensors and frameworks for accessibility telepresence?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Apple does not comment on future plans.&lt;/li&gt;
&lt;li&gt;Developers are encouraged to file feedback with specific use cases, especially for accessibility.&lt;/li&gt;
&lt;li&gt;Accessibility is a core principle, and Vision Pro has significant potential for enabling accessibility features through developer or internal initiatives.&lt;/li&gt;
&lt;li&gt;Features like the magnifying glass and wheelchair control powered by Vision Pro highlight the platform’s accessibility potential.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-can-mac-virtual-display-work-on-shared-or-enterprise-macs-without-a-shared-icloud-account&quot;&gt;How can Mac Virtual Display work on shared or enterprise Macs without a shared iCloud account?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Mac Virtual Display currently requires both the Mac and Vision Pro to be on the same iCloud account.&lt;/li&gt;
&lt;li&gt;Alternative methods like reverse AirPlay or screen mirroring from Mac to Vision Pro exist but do not offer the same experience as Mac Virtual Display.&lt;/li&gt;
&lt;li&gt;Spatial Preview functionality is not iCloud dependent and can be used to share USDZ compliant content to other devices.&lt;/li&gt;
&lt;li&gt;Remote Immersive Space allows rendering on a Mac and streaming stereoscopically to Vision Pro without requiring the same iCloud account.&lt;/li&gt;
&lt;li&gt;Foveated streaming also enables bringing PC-rendered content to visionOS, with the visionOS app retaining native capabilities like SharePlay.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;can-gaussian-splats-be-part-of-a-usdz-file-perhaps-mixed-with-other-meshes-and-used-in-a-website-environment&quot;&gt;Can Gaussian splats be part of a USDZ file, perhaps mixed with other meshes, and used in a website environment?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;OpenUSD supports “particle fields,” a generic form of Gaussian splats, but this feature is not yet directly integrated with Reality Kit’s splat capabilities.&lt;/li&gt;
&lt;li&gt;Apple is working on closing this gap in future releases.&lt;/li&gt;
&lt;li&gt;USD can express multiple elements in a scene, allowing for the containment of different types of data, including splats and meshes, within the same scene.&lt;/li&gt;
&lt;li&gt;The development process involves aligning specifications, runtime capabilities, and authoring tools for a complete Gaussian splat ecosystem.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>Miká Kruschel</author></item><item><title>Setting Up a Coolify Build Server with Hetzner and a Self-Hosted Registry</title><link>https://kruschel.dev/notes/coolify-build-server</link><guid isPermaLink="true">https://kruschel.dev/notes/coolify-build-server</guid><description>Using a dedicated build server offloads resource-intensive image building from your main application server. Here’s how to set one up with a Hetzner server and a self-hosted Docker registry managed by Coolify.</description><pubDate>Sun, 22 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;setting-up-a-coolify-build-server-with-hetzner-and-a-self-hosted-registry&quot;&gt;Setting Up a Coolify Build Server with Hetzner and a Self-Hosted Registry&lt;/h1&gt;
&lt;p&gt;Using a dedicated build server offloads resource-intensive image building from your main application server. Here’s how to set one up with a Hetzner server and a self-hosted Docker registry managed by Coolify.&lt;/p&gt;
&lt;h3 id=&quot;1-prepare-your-build-server-on-hetzner&quot;&gt;1. Prepare Your Build Server on Hetzner&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Create a new server in Hetzner Cloud (Ubuntu recommended).&lt;/li&gt;
&lt;li&gt;Configure a Hetzner Cloud Firewall:
&lt;ul&gt;
&lt;li&gt;Allow incoming &lt;strong&gt;Port 22 (TCP)&lt;/strong&gt; for SSH access.&lt;/li&gt;
&lt;li&gt;Block other incoming ports.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Note the server’s IP address and SSH credentials.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;2-connect-build-server-in-coolify&quot;&gt;2. Connect Build Server in Coolify&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;In Coolify, go to &lt;strong&gt;Keys &amp;#x26; Tokens&lt;/strong&gt; and add the SSH Key for the build server.&lt;/li&gt;
&lt;li&gt;Then go to &lt;strong&gt;Servers&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Add Server&lt;/strong&gt;, toggle &lt;strong&gt;Use as Build Server&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enter the Hetzner server’s IP address, SSH user, and choose the key you have just added.&lt;/li&gt;
&lt;li&gt;Coolify will connect and set it up.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;3-why-you-need-a-docker-registry&quot;&gt;3. Why You Need a Docker Registry&lt;/h3&gt;
&lt;p&gt;When using a build server, the created Docker image needs to be transferred to your main hosting server. This transfer happens via a Docker Registry.&lt;/p&gt;
&lt;p&gt;You can use a hosted service (like GitHub Packages) or self-host one. We’ll self-host using Coolify.&lt;/p&gt;
&lt;h3 id=&quot;4-self-host-your-docker-registry-via-coolify&quot;&gt;4. Self-Host Your Docker Registry (via Coolify)&lt;/h3&gt;
&lt;p&gt;Run the registry service on your main Coolify hosting server.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In Coolify, create a new Project (e.g., &lt;code&gt;Infrastructure&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Add a Service within that project, select &lt;strong&gt;Docker Registry&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Under Service, click on the edit button next to the domain and set it to, e.g., &lt;code&gt;https://docker-registry.yourdomain.com:5000&lt;/code&gt;. Start the service.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Set up Authentication:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Go to the &lt;strong&gt;Persistent Storages&lt;/strong&gt; tab for the registry service. Note the &lt;code&gt;Source Path&lt;/code&gt; for the &lt;code&gt;/auth/registry.password&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Generate a user/password entry using &lt;code&gt;htpasswd -nbB YOUR_USERNAME YOUR_PASSWORD&lt;/code&gt;. This can be run on your local machine. Copy the output string.&lt;/li&gt;
&lt;li&gt;SSH into your &lt;strong&gt;Coolify hosting server&lt;/strong&gt;. Edit the &lt;code&gt;auth/registry.password&lt;/code&gt; file. Replace the content with the string from &lt;code&gt;htpasswd&lt;/code&gt;. Save the file.&lt;/li&gt;
&lt;li&gt;In Persistent Storages, click on the Load from Server button and save.&lt;/li&gt;
&lt;li&gt;Deploy the Docker Registry service.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Log in on both servers:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;SSH into your &lt;strong&gt;Hetzner build server&lt;/strong&gt;. Run &lt;code&gt;docker login docker-registry.yourdomain.com -u YOUR_USERNAME -p YOUR_PASSWORD&lt;/code&gt;. (Run &lt;code&gt;docker logout&lt;/code&gt;  first if needed).&lt;/li&gt;
&lt;li&gt;SSH into your &lt;strong&gt;Coolify hosting server&lt;/strong&gt;. Run the same login command.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;5-configure-your-project-for-build-server--registry&quot;&gt;5. Configure Your Project for Build Server &amp;#x26; Registry&lt;/h3&gt;
&lt;p&gt;Tell your application project where to build and where to push/pull the image.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Go to your &lt;strong&gt;Project&lt;/strong&gt; in Coolify.&lt;/li&gt;
&lt;li&gt;Find &lt;strong&gt;“Use a Build Server”&lt;/strong&gt; and toggle it ON.&lt;/li&gt;
&lt;li&gt;Find the &lt;strong&gt;Docker Image&lt;/strong&gt; field in the Docker Registry section. You &lt;strong&gt;must&lt;/strong&gt; prefix the image name with your registry address and add slash.
&lt;ul&gt;
&lt;li&gt;Change the value to &lt;code&gt;docker-registry.yourdomain.com:5000/milk&lt;/code&gt; (replace &lt;code&gt;milk&lt;/code&gt; with your image name).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Important:&lt;/strong&gt; Without the &lt;code&gt;/&lt;/code&gt; after the port/hostname (&lt;code&gt;docker-registry.yourdomain.com:5000&lt;/code&gt;), Docker automatically prefixes the url with &lt;code&gt;docker.io/library/&lt;/code&gt; leading to the error: &lt;code&gt;The push refers to repository [docker.io/library/docker-registry.yourdomain.com]&lt;/code&gt; and &lt;code&gt;denied: requested access to the resource is denied&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Save settings and re-deploy. Coolify will now use the build server to build the image, push it to your self-hosted registry, and then the hosting server will pull it from there.&lt;/p&gt;</content:encoded><author>Miká Kruschel</author></item><item><title>Indie App Catalog has a new maintainer</title><link>https://kruschel.dev/notes/indie-app-catalog</link><guid isPermaLink="true">https://kruschel.dev/notes/indie-app-catalog</guid><description>Hey, I&apos;m Miká! I&apos;m a math student and indie developer. Since starting with Apple development in 2020, I&apos;ve been creating developer tools like Astra (App Store ratings), Trendly (sales analytics), Plutus (financial reports), and Squircle (macOS icon tool).</description><pubDate>Sun, 24 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;indieappcatalog-has-a-new-maintainer-&quot;&gt;&lt;a href=&quot;https://indiecatalog.app&quot;&gt;IndieAppCatalog&lt;/a&gt; has a new maintainer 🎉&lt;/h1&gt;
&lt;h3 id=&quot;whoami&quot;&gt;whoami&lt;/h3&gt;
&lt;p&gt;Hey, I’m Miká! I’m a math student and indie developer. Since starting with Apple development in 2020, I’ve been creating developer tools like &lt;a href=&quot;https://astra.kruschel.dev&quot;&gt;Astra&lt;/a&gt; (App Store ratings), &lt;a href=&quot;https://gettrendly.app&quot;&gt;Trendly&lt;/a&gt; (sales analytics), &lt;a href=&quot;https://plutus.no-comment.xyz/&quot;&gt;Plutus&lt;/a&gt; (financial reports), and &lt;a href=&quot;https://squircle.kruschel.dev/&quot;&gt;Squircle&lt;/a&gt; (macOS icon tool).&lt;/p&gt;
&lt;h3 id=&quot;the-current-state&quot;&gt;The Current State&lt;/h3&gt;
&lt;p&gt;The catalog features over 1,400 apps by nearly 1,000 indie developers – a wonderful showcase of what our community creates.&lt;/p&gt;
&lt;h3 id=&quot;whats-next&quot;&gt;What’s next&lt;/h3&gt;
&lt;p&gt;I’ve hit the ground running, already enhancing how we gather app data. For instance, the catalog now supports newer device screenshots, higher resolution images, and displays app subtitles.&lt;/p&gt;
&lt;p&gt;Looking ahead, I’m planning a fresh redesign, introducing a category for TestFlight links, and much more.&lt;/p&gt;
&lt;p&gt;But I’d love to hear from you! What features would make IndieAppCatalog even better? Feel free to share your ideas via &lt;a href=&quot;https://mastodon.social/@mikakruschel&quot;&gt;Mastodon&lt;/a&gt;, &lt;a href=&quot;https://bsky.app/profile/indieappcatalog.com&quot;&gt;Bluesky&lt;/a&gt; or &lt;a href=&quot;mailto:indieappcatalog@kruschel.dev&quot;&gt;email&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;thanks&quot;&gt;Thanks&lt;/h3&gt;
&lt;p&gt;A huge thank you to &lt;a href=&quot;https://nemecek.be/&quot;&gt;Filip Němeček&lt;/a&gt; for creating and maintaining IndieAppCatalog until now. I’m honored to continue this project.&lt;/p&gt;</content:encoded><author>Miká Kruschel</author></item></channel></rss>