{"$schema": "https://raw.githubusercontent.com/guitaripod/wwdc-sessions/master/schema/transcript.schema.json", "id": "wwdc2026-261", "language": "eng", "source": "https://developer.apple.com/videos/play/wwdc2026/261", "wordCount": 1778, "segments": [{"start": 7.0, "text": "Hi, I'm Tony,"}, {"start": 9.0, "text": "an engineer on the Xcode Cloud team."}, {"start": 12.0, "text": "Xcode Cloud is a continuous integration and delivery service built into Xcode"}, {"start": 17.0, "text": "and designed expressly for Apple developers."}, {"start": 20.0, "text": "It builds and tests your app in the cloud"}, {"start": 22.0, "text": "and offers a seamless way to set up distribution"}, {"start": 26.0, "text": "so you can take your app to TestFlight or to the App Store!"}, {"start": 30.0, "text": "This year, we focused on improving the fundamentals of Xcode Cloud."}, {"start": 34.0, "text": "It doesn't matter if you are just starting with an app idea"}, {"start": 37.0, "text": "or if you have been using Xcode Cloud since day one."}, {"start": 41.0, "text": "You'll find meaningful refinements every step of the way,"}, {"start": 44.0, "text": "from building and testing, to distribution."}, {"start": 48.0, "text": "Today, we'll touch on some essential concepts."}, {"start": 51.0, "text": "Then, I'll show you how seamless it is to get started with Xcode Cloud"}, {"start": 56.0, "text": "with a new app I am building."}, {"start": 58.0, "text": "Next, we'll set up distribution so we can collect feedback from users."}, {"start": 63.0, "text": "And finally, we'll take a peak"}, {"start": 65.0, "text": "at how webhooks and built-in repository management tools"}, {"start": 69.0, "text": "can extend your workflows and take you to the next level."}, {"start": 73.0, "text": "First, let's ground ourselves on some basic concepts."}, {"start": 77.0, "text": "App development is constantly changing, and this year is no exception."}, {"start": 82.0, "text": "With support for agents arriving in Xcode,"}, {"start": 84.0, "text": "a lot of developers are writing more code than ever before,"}, {"start": 88.0, "text": "iterating quickly on features and changes, and delivering more value to users,"}, {"start": 92.0, "text": "and that's awesome!"}, {"start": 94.0, "text": "But how do you scale"}, {"start": 96.0, "text": "and keep up with the rapid pace of code, new features,"}, {"start": 99.0, "text": "and ensure you can catch bugs and performance issues"}, {"start": 102.0, "text": "before they reach customer devices?"}, {"start": 105.0, "text": "Xcode Cloud is your companion for quality."}, {"start": 108.0, "text": "Compared to local development,"}, {"start": 111.0, "text": "Xcode Cloud builds and tests your app in the cloud in parallel"}, {"start": 114.0, "text": "across multiple devices and OS versions."}, {"start": 118.0, "text": "Then, when you are ready to get feedback from testers,"}, {"start": 121.0, "text": "it is so simple to setup distribution,"}, {"start": 124.0, "text": "deliver builds to TestFlight and to the app store."}, {"start": 127.0, "text": "Time to get started!"}, {"start": 129.0, "text": "As a full time engineer,"}, {"start": 131.0, "text": "I'm always looking for interesting problems to solve,"}, {"start": 134.0, "text": "but I'm also a part time barista."}, {"start": 136.0, "text": "I love making coffee in the office,"}, {"start": 138.0, "text": "and my coworkers have taken notice."}, {"start": 141.0, "text": "I've been making coffee for them for a while now,"}, {"start": 143.0, "text": "but it's starting to become difficult to track all the orders and preferences."}, {"start": 148.0, "text": "To help operate my \"office\" coffee shop,"}, {"start": 151.0, "text": "I've been working on an iOS app."}, {"start": 154.0, "text": "As the app grows, so does the test suite;"}, {"start": 157.0, "text": "unit tests for business logic,"}, {"start": 159.0, "text": "UI tests to make sure critical flows like checkout never regress."}, {"start": 164.0, "text": "Running all of these tests locally after every change"}, {"start": 167.0, "text": "is starting to take real time."}, {"start": 169.0, "text": "Time that I could spend working on adding new functionalities"}, {"start": 172.0, "text": "or responding to user feedback."}, {"start": 174.0, "text": "Time to bring in Xcode Cloud,"}, {"start": 176.0, "text": "so that builds and tests are automated,"}, {"start": 178.0, "text": "and I am no longer constrained to my local machine!"}, {"start": 182.0, "text": "This is my app in Xcode."}, {"start": 185.0, "text": "To get started, I'll navigate to the Report navigator,"}, {"start": 190.0, "text": "and select the tab called Cloud."}, {"start": 193.0, "text": "I'll choose Get Started…"}, {"start": 199.0, "text": "and I see all the products in my workspace."}, {"start": 201.0, "text": "Right now there's only one."}, {"start": 203.0, "text": "The Developer Team is already set"}, {"start": 205.0, "text": "to match my Signing & Distribution settings,"}, {"start": 208.0, "text": "so I'll go ahead and click Next."}, {"start": 215.0, "text": "In order to build my app,"}, {"start": 217.0, "text": "Xcode Cloud needs to access the source code."}, {"start": 221.0, "text": "The Onboarding assistant will load my repository,"}, {"start": 223.0, "text": "and I will just need to follow the steps to connect."}, {"start": 226.0, "text": "Depending on your source provider, the steps may vary."}, {"start": 231.0, "text": "To learn more about connecting your project,"}, {"start": 233.0, "text": "check out Connect your project to Xcode Cloud."}, {"start": 238.0, "text": "Great, we're connected!"}, {"start": 240.0, "text": "But before I click Next, let's talk about your source code."}, {"start": 244.0, "text": "Xcode Cloud Builds run on ephemeral virtual machines."}, {"start": 248.0, "text": "Your source code is only fetched when a build starts,"}, {"start": 251.0, "text": "and once your build is done, it's thrown away."}, {"start": 254.0, "text": "None of the source code is ever stored"}, {"start": 256.0, "text": "and Apple has no way of accessing it."}, {"start": 260.0, "text": "Back to Xcode."}, {"start": 262.0, "text": "I'll click Next,"}, {"start": 266.0, "text": "and we're done!"}, {"start": 269.0, "text": "Xcode Cloud has created my product and a default workflow,"}, {"start": 272.0, "text": "which I'm happy with right now."}, {"start": 274.0, "text": "It's only one more click to start my first build!"}, {"start": 283.0, "text": "Expand onboarded product,"}, {"start": 287.0, "text": "look, our first build is running."}, {"start": 290.0, "text": "Nice!"}, {"start": 291.0, "text": "My iPhone app is onboarded,"}, {"start": 294.0, "text": "but when working in the office, I am often at my MacBook,"}, {"start": 297.0, "text": "and I want a way to see the orders come in and manage them."}, {"start": 301.0, "text": "So I built a macOS app just for that."}, {"start": 304.0, "text": "Let's see how straightforward it is to start onboarding that with Xcode Cloud."}, {"start": 310.0, "text": "My macOS app is located in the same Xcode workspace,"}, {"start": 314.0, "text": "as it shares a style framework I've built for it."}, {"start": 318.0, "text": "Move to the Report navigator again,"}, {"start": 322.0, "text": "and choose the More button in the bottom left of the navigator."}, {"start": 328.0, "text": "From here, I'll select Create Workflow…"}, {"start": 335.0, "text": "Now I can see my macOS app in the Assistant,"}, {"start": 338.0, "text": "as well as my onboarded iOS app."}, {"start": 341.0, "text": "I'll pick macOS app and click Next."}, {"start": 349.0, "text": "Since we have previously allowed Xcode Cloud"}, {"start": 351.0, "text": "to access the remote repository,"}, {"start": 353.0, "text": "there is no Connect Repository step again."}, {"start": 358.0, "text": "Setup Complete."}, {"start": 360.0, "text": "Select MacOS branch, let's start our first build."}, {"start": 374.0, "text": "The cloud section now shows me builds and workflows for both of my apps."}, {"start": 380.0, "text": "This is a great staring point, but it's just the beginning."}, {"start": 383.0, "text": "I can build out more complex workflows"}, {"start": 386.0, "text": "covering more scenarios, more platforms,"}, {"start": 388.0, "text": "and more edge cases across both of my apps."}, {"start": 391.0, "text": "If you want to learn more about how to utilize workflows"}, {"start": 394.0, "text": "to help ensure quality of your app,"}, {"start": 396.0, "text": "Check out Create practical workflows in Xcode Cloud for more."}, {"start": 402.0, "text": "Next, let's talk about a crucial step of bringing your ideas to life -"}, {"start": 406.0, "text": "distribution."}, {"start": 408.0, "text": "I have two great apps running builds and tests in Xcode Cloud"}, {"start": 411.0, "text": "helping me ensure quality,"}, {"start": 413.0, "text": "but some of my users are eager to test out new features early"}, {"start": 417.0, "text": "and provide feedback."}, {"start": 418.0, "text": "TestFlight is great at this,"}, {"start": 421.0, "text": "and Xcode Cloud makes it simple to integrate."}, {"start": 425.0, "text": "In the Cloud Navigator,"}, {"start": 426.0, "text": "I'll find my iOS app and secondary click it."}, {"start": 431.0, "text": "I will select Set Up Distribution..."}, {"start": 438.0, "text": "Xcode Cloud needs content to create my official app record"}, {"start": 441.0, "text": "on App Store Connect."}, {"start": 443.0, "text": "Here, I need to provide a few properties,"}, {"start": 446.0, "text": "like my app name,"}, {"start": 447.0, "text": "the Bundle ID which is a unique identifier,"}, {"start": 451.0, "text": "and the SKU for the store."}, {"start": 453.0, "text": "Xcode Cloud tells you when these properties are taken already,"}, {"start": 457.0, "text": "and you can change it here without leaving the Assistant."}, {"start": 460.0, "text": "I can see my app name is taken,"}, {"start": 462.0, "text": "so I'll need to be creative here."}, {"start": 468.0, "text": "Ok, good to create."}, {"start": 472.0, "text": "It will take a couple of seconds to onboard it to distribution."}, {"start": 476.0, "text": "Xcode Cloud will create app record,"}, {"start": 478.0, "text": "verify, then register Bundle ID and SKU"}, {"start": 481.0, "text": "all at background."}, {"start": 484.0, "text": "Back to Xcode..."}, {"start": 486.0, "text": "Nice!"}, {"start": 487.0, "text": "I'm set up for distribution."}, {"start": 490.0, "text": "A new distribution workflow has been created for internal TestFlight,"}, {"start": 494.0, "text": "ready for me to start anytime."}, {"start": 497.0, "text": "This is one way to setup distribution,"}, {"start": 499.0, "text": "but there's one more way I want to show you."}, {"start": 502.0, "text": "I haven't set up distribution for my macOS app yet,"}, {"start": 505.0, "text": "and I want to create a new workflow for it."}, {"start": 508.0, "text": "Secondary click the app and choose Manage Workflows…"}, {"start": 515.0, "text": "Press the plus sign at the bottom of the workflow manager."}, {"start": 522.0, "text": "Here, I need to create an archive action in this new workflow,"}, {"start": 526.0, "text": "as this is a required action to distribute to TestFlight."}, {"start": 532.0, "text": "As I am attempting to do this, I'm offered a way to set this up."}, {"start": 537.0, "text": "Select Set Up..."}, {"start": 544.0, "text": "I'll review all the properties and click Create."}, {"start": 550.0, "text": "Xcode Cloud will follow the same process"}, {"start": 552.0, "text": "to onboard my MacOS app to distribution."}, {"start": 557.0, "text": "Just like that, I'm done again."}, {"start": 561.0, "text": "Building, Testing, and Distribution is at the core of Xcode Cloud,"}, {"start": 566.0, "text": "but you can do so much more with it."}, {"start": 568.0, "text": "My colleagues are really enjoying ordering coffee"}, {"start": 571.0, "text": "and have been providing me great feedback about the app."}, {"start": 574.0, "text": "Because a few of them are engineers too,"}, {"start": 577.0, "text": "they've been tracking their own bugs as they are fixed."}, {"start": 580.0, "text": "I think we can do way better than manually tracking"}, {"start": 583.0, "text": "by leveraging webhooks."}, {"start": 587.0, "text": "Webhooks are the perfect tool for building advanced automations."}, {"start": 590.0, "text": "When a webhook is configured, Xcode Cloud automatically sends a payload"}, {"start": 595.0, "text": "containing information about your build"}, {"start": 597.0, "text": "to a service of your choice."}, {"start": 600.0, "text": "There are hooks for every stage;"}, {"start": 602.0, "text": "when a build is created, when it starts,"}, {"start": 604.0, "text": "and when it's completed."}, {"start": 607.0, "text": "This is going to be perfect for my dashboard I'm building."}, {"start": 611.0, "text": "To setup this automation, I'll find the iOS app,"}, {"start": 615.0, "text": "secondary click it, and select Manage Webhooks..."}, {"start": 621.0, "text": "Here I'll add a new webhook."}, {"start": 627.0, "text": "I'll name the webhook, \"Dashboard,\""}, {"start": 632.0, "text": "and for the Payload URL, I'll enter a publicly resolvable endpoint,"}, {"start": 639.0, "text": "and click Add."}, {"start": 643.0, "text": "Once configured, it shows up in my webhook list now"}, {"start": 648.0, "text": "with no delivery history."}, {"start": 651.0, "text": "Let's start a new build to test out webhook configuration."}, {"start": 656.0, "text": "The build just finished."}, {"start": 658.0, "text": "Navigate back to the Webhooks view."}, {"start": 668.0, "text": "I can see events of webhooks being sent to my dashboard."}, {"start": 671.0, "text": "There are three here that correspond to the webhook lifecycle,"}, {"start": 675.0, "text": "and the green indicates successful deliveries."}, {"start": 678.0, "text": "You can learn more about webhooks in our documentation."}, {"start": 682.0, "text": "My Coffee app is gaining traction around the office."}, {"start": 685.0, "text": "TestFlight user feedback is now full of great ideas,"}, {"start": 688.0, "text": "feature requests, and more."}, {"start": 691.0, "text": "As the app grows, so does its complexity."}, {"start": 695.0, "text": "A common practice at this stage"}, {"start": 697.0, "text": "is to split out code into separate repositories,"}, {"start": 700.0, "text": "especially if functionality is shared."}, {"start": 704.0, "text": "This keeps your codebase modular and easier to maintain as your app scales."}, {"start": 709.0, "text": "I've recently done exactly that -"}, {"start": 711.0, "text": "splitting my style framework into its own repository."}, {"start": 715.0, "text": "It's important to make sure Xcode Cloud stays in sync with new access change."}, {"start": 720.0, "text": "Let's include that style framework in the project."}, {"start": 724.0, "text": "I'll secondary click iOS app again,"}, {"start": 727.0, "text": "and select Manage Repositories..."}, {"start": 735.0, "text": "The repository setting page opens up"}, {"start": 738.0, "text": "with my primary repository already at the top."}, {"start": 741.0, "text": "The Additional section is empty."}, {"start": 743.0, "text": "I'll click Add,"}, {"start": 747.0, "text": "and paste in Git remote URL for my style framework,"}, {"start": 752.0, "text": "then click Add."}, {"start": 755.0, "text": "Since I've already granted Xcode Cloud access to my remote provider,"}, {"start": 759.0, "text": "I don't need to grant authorization again."}, {"start": 761.0, "text": "Xcode Cloud can now build the project with all the right dependencies in place."}, {"start": 767.0, "text": "Now, every new feature I push"}, {"start": 769.0, "text": "is automatically built, tested, and deployed."}, {"start": 773.0, "text": "My team gets notified the moment anything changes,"}, {"start": 776.0, "text": "and every build has access to exactly the right dependencies."}, {"start": 780.0, "text": "Time to try it yourself!"}, {"start": 782.0, "text": "Revisit Xcode Cloud concepts,"}, {"start": 784.0, "text": "onboard your app to build,"}, {"start": 785.0, "text": "test, and distribute."}, {"start": 788.0, "text": "Then take it further —"}, {"start": 789.0, "text": "configure webhooks and additional repositories"}, {"start": 792.0, "text": "to automate your workflow and scale your project."}, {"start": 795.0, "text": "To learn even more about Xcode Cloud"}, {"start": 797.0, "text": "check out Extend your Xcode Cloud workflows"}, {"start": 800.0, "text": "and Simplify distribution in Xcode and Xcode Cloud."}, {"start": 804.0, "text": "Xcode Cloud builds your confidence to ship with quality."}, {"start": 808.0, "text": "You can move faster and focus on the important matters, worry free,"}, {"start": 811.0, "text": "so relax, sit back, and enjoy a great cup of coffee..."}, {"start": 819.0, "text": "...while it's still hot."}, {"start": 820.0, "text": "Thanks for watching."}]}