{"$schema": "https://raw.githubusercontent.com/guitaripod/wwdc-sessions/master/schema/transcript.schema.json", "id": "wwdc2026-258", "language": "eng", "source": "https://developer.apple.com/videos/play/wwdc2026/258", "wordCount": 4731, "segments": [{"start": 7.0, "text": "Hey, I'm Jake, a designer on the Xcode team."}, {"start": 10.0, "text": "My colleague Breckin and I are super excited to share"}, {"start": 12.0, "text": "what's new in Xcode 27."}, {"start": 15.0, "text": "We've really been into paper airplanes lately"}, {"start": 17.0, "text": "and have been working on an app to manage our grand fleet."}, {"start": 19.0, "text": "It's been a blast!"}, {"start": 21.0, "text": "Xcode 27 makes it super easy to kick off tasks with Coding Agents,"}, {"start": 25.0, "text": "quickly iterate on new project ideas,"}, {"start": 27.0, "text": "and its workspace is more customizable than ever!"}, {"start": 29.0, "text": "Let's dig into what's new."}, {"start": 31.0, "text": "We'll start with the new workspace look and feel and how it can be customized."}, {"start": 36.0, "text": "Next, we'll check out how easy it is to kick off a new project"}, {"start": 39.0, "text": "when an idea strikes."}, {"start": 42.0, "text": "Then we'll dig into the awesome new updates"}, {"start": 44.0, "text": "for working with coding agents in the editor."}, {"start": 47.0, "text": "After that, we'll take a look at how Device Hub"}, {"start": 50.0, "text": "makes it a breeze to evaluate apps on devices and simulators."}, {"start": 55.0, "text": "Then, Breckin will share how to keep an app's experience soaring after launch."}, {"start": 60.0, "text": "Let's start with the workspace."}, {"start": 62.0, "text": "The Toolbar and Themes in Xcode have been revamped"}, {"start": 65.0, "text": "to allow for more customization."}, {"start": 67.0, "text": "And when editing code, inline issues now get a subtle look,"}, {"start": 71.0, "text": "to minimize distractions while typing."}, {"start": 74.0, "text": "Here's the standard look for the new workspace in Xcode 27."}, {"start": 78.0, "text": "Let's take a look at the Toolbar."}, {"start": 80.0, "text": "Some controls that were previously in the jump bar,"}, {"start": 82.0, "text": "like history navigation and editor controls,"}, {"start": 84.0, "text": "have moved up into the Toolbar."}, {"start": 87.0, "text": "Activity information, like build progress, appears under the window title."}, {"start": 92.0, "text": "In the center, we have our new entry point for working with coding agents,"}, {"start": 95.0, "text": "more on that in a bit,"}, {"start": 96.0, "text": "and our trusty scheme and destination picker."}, {"start": 100.0, "text": "In the top right, we have controls for adding tabs and editor panes,"}, {"start": 104.0, "text": "customizing your editor's settings,"}, {"start": 106.0, "text": "and a 3-way chooser for swapping between editor modes."}, {"start": 109.0, "text": "The first option displays previews & playgrounds in the canvas."}, {"start": 114.0, "text": "The second reveals related content in the Assistant Editor."}, {"start": 118.0, "text": "And the last enters a mode to review source control changes."}, {"start": 122.0, "text": "Oh, and speaking of source control…"}, {"start": 125.0, "text": "the branch picker has moved to the bottom bar"}, {"start": 127.0, "text": "where it can more easily fit long, beautiful branch names."}, {"start": 131.0, "text": "But the best part about the new Toolbar is that it's fully customizable."}, {"start": 135.0, "text": "Now you can add or remove your favorite items"}, {"start": 137.0, "text": "and reorder them to your heart's content."}, {"start": 140.0, "text": "Customizing the workspace goes beyond just the Toolbar."}, {"start": 143.0, "text": "With Xcode 27's new themes, you can choose from beautiful presets,"}, {"start": 147.0, "text": "or simply play around with a couple sliders to tune a theme in your own way."}, {"start": 151.0, "text": "Let me show you…"}, {"start": 153.0, "text": "The new Appearance panel in Xcode's settings window"}, {"start": 155.0, "text": "has everything you need to configure a theme."}, {"start": 158.0, "text": "The standard theme has been revamped to be brighter and more colorful."}, {"start": 162.0, "text": "I can play around with the first slider here"}, {"start": 164.0, "text": "to influence the intensity of the text colors."}, {"start": 172.0, "text": "And the second slider lets me ramp up the background intensity."}, {"start": 180.0, "text": "now we can see a full window background color."}, {"start": 183.0, "text": "And if I keep bringing the intensity all the way up,"}, {"start": 185.0, "text": "my background turns into a vibrant gradient."}, {"start": 188.0, "text": "And of course, I'm not locked into these starting tints."}, {"start": 191.0, "text": "I can choose other values, like a pink tint for my background,"}, {"start": 195.0, "text": "and my theme automatically updates for this new color palette."}, {"start": 203.0, "text": "If I want to choose another theme, I can browse a list of presets."}, {"start": 209.0, "text": "To get in the mindset of soaring through the sky,"}, {"start": 212.0, "text": "I'll use a theme with a lot of blue tones like Neon Noir."}, {"start": 215.0, "text": "And I love how this one looks with a high background intensity."}, {"start": 222.0, "text": "Of course, if I want to specify individual colors,"}, {"start": 224.0, "text": "I have the full list below."}, {"start": 226.0, "text": "Every value in here is generated from that base palette I've been editing."}, {"start": 230.0, "text": "When I customize a value, like setting my keyword color to pink,"}, {"start": 233.0, "text": "the choice is locked in."}, {"start": 235.0, "text": "Edits I make to the palette will no longer influence this color."}, {"start": 239.0, "text": "And it's easy to use this reset action"}, {"start": 241.0, "text": "if I want to restore it back to being an automatic color."}, {"start": 244.0, "text": "Fonts use a similar customization system."}, {"start": 247.0, "text": "These basic fonts for code, prose, and console, act as the palette"}, {"start": 252.0, "text": "which generates how fonts are used in my other editors."}, {"start": 255.0, "text": "If I change the size, variation, or family,"}, {"start": 258.0, "text": "the rest of the fonts will automatically update in turn."}, {"start": 265.0, "text": "Something I love about these themes is how it influences the entire workspace window,"}, {"start": 268.0, "text": "including other editors."}, {"start": 270.0, "text": "If I check out my project settings,"}, {"start": 272.0, "text": "I can see a subtle tint of my theme coming through the background."}, {"start": 279.0, "text": "There's one more thing to know about themes, you're not limited to just one!"}, {"start": 282.0, "text": "If you want, you can pick a separate theme for a given workspace."}, {"start": 286.0, "text": "Your font settings are saved separately,"}, {"start": 288.0, "text": "so it's super easy to swap out themes depending on your mood or workflow."}, {"start": 293.0, "text": "Like you saw, to help get myself into the mindset of paper aerodynamics"}, {"start": 297.0, "text": "I like to use the Neon Noir theme for my paper airplane project."}, {"start": 301.0, "text": "This helps identify at a glance which project is which."}, {"start": 304.0, "text": "So, if you find yourself needing to quickly differentiate projects"}, {"start": 307.0, "text": "that are perhaps eerily similar side-by-side,"}, {"start": 310.0, "text": "try giving them unique themes."}, {"start": 312.0, "text": "Oh, and while themes for the light appearance"}, {"start": 315.0, "text": "have a subtle look to them,"}, {"start": 316.0, "text": "in the dark appearance, they can be truly vibrant and expressive."}, {"start": 320.0, "text": "Go give those background sliders a whirl."}, {"start": 324.0, "text": "Warnings and errors have also been revamped to work with the new themes."}, {"start": 328.0, "text": "Predictive or \"live\" issues have a new subtle look to them"}, {"start": 331.0, "text": "to reduce distractions while you type."}, {"start": 333.0, "text": "And to differentiate them from warnings and errors you get when you build."}, {"start": 337.0, "text": "As you make changes to your code, Xcode will automatically predict issues"}, {"start": 341.0, "text": "as if you were going to kick off a new build."}, {"start": 344.0, "text": "These predictions use a subtle background that blends in with your theme"}, {"start": 347.0, "text": "so you can keep your focus primarily on what you're typing."}, {"start": 350.0, "text": "When do you build,"}, {"start": 351.0, "text": "the subtle predictions will either turn into build warnings and errors"}, {"start": 354.0, "text": "with a full intensity color"}, {"start": 357.0, "text": "or they will be dismissed if they were resolved."}, {"start": 360.0, "text": "Ah!"}, {"start": 361.0, "text": "Speaking of editing code, Breckin just sent me a great idea for our app."}, {"start": 365.0, "text": "I want to try the idea out in a new project."}, {"start": 368.0, "text": "Xcode 27 makes it a breeze to to kick off new projects"}, {"start": 371.0, "text": "for testing out new ideas like this,"}, {"start": 373.0, "text": "or for creating the foundation of your next great app."}, {"start": 376.0, "text": "Let's check it out…"}, {"start": 379.0, "text": "I can create a project from Xcode's File menu."}, {"start": 382.0, "text": "Then I can choose from a list of starting points,"}, {"start": 385.0, "text": "depending on the kind of project I have in mind."}, {"start": 387.0, "text": "If I want to use SwiftUI, App is a great choice."}, {"start": 391.0, "text": "If I don't need UI, I can keep it simple with a macOS Command Line Tool."}, {"start": 396.0, "text": "If I want to create a library that others can use,"}, {"start": 399.0, "text": "I could choose Swift package."}, {"start": 401.0, "text": "And Playground is a great choice when I just need a simple standalone Swift file"}, {"start": 405.0, "text": "with a Playground macro."}, {"start": 407.0, "text": "In my case, I want to make an app."}, {"start": 411.0, "text": "A brand new untitled project is created, no questions asked."}, {"start": 414.0, "text": "Literally!"}, {"start": 416.0, "text": "I can take my time and play around in this project to flesh out my idea."}, {"start": 420.0, "text": "When I'm ready, I can choose to give it a name and save it,"}, {"start": 423.0, "text": "or discard the project entirely."}, {"start": 426.0, "text": "These untitled projects make it a breeze to try out something in a blank canvas."}, {"start": 431.0, "text": "Oh! I just got something else from Breckin."}, {"start": 433.0, "text": "This time, it's a Swift file."}, {"start": 435.0, "text": "Opening the Swift file gives me a new workspace window."}, {"start": 439.0, "text": "Even though this file isn't a part of a project,"}, {"start": 441.0, "text": "Xcode 27 can display playground results and UI previews in the canvas!"}, {"start": 446.0, "text": "This makes it easy to share lightweight ideas with each other,"}, {"start": 449.0, "text": "and what Breckin shared here looks like a great start"}, {"start": 452.0, "text": "for how airplane stats could appear in our app."}, {"start": 455.0, "text": "I want to add something like this to the real project."}, {"start": 457.0, "text": "Coding agents could really help here."}, {"start": 460.0, "text": "Working with coding agents in Xcode 27 has been supercharged."}, {"start": 464.0, "text": "It's easier than ever to kick off and stay on top of parallel agent tasks"}, {"start": 468.0, "text": "and conversations."}, {"start": 470.0, "text": "The transcript has moved into the editor pane,"}, {"start": 472.0, "text": "so you can compose it with other editors"}, {"start": 474.0, "text": "with tabs, splits, or whatever suits your workflow."}, {"start": 478.0, "text": "The editor also includes an easy way to see what the agent changed"}, {"start": 482.0, "text": "and any artifacts that got produced."}, {"start": 484.0, "text": "Remember that fancy button in our Toolbar?"}, {"start": 486.0, "text": "I can use it to kick off a new conversation or task for a coding agent."}, {"start": 491.0, "text": "The conversation appears as an editor, so it works with tabs, split editor panes,"}, {"start": 496.0, "text": "or however you want to organize your workspace."}, {"start": 499.0, "text": "I really liked Breckin's idea for adding stats for different kinds"}, {"start": 502.0, "text": "of paper airplane designs, so I could kick off a simple request…"}, {"start": 506.0, "text": "But I want to dig into how this feature should work with the agent"}, {"start": 509.0, "text": "before we start making changes."}, {"start": 511.0, "text": "I can use the plan command for that."}, {"start": 513.0, "text": "Using slash plan will use the plan tool."}, {"start": 517.0, "text": "I can take the time to specify all the details I want my agent to consider."}, {"start": 522.0, "text": "Then the agent will gather the necessary context for this plan"}, {"start": 525.0, "text": "without making any changes yet."}, {"start": 527.0, "text": "While it's exploring, it can kick of sub-agents to work in parallel."}, {"start": 532.0, "text": "In this case, I need to provide some input on how to tackle the problem."}, {"start": 536.0, "text": "I'll give some guidance so it can keep working towards creating the plan."}, {"start": 541.0, "text": "Once the plan is ready, I can read it over, give inline feedback,"}, {"start": 544.0, "text": "or have the agent go ahead with implementation."}, {"start": 548.0, "text": "As the agent works, any changes it makes to the codebase"}, {"start": 551.0, "text": "appear on the right-hand side."}, {"start": 553.0, "text": "Any produced files, artifacts, or screenshots will appear here as well."}, {"start": 558.0, "text": "This is a great way to see how my app is evolving"}, {"start": 560.0, "text": "as the agent interacts with the app in the simulator and in previews."}, {"start": 565.0, "text": "While I let the agent dig into implementing the plan,"}, {"start": 568.0, "text": "I'll open up the coding assistant sidebar."}, {"start": 571.0, "text": "It contains a list of my other agent conversations"}, {"start": 574.0, "text": "and tasks that may be happening in parallel."}, {"start": 577.0, "text": "The sidebar list makes it easy to check in on conversations"}, {"start": 580.0, "text": "and see if they need any input or have unread messages."}, {"start": 584.0, "text": "And there's so much more here to explore, I recommend checking out the session"}, {"start": 588.0, "text": "\"Xcode, agents, and you\""}, {"start": 590.0, "text": "to get the full look at agentic workflows in Xcode 27."}, {"start": 594.0, "text": "Now that the plan is implemented, I want to try out the app."}, {"start": 597.0, "text": "When launching an app on a simulator, it will open as a new window in Device Hub."}, {"start": 602.0, "text": "As the name implies,"}, {"start": 603.0, "text": "Device Hub has some great ways to explore and evaluate your app"}, {"start": 607.0, "text": "across simulators and physical devices, let's take a look."}, {"start": 611.0, "text": "If I choose to run my app on iPhone 17 Pro simulator,"}, {"start": 614.0, "text": "I get a new window from Device Hub."}, {"start": 616.0, "text": "You can see the window is compact and sized to fit the device."}, {"start": 621.0, "text": "I have some quick actions like going home, taking a screenshot,"}, {"start": 624.0, "text": "or rotating the device."}, {"start": 626.0, "text": "But I can also expand the window,"}, {"start": 628.0, "text": "which grants more space and access to more controls."}, {"start": 631.0, "text": "I can open the Inspector and get even more ways to evaluate my app."}, {"start": 636.0, "text": "It's important to test an app with different accessibility settings."}, {"start": 640.0, "text": "For example, I can increase contrast,"}, {"start": 643.0, "text": "choose a larger dynamic type size,"}, {"start": 646.0, "text": "and try out my app with a dark appearance."}, {"start": 652.0, "text": "The app is looking good with these settings,"}, {"start": 653.0, "text": "so let's go back to the defaults."}, {"start": 661.0, "text": "For my iPhone app,"}, {"start": 662.0, "text": "it's also important to consider how it appears in iPhone Mirroring."}, {"start": 666.0, "text": "On macOS 27, the iPhone Mirroring window can be resized,"}, {"start": 669.0, "text": "so it's also a good idea to test out my app in the new resize mode."}, {"start": 678.0, "text": "I can try out different aspect ratios"}, {"start": 682.0, "text": "and content sizes."}, {"start": 687.0, "text": "My iPhone app already has great support for resizing"}, {"start": 690.0, "text": "thanks to the standard SwiftUI views I'm already using"}, {"start": 693.0, "text": "and the effort I've already put into making my custom views and layouts"}, {"start": 696.0, "text": "support resizable windows on iPad and Mac,"}, {"start": 699.0, "text": "so this is already looking great."}, {"start": 705.0, "text": "Device Hub makes it a breeze to work with simulators,"}, {"start": 708.0, "text": "but the coolest thing is what I've shared so far"}, {"start": 710.0, "text": "works with physical devices as well!"}, {"start": 712.0, "text": "If I open the sidebar,"}, {"start": 714.0, "text": "I see a combined list of simulators and devices."}, {"start": 718.0, "text": "I have a paired iPad Pro already running my app,"}, {"start": 724.0, "text": "and I can see and control it directly in Device Hub!"}, {"start": 732.0, "text": "Now I can try my app out on many different form factors right on my Mac!"}, {"start": 737.0, "text": "Device Hub is super powerful and unlocks a lot of great workflows"}, {"start": 740.0, "text": "like working with files, data containers, evaluating app configurations, and more."}, {"start": 745.0, "text": "We have a whole session on it,"}, {"start": 747.0, "text": "go check out \"Get the most out of Device Hub\"."}, {"start": 751.0, "text": "I've had a lot of fun getting my app up and running,"}, {"start": 753.0, "text": "but delivering a truly great app"}, {"start": 755.0, "text": "is about so much more than those prototyping sessions"}, {"start": 757.0, "text": "and building out the initial features."}, {"start": 761.0, "text": "My colleague Breckin will share how Xcode 27 keeps your app soaring after launch!"}, {"start": 770.0, "text": "Thanks Jake!"}, {"start": 771.0, "text": "It's a nice one!"}, {"start": 773.0, "text": "It's true, there's a lot of distance between a prototype and a finished app."}, {"start": 777.0, "text": "Our app works, but it isn't ready for the world yet."}, {"start": 780.0, "text": "Let's close that distance with some other updates in Xcode 27."}, {"start": 785.0, "text": "First, we'll prepare for departure with app Localization."}, {"start": 788.0, "text": "Then, we'll keep the wings de-iced with updates to Organizer."}, {"start": 792.0, "text": "Performance is incredibly important,"}, {"start": 794.0, "text": "so we'll cover how Instruments helps us keep our app level with the horizon."}, {"start": 798.0, "text": "And finally we'll make sure our Paper Airplanes continue to soar"}, {"start": 802.0, "text": "into Xcode Cloud."}, {"start": 804.0, "text": "I'll start with Localization."}, {"start": 807.0, "text": "Jake and I want to bring the joy of flying perfectly-folded paper airplanes"}, {"start": 811.0, "text": "to people around the world."}, {"start": 812.0, "text": "Localization is the natural place to start."}, {"start": 815.0, "text": "And in Xcode 27, my coding agent takes on a lot of the work."}, {"start": 820.0, "text": "Everybody wins when you localize your app,"}, {"start": 823.0, "text": "because you can reach more people in more languages."}, {"start": 826.0, "text": "But localization can be a big undertaking."}, {"start": 830.0, "text": "Thankfully, Xcode 27 makes it much easier"}, {"start": 832.0, "text": "and faster to localize your app."}, {"start": 835.0, "text": "Because my agent is a large language model,"}, {"start": 838.0, "text": "it is perfect for suggesting appropriate translations for my strings."}, {"start": 843.0, "text": "I've created a new conversation."}, {"start": 845.0, "text": "I'll ask the agent to setup localization for our app's project."}, {"start": 849.0, "text": "You can choose as many languages as you like,"}, {"start": 851.0, "text": "but I decided to start with Spanish."}, {"start": 854.0, "text": "The agent reads through our app's code,"}, {"start": 856.0, "text": "ensures string literals are ready for localizable references,"}, {"start": 859.0, "text": "and creates a String Catalog containing every UI string."}, {"start": 863.0, "text": "Just a few turns of conversation, and the app is ready to be translated."}, {"start": 868.0, "text": "By opening the String Catalog"}, {"start": 870.0, "text": "I can observe the agent working through the list in efficient batches."}, {"start": 874.0, "text": "Let's check how the agent is doing by returning to the chat."}, {"start": 877.0, "text": "Great! It's done."}, {"start": 879.0, "text": "The agent analyzed our app,"}, {"start": 880.0, "text": "performed any code changes necessary for localization,"}, {"start": 883.0, "text": "created a String Catalog, and translated every UI string into Spanish"}, {"start": 887.0, "text": "just as I requested."}, {"start": 890.0, "text": "When the agent generates translations, it uses the full context of your project"}, {"start": 894.0, "text": "as well as language-specific style guidance from Xcode."}, {"start": 898.0, "text": "Within minutes, our Paper Airplanes app has a localized build I can run."}, {"start": 902.0, "text": "I can test it immediately,"}, {"start": 903.0, "text": "fixing common issues like awkward layout or truncated text."}, {"start": 908.0, "text": "I like to use The String Catalog for focused, per-language work."}, {"start": 912.0, "text": "I reviewed the Spanish translations, they looked great."}, {"start": 915.0, "text": "I've added a new entry for Simplified Chinese."}, {"start": 918.0, "text": "I can add languages with the + button in the bottom left."}, {"start": 922.0, "text": "And new in Xcode 27,"}, {"start": 924.0, "text": "with a language selected in the String Catalog"}, {"start": 926.0, "text": "I can click the Generate Translations button."}, {"start": 929.0, "text": "The agent goes to work in the background,"}, {"start": 931.0, "text": "adding localization for Simplified Chinese."}, {"start": 934.0, "text": "I can check on its progress at any time, either in the agent conversation itself"}, {"start": 938.0, "text": "or by inspecting the String Catalog entries as they fill in."}, {"start": 942.0, "text": "When the agent is finished, I can run the app"}, {"start": 944.0, "text": "to spot check these changes."}, {"start": 946.0, "text": "If all is well I can distribute an update to our new users for testing."}, {"start": 952.0, "text": "A great way for native speakers"}, {"start": 953.0, "text": "to review our app's support for their language is through TestFlight!"}, {"start": 957.0, "text": "TestFlight users can provide translation feedback"}, {"start": 960.0, "text": "just as they would provide feedback for any other feature in the app."}, {"start": 964.0, "text": "Localization in Xcode has never been easier or faster;"}, {"start": 968.0, "text": "here are a few more tips to reach more people than ever before with your app."}, {"start": 973.0, "text": "Ask the agent to ensure the existing strings in your code"}, {"start": 975.0, "text": "are ready for localization."}, {"start": 978.0, "text": "It's best to start with just one or two languages, so issues are easy to spot."}, {"start": 983.0, "text": "And be sure to test the app - even if you don't read every language -"}, {"start": 986.0, "text": "to catch those awkward layout or truncated text issues early."}, {"start": 990.0, "text": "And remember that in addition to any internal testing you perform,"}, {"start": 993.0, "text": "TestFlight is perfect for getting feedback from native speakers."}, {"start": 997.0, "text": "There's a lot more to localization than what we covered today."}, {"start": 1000.0, "text": "For a deeper dive into these translation features,"}, {"start": 1002.0, "text": "check out \"Translate your app using agents in Xcode\"."}, {"start": 1006.0, "text": "And for some true immersion into the world of app localization,"}, {"start": 1009.0, "text": "land on \"Code-along: Explore localization with Xcode\"."}, {"start": 1013.0, "text": "Jake and I have folded quite a few languages"}, {"start": 1016.0, "text": "into our Paper Airplanes app."}, {"start": 1017.0, "text": "We're almost ready for takeoff."}, {"start": 1019.0, "text": "Between Jake's work earlier and mine here,"}, {"start": 1022.0, "text": "we were ready to put our app in front of people,"}, {"start": 1024.0, "text": "people, through TestFlight and then launching on the App Store."}, {"start": 1028.0, "text": "But shipping isn't the finish line."}, {"start": 1030.0, "text": "It's where we learn how our app actually behaves in the world."}, {"start": 1034.0, "text": "That's where the Organizer comes in."}, {"start": 1036.0, "text": "The conversation between our app and its users"}, {"start": 1038.0, "text": "keeps going long after the App Store launch."}, {"start": 1041.0, "text": "And the Organizer is where a lot of that conversation lives."}, {"start": 1045.0, "text": "In Xcode 27, it does more than collect reports."}, {"start": 1047.0, "text": "It also helps me act on them."}, {"start": 1050.0, "text": "The Organizer has always been where I see what my users are running into,"}, {"start": 1053.0, "text": "and where I can make our app better."}, {"start": 1055.0, "text": "But… seeing the issue is one thing."}, {"start": 1057.0, "text": "Figuring out what to do about it is another."}, {"start": 1059.0, "text": "In Xcode 27, the Organizer goes further."}, {"start": 1062.0, "text": "It helps me see more issues"}, {"start": 1064.0, "text": "and can even recommend ways to fix common issues, like hangs."}, {"start": 1067.0, "text": "hangs. For our app, that's the difference between"}, {"start": 1069.0, "text": "\"I know there's a hang\" and"}, {"start": 1071.0, "text": "\"here's where the hang is, and here's what I should try next.\""}, {"start": 1074.0, "text": "Xcode 27 brings four new things to the Organizer."}, {"start": 1078.0, "text": "The redesigned Overview surfaces the highest-impact issues first,"}, {"start": 1081.0, "text": "so I can focus immediately on big trouble spots."}, {"start": 1085.0, "text": "The Overview page puts diagnostics and metrics in the same view."}, {"start": 1089.0, "text": "A spike in the metric chart up top tells me that something needs attention."}, {"start": 1093.0, "text": "The diagnostics below show me where in the code to start looking."}, {"start": 1097.0, "text": "One screen, instead of jumping between two."}, {"start": 1101.0, "text": "New metrics for storage and animation hitches"}, {"start": 1103.0, "text": "flag issues the old metrics couldn't see."}, {"start": 1106.0, "text": "In Xcode 27, there is a new Storage metric"}, {"start": 1109.0, "text": "that shows how much space our app and our app's data have been taking up."}, {"start": 1113.0, "text": "Storage on a phone is shared across every app,"}, {"start": 1115.0, "text": "so when one app over-uses it, every app feels it."}, {"start": 1119.0, "text": "The metric breaks down documents, data, and binary size –"}, {"start": 1122.0, "text": "since binary size impacts cellular downloads and launch time."}, {"start": 1126.0, "text": "It tells me what my app's footprint is,"}, {"start": 1128.0, "text": "and where to focus for the biggest size reduction wins."}, {"start": 1132.0, "text": "You can see that version 1.0 and 1.01 of our app were quite large."}, {"start": 1137.0, "text": "This let Jake and I know that we should compress some images."}, {"start": 1140.0, "text": "The App Size chart shows that this made a big difference,"}, {"start": 1143.0, "text": "one our users could feel."}, {"start": 1146.0, "text": "The Organizer has tracked animation performance for a while,"}, {"start": 1149.0, "text": "in the context of scrolling hitches."}, {"start": 1151.0, "text": "The new hitches metric surfaces issues in more places than scrolling,"}, {"start": 1154.0, "text": "like understanding how apps use Liquid Glass and SwiftUI views."}, {"start": 1158.0, "text": "The updated metric gives me a more complete picture,"}, {"start": 1161.0, "text": "including animations the old one missed."}, {"start": 1164.0, "text": "For our app, that's the difference between catching a choppy animation and not."}, {"start": 1168.0, "text": "Speaking of which, it looks like we introduced a pretty bad hitch"}, {"start": 1171.0, "text": "in version 1.3…"}, {"start": 1173.0, "text": "I'll make a note to take a look at that when I'm done exploring the Organizer."}, {"start": 1178.0, "text": "In Xcode 27, app recommendations have become Metric Goals,"}, {"start": 1182.0, "text": "Last year, the Organizer started showing recommendations for launch time."}, {"start": 1187.0, "text": "Xcode 27 offers an expanded set of goals for your app to meet."}, {"start": 1192.0, "text": "They are achievable, realistic,"}, {"start": 1194.0, "text": "and based on technical and functional similarities"}, {"start": 1196.0, "text": "between your app and other apps."}, {"start": 1199.0, "text": "and they cover more metrics: hang rate, disk writes, battery,"}, {"start": 1203.0, "text": "and the storage and hitches metrics we just discussed."}, {"start": 1207.0, "text": "The goals are calibrated to my app,"}, {"start": 1209.0, "text": "compared with similar apps based on what my app actually does,"}, {"start": 1212.0, "text": "and what technologies it's built with."}, {"start": 1215.0, "text": "And alongside those, comparisons include our app's own historical baselines,"}, {"start": 1219.0, "text": "so we can see whether we're getting better"}, {"start": 1221.0, "text": "or encountering some unexpected turbulence."}, {"start": 1225.0, "text": "Organizer is great at providing information about issues impacting your users,"}, {"start": 1229.0, "text": "but you may be wondering how to fix them."}, {"start": 1232.0, "text": "New in Organizer, you can get guided performance analysis"}, {"start": 1235.0, "text": "and generate recommendations using coding agents."}, {"start": 1239.0, "text": "A lot of the time I spend on a regression is just figuring out why it happened,"}, {"start": 1243.0, "text": "and how to reproduce it."}, {"start": 1245.0, "text": "That's the part Generate Recommendation tackles."}, {"start": 1248.0, "text": "From the Organizer, I click Generate Recommendations...,"}, {"start": 1251.0, "text": "pick my project, and the agent works through the diagnostic data with me."}, {"start": 1255.0, "text": "Like any agentic tool, I can iterate."}, {"start": 1257.0, "text": "Try a different angle, try a different fix, until something fits the codebase."}, {"start": 1262.0, "text": "And that's a tour of Organizer in Xcode 27."}, {"start": 1265.0, "text": "But a great app does more than just work."}, {"start": 1268.0, "text": "It also has to do its job fast, and not drain the battery."}, {"start": 1272.0, "text": "The more efficient our app is, the longer our users stay in the park"}, {"start": 1276.0, "text": "instead of diverting for an unscheduled charging stop."}, {"start": 1279.0, "text": "Tuning our app's performance is one of my favorite parts of app development."}, {"start": 1282.0, "text": "A fast, efficient app keeps our users in the air longer."}, {"start": 1286.0, "text": "That's where Instruments comes in."}, {"start": 1288.0, "text": "And in Xcode 27, Instruments fits right alongside the rest of my work."}, {"start": 1293.0, "text": "Every app has its rough edges."}, {"start": 1294.0, "text": "Even our Paper Airplanes app."}, {"start": 1296.0, "text": "Some show up right away, others take more digging,"}, {"start": 1300.0, "text": "like that animation hitch the Organizer showed me earlier."}, {"start": 1303.0, "text": "Instruments is what I reach for when I want to know what my app is really doing."}, {"start": 1307.0, "text": "And in Xcode 27, finding the answers takes a lot less time."}, {"start": 1311.0, "text": "When my app feels slow,"}, {"start": 1313.0, "text": "the first question is always: where is the time really going?"}, {"start": 1316.0, "text": "Performance investigation has always felt like detective work,"}, {"start": 1319.0, "text": "and Instruments has been my favorite partner."}, {"start": 1322.0, "text": "New in Xcode 27, Top Functions makes the patterns jump out faster."}, {"start": 1326.0, "text": "I want to try to reproduce that hitch the Organizer flagged."}, {"start": 1330.0, "text": "I have our app's project open in Xcode 27."}, {"start": 1333.0, "text": "I'll run it in the Simulator and try to reproduce the animation problem."}, {"start": 1345.0, "text": "Oooh… looks like the plane is having a little engine trouble."}, {"start": 1349.0, "text": "Let's do that again and think about what might be happening."}, {"start": 1356.0, "text": "We're definitely spending too much time on each frame."}, {"start": 1359.0, "text": "I have an idea about what's wrong,"}, {"start": 1360.0, "text": "but with Instruments there's no need to guess."}, {"start": 1365.0, "text": "Oh. Jake just sent me an Instruments recording."}, {"start": 1368.0, "text": "Jake's CPU profile shows a bunch of activity on the right."}, {"start": 1371.0, "text": "I selected that time range."}, {"start": 1374.0, "text": "I've pressed the Top Functions button"}, {"start": 1376.0, "text": "and I can see that we're spending a lot of time in several parts of my app."}, {"start": 1381.0, "text": "Top Functions is perfect for finding performance problems that arise"}, {"start": 1384.0, "text": "due to expensive operations that are performed many times."}, {"start": 1387.0, "text": "In this case we can see that we are doing a lot of work in the animation pipeline."}, {"start": 1391.0, "text": "The top function is paperPhysics, which looks very expensive indeed."}, {"start": 1395.0, "text": "Let's go back to Xcode and look at this function."}, {"start": 1399.0, "text": "I'll use one of my favorite shortcuts CMD+Shift+O to bring up Quick Open."}, {"start": 1405.0, "text": "I can open a file but I can also type the name of a function"}, {"start": 1408.0, "text": "or other piece of code."}, {"start": 1411.0, "text": "There it is!"}, {"start": 1413.0, "text": "Oh! Oops, I'm iterating way too many times in this loop."}, {"start": 1418.0, "text": "We don't need to simulate our airplane that accurately for this animation."}, {"start": 1422.0, "text": "This is some code from a debugging session that I accidentally left in."}, {"start": 1425.0, "text": "I'll fix that by reducing it to 5, the number I really wanted."}, {"start": 1430.0, "text": "That should fix the issue."}, {"start": 1431.0, "text": "I'll launch the app again in the simulator to confirm."}, {"start": 1437.0, "text": "The hitch has disappeared."}, {"start": 1439.0, "text": "Top Functions pointed me directly to the most expensive part of the code."}, {"start": 1443.0, "text": "Thankfully the fix was simple and we'll soon have much happier flyers."}, {"start": 1447.0, "text": "I recorded another run in Instruments after making the fix."}, {"start": 1450.0, "text": "It's much better."}, {"start": 1451.0, "text": "Notice, none of our app's methods show up in Top Functions now."}, {"start": 1455.0, "text": "That's a great sign!"}, {"start": 1456.0, "text": "We have real evidence that our next update will not only make our users happy,"}, {"start": 1459.0, "text": "but their batteries too."}, {"start": 1462.0, "text": "Top functions in Instruments helps me reveal"}, {"start": 1464.0, "text": "where my app is really spending its time."}, {"start": 1467.0, "text": "Instruments is truly an incredible tool to see exactly what your app is doing,"}, {"start": 1471.0, "text": "and, by the way, processor trace is the coolest thing ever."}, {"start": 1475.0, "text": "Speaking of exploring all of the awesome features in Instruments,"}, {"start": 1478.0, "text": "there's so much more that I'd love to show you"}, {"start": 1480.0, "text": "including how you can compare performance runs"}, {"start": 1482.0, "text": "so you know whether code changes actually improved things or made it worse."}, {"start": 1487.0, "text": "But we have an app update to ship."}, {"start": 1489.0, "text": "thankfully, there's a deep library of performance-related sessions."}, {"start": 1493.0, "text": "If your app is turbocharged with agentic features"}, {"start": 1496.0, "text": "you'll definitely want to soar over to"}, {"start": 1498.0, "text": "\"Debug and profile agentic app experiences with Instruments\"."}, {"start": 1502.0, "text": "We also recommend you dive deeper by checking out"}, {"start": 1504.0, "text": "\"Profile, fix, and verify: Improve app responsiveness with Instruments\"."}, {"start": 1509.0, "text": "At this point, people are loving our app"}, {"start": 1512.0, "text": "and we don't want to impact their experience."}, {"start": 1514.0, "text": "Every change is a chance to break what's already working."}, {"start": 1518.0, "text": "And shipping updates without knowing whether a regression snuck in"}, {"start": 1520.0, "text": "is a stunt plane maneuver that no one wants to try."}, {"start": 1523.0, "text": "Thankfully, that's the next thing Xcode 27 has my back on."}, {"start": 1528.0, "text": "Catching regressions is one of the parts of app development"}, {"start": 1530.0, "text": "I'd rather not do by hand."}, {"start": 1532.0, "text": "Every fix and every new feature I add"}, {"start": 1534.0, "text": "brings with it a chance to break something I already shipped."}, {"start": 1537.0, "text": "That's where Xcode Cloud comes in!"}, {"start": 1540.0, "text": "Xcode Cloud is a Continuous Integration and Delivery service"}, {"start": 1543.0, "text": "built right into Xcode,"}, {"start": 1544.0, "text": "and made expressly for developers shipping to Apple platforms."}, {"start": 1547.0, "text": "It builds and tests your app in the cloud, in parallel, across multiple devices,"}, {"start": 1552.0, "text": "Xcode and OS versions."}, {"start": 1554.0, "text": "And in Xcode 27, it's easier and faster than ever"}, {"start": 1557.0, "text": "to get started with Xcode Cloud."}, {"start": 1560.0, "text": "I'll set up our app's Unit and UI Tests to run in Xcode Cloud automatically"}, {"start": 1564.0, "text": "when we make changes to our main or feature branches."}, {"start": 1567.0, "text": "Each run will be a great signal for potential regressions."}, {"start": 1570.0, "text": "I'll click the Get Started… button to start the set up."}, {"start": 1574.0, "text": "The app and developer team look correct, so I'll click Next."}, {"start": 1579.0, "text": "I'll connect Xcode Cloud to our remote source code repository..."}, {"start": 1584.0, "text": "and that's it!"}, {"start": 1585.0, "text": "Once I click Start First Build"}, {"start": 1587.0, "text": "our build and test workflow is ready to run on every commit!"}, {"start": 1591.0, "text": "The benefits of using Xcode Cloud don't stop there."}, {"start": 1594.0, "text": "Xcode Cloud also helps you deliver your app to users,"}, {"start": 1597.0, "text": "seamlessly integrating with TestFlight and the App Store."}, {"start": 1600.0, "text": "There's a lot more to Xcode Cloud than what I showed today."}, {"start": 1604.0, "text": "For a deeper dive, check out \"Build, deliver, and automate with Xcode Cloud\""}, {"start": 1608.0, "text": "and for more on how to extend Xcode Cloud to work with your own services and more,"}, {"start": 1613.0, "text": "watch the session \"Extend your Xcode Cloud workflows\"."}, {"start": 1616.0, "text": "The work I covered today is the work I keep coming back to."}, {"start": 1619.0, "text": "From delivering new features to ensuring what already works keeps working."}, {"start": 1624.0, "text": "Whether I'm creating or refining, Xcode 27 meets me there."}, {"start": 1628.0, "text": "Jake, I'll hand the controls back to you."}, {"start": 1631.0, "text": "Thanks Breckin!"}, {"start": 1632.0, "text": "As you saw, Xcode 27 is there for you"}, {"start": 1635.0, "text": "every step of the way through your app's lifecycle."}, {"start": 1637.0, "text": "From fleshing out initial ideas into prototypes,"}, {"start": 1640.0, "text": "working collaboratively with agents,"}, {"start": 1642.0, "text": "localizing your app, and resolving issues in the field,"}, {"start": 1644.0, "text": "Xcode can help you focus on what truly matters —"}, {"start": 1648.0, "text": "making something special."}, {"start": 1650.0, "text": "It's been a blast sharing what's new, but there's even more to discover."}, {"start": 1653.0, "text": "Download XCode27, customize it for your workflow,"}, {"start": 1657.0, "text": "and explore the new features."}, {"start": 1659.0, "text": "You can find more info in the release notes and in this session's resources."}, {"start": 1663.0, "text": "And there are ton of other sessions"}, {"start": 1665.0, "text": "beyond what we've already recommended you check out"}, {"start": 1667.0, "text": "out, and loads more goodies to explore, so get out there and have a great WWDC!"}]}