1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title>Swift Rockies 2026 - Conference Recap</title> 7 <meta name="description" content="Full recap of Swift Rockies 2026. Speakers, talks, and workshops from July 22-23, 2026 at the Wilder Institute Calgary Zoo."> 8 <link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96" /> 9 <link rel="icon" type="image/svg+xml" href="/favicon.svg" /> 10 <link rel="shortcut icon" href="/favicon.ico" /> 11 <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" /> 12 <link rel="manifest" href="/site.webmanifest" /> 13 <link rel="preconnect" href="https://fonts.googleapis.com"> 14 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 15 <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Space+Grotesk:wght@400;500;600;700&display=swap" rel="stylesheet"> 16 <link rel="stylesheet" href="style.css"> 17 <style> 18 .recap-page { 19 padding-top: 90px; 20 padding-bottom: 5rem; 21 } 22 23 .recap-header { 24 text-align: center; 25 margin-bottom: 3rem; 26 padding-top: 3rem; 27 } 28 29 .recap-header-eyebrow { 30 font-size: var(--text-sm); 31 font-weight: 600; 32 letter-spacing: 0.08em; 33 text-transform: uppercase; 34 color: var(--primary); 35 margin-bottom: 0.75rem; 36 } 37 38 .recap-header h1 { 39 font-size: clamp(var(--text-3xl), 5vw, var(--text-5xl)); 40 margin-bottom: 1rem; 41 } 42 43 .recap-header-meta { 44 font-size: var(--text-base); 45 color: var(--text-secondary); 46 } 47 48 .recap-group-photo { 49 width: 100%; 50 height: auto; 51 display: block; 52 border-radius: 16px; 53 box-shadow: 0 4px 8px rgba(0,0,0,0.04), 0 16px 40px rgba(0,0,0,0.10); 54 margin-bottom: 4rem; 55 } 56 57 .recap-content { 58 max-width: 860px; 59 margin: 0 auto; 60 padding: 0 1.5rem; 61 } 62 63 .recap-note { 64 background: var(--bg-secondary); 65 border-left: 4px solid var(--primary); 66 border-radius: 8px; 67 padding: 1.25rem 1.5rem; 68 margin-bottom: 3rem; 69 font-size: var(--text-sm); 70 color: var(--text-secondary); 71 line-height: 1.6; 72 } 73 74 .recap-day { 75 margin-bottom: 3.5rem; 76 } 77 78 .recap-day-header { 79 margin-bottom: 1.5rem; 80 padding-bottom: 0.75rem; 81 border-bottom: 2px solid var(--primary); 82 } 83 84 .recap-day-header h2 { 85 font-size: var(--text-2xl); 86 color: var(--text-primary); 87 margin-bottom: 0.25rem; 88 } 89 90 .recap-day-header p { 91 font-size: var(--text-sm); 92 color: var(--text-secondary); 93 } 94 95 .recap-talk-list { 96 list-style: none; 97 padding: 0; 98 margin: 0; 99 } 100 101 .recap-talk { 102 display: flex; 103 gap: 1.5rem; 104 padding: 1rem 0; 105 border-bottom: 1px solid var(--border-light, #f0f0f0); 106 align-items: baseline; 107 } 108 109 .recap-talk:last-child { 110 border-bottom: none; 111 } 112 113 .recap-talk-time { 114 font-size: var(--text-sm); 115 color: var(--text-secondary); 116 min-width: 72px; 117 flex-shrink: 0; 118 padding-top: 2px; 119 } 120 121 .recap-talk-body { 122 flex: 1; 123 } 124 125 .recap-talk-title { 126 font-size: var(--text-base); 127 font-weight: 600; 128 color: var(--text-primary); 129 line-height: 1.4; 130 } 131 132 .recap-talk-speaker { 133 font-size: var(--text-sm); 134 color: var(--text-secondary); 135 margin-top: 0.2rem; 136 } 137 138 .recap-talk-badge { 139 display: inline-block; 140 font-size: 11px; 141 font-weight: 600; 142 letter-spacing: 0.04em; 143 text-transform: uppercase; 144 background: var(--primary); 145 color: white; 146 padding: 2px 8px; 147 border-radius: 4px; 148 margin-left: 0.5rem; 149 vertical-align: middle; 150 } 151 152 .recap-talk-badge-apple { 153 background: #1E3A8A; 154 } 155 156 .recap-break { 157 font-size: var(--text-sm); 158 color: var(--text-secondary); 159 padding: 0.6rem 0; 160 border-bottom: 1px solid var(--border-light, #f0f0f0); 161 display: flex; 162 gap: 1.5rem; 163 } 164 165 .recap-break-time { 166 min-width: 72px; 167 flex-shrink: 0; 168 } 169 170 @media (max-width: 600px) { 171 .recap-talk { 172 flex-direction: column; 173 gap: 0.25rem; 174 } 175 176 .recap-break { 177 flex-direction: column; 178 gap: 0.25rem; 179 } 180 } 181 </style> 182</head> 183<body> 184 <nav class="navbar" id="navbar"> 185 <div class="nav-container"> 186 <a class='nav-logo' href='/'> 187 <img src="logo.svg" alt="Swift Rockies Logo" class="logo-img"> 188 </a> 189 <button class="nav-toggle" id="navToggle" aria-label="Toggle navigation menu">
190 <span></span> 191 <span></span> 192 <span></span> 193 </button> 194 <ul class="nav-menu" id="navMenu"> 195 <li><a class='nav-link' href='/'>Home</a></li> 196 <li><a class='nav-link' href='/#venue'>Venue</a></li> 197 <li><a class='nav-link' href='/#faq'>FAQ</a></li> 198 <li><a class='nav-link' href='/#contact'>Contact</a></li> 199 </ul> 200 </div> 201 </nav> 202 203 <div class="recap-page"> 204 <div class="container"> 205 <div class="recap-header"> 206 <p class="recap-header-eyebrow">It happened.</p> 207 <h1>Swift Rockies 2026</h1> 208 <p class="recap-header-meta">July 22-23, 2026 · Wilder Institute Calgary Zoo · Calgary, Alberta</p> 209 </div> 210 211 <img src="assets/group_shot_2026.webp" alt="Swift Rockies 2026 group photo at the Calgary Zoo" class="recap-group-photo"> 212 213 <div class="recap-content"> 214 <p class="recap-note">This page is provided for attendees who need documentation for conference reports, expense submissions, or continuing education records. It includes the full schedule, all speakers, and all talk titles from July 22-23, 2026, plus the optional pre- and post-conference workshops.</p> 215 216 <!-- Pre-Conference Workshops --> 217 <div class="recap-day"> 218 <div class="recap-day-header"> 219 <h2>Pre-Conference Workshops</h2> 220 <p>Tuesday, July 21, 2026 · Optional, sold separately</p> 221 </div> 222 <ul class="recap-talk-list"> 223 <li class="recap-talk"> 224 <span class="recap-talk-time">9 AM - 4 PM</span> 225 <div class="recap-talk-body"> 226 <div class="recap-talk-title">What's New and Interesting in App Intents</div> 227 <div class="recap-talk-speaker">Daniel Steinberg</div> 228 </div> 229 </li> 230 <li class="recap-talk"> 231 <span class="recap-talk-time">9 AM - 5 PM</span> 232 <div class="recap-talk-body"> 233 <div class="recap-talk-title">Swift Concurrency Lab</div> 234 <div class="recap-talk-speaker">Matt Massicotte</div> 235 </div> 236 </li> 237 <li class="recap-talk"> 238 <span class="recap-talk-time">9 AM - 5 PM</span> 239 <div class="recap-talk-body"> 240 <div class="recap-talk-title">From Passion to Product: The App Strategy Workshop</div> 241 <div class="recap-talk-speaker">Abbey Jackson</div> 242 </div> 243 </li> 244 </ul> 245 </div> 246 247 <!-- Day 1 --> 248 <div class="recap-day"> 249 <div class="recap-day-header"> 250 <h2>Day 1</h2> 251 <p>Wednesday, July 22, 2026</p> 252 </div> 253 <ul class="recap-talk-list"> 254 <li class="recap-break"> 255 <span class="recap-break-time">8:00 AM</span> 256 <span>Doors Open & Breakfast</span> 257 </li> 258 <li class="recap-talk"> 259 <span class="recap-talk-time">9:00 AM</span> 260 <div class="recap-talk-body"> 261 <div class="recap-talk-title">Custom Styleable Containers in SwiftUI</div> 262 <div class="recap-talk-speaker">Dave DeLong</div> 263 </div> 264 </li> 265 <li class="recap-talk"> 266 <span class="recap-talk-time">9:30 AM</span> 267 <div class="recap-talk-body"> 268 <div class="recap-talk-title">Faster Builds With Xcode Compilation Cache</div> 269 <div class="recap-talk-speaker">Francis Chary</div> 270 </div> 271 </li> 272 <li class="recap-talk">
273 <span class="recap-talk-time">10:00 AM</span> 274 <div class="recap-talk-body"> 275 <div class="recap-talk-title">Practical Guide to Swift Macros</div> 276 <div class="recap-talk-speaker">Mahmood Tahir</div> 277 </div> 278 </li> 279 <li class="recap-break"> 280 <span class="recap-break-time">10:30 AM</span> 281 <span>Coffee Break</span> 282 </li> 283 <li class="recap-talk"> 284 <span class="recap-talk-time">11:00 AM</span> 285 <div class="recap-talk-body"> 286 <div class="recap-talk-title">Swift beyond Apple: Making Software for the Physical World</div> 287 <div class="recap-talk-speaker">Joannis Orlandos</div> 288 </div> 289 </li> 290 <li class="recap-talk"> 291 <span class="recap-talk-time">11:30 AM</span> 292 <div class="recap-talk-body"> 293 <div class="recap-talk-title">Accessibility for the App You're About to Ship</div> 294 <div class="recap-talk-speaker">Adrian Eves</div> 295 </div> 296 </li> 297 <li class="recap-talk"> 298 <span class="recap-talk-time">12:00 PM</span> 299 <div class="recap-talk-body"> 300 <div class="recap-talk-title">Engineering Culture: A Shared Build</div> 301 <div class="recap-talk-speaker">Ines Rosales</div> 302 </div> 303 </li> 304 <li class="recap-break"> 305 <span class="recap-break-time">12:30 PM</span> 306 <span>Lunch</span> 307 </li> 308 <li class="recap-talk"> 309 <span class="recap-talk-time">1:30 PM</span> 310 <div class="recap-talk-body"> 311 <div class="recap-talk-title">More AI, More Human: Why the new tools demand more care, not less</div> 312 <div class="recap-talk-speaker">Krishna Satya</div> 313 </div> 314 </li> 315 <li class="recap-talk"> 316 <span class="recap-talk-time">2:00 PM</span> 317 <div class="recap-talk-body"> 318 <div class="recap-talk-title">Swift Concurrency's Pit of Success</div> 319 <div class="recap-talk-speaker">Matt Massicotte</div> 320 </div> 321 </li> 322 <li class="recap-talk"> 323 <span class="recap-talk-time">2:30 PM</span> 324 <div class="recap-talk-body"> 325 <div class="recap-talk-title">The Myth of the Self-Taught iOS Developer</div> 326 <div class="recap-talk-speaker">Stewart Lynch</div> 327 </div> 328 </li> 329 <li class="recap-break"> 330 <span class="recap-break-time">3:00 PM</span> 331 <span>Coffee Break</span> 332 </li> 333 <li class="recap-talk"> 334 <span class="recap-talk-time">3:30 PM</span> 335 <div class="recap-talk-body"> 336 <div class="recap-talk-title">CloudKit Public Database as a Backend</div> 337 <div class="recap-talk-speaker">Danijela Vrzan</div> 338 </div> 339 </li> 340 <li class="recap-talk">
341 <span class="recap-talk-time">4:00 PM</span> 342 <div class="recap-talk-body"> 343 <div class="recap-talk-title">Instruments: Profiling Your App in Practice</div> 344 <div class="recap-talk-speaker">James Dempsey</div> 345 </div> 346 </li> 347 <li class="recap-talk"> 348 <span class="recap-talk-time">4:30 PM</span> 349 <div class="recap-talk-body"> 350 <div class="recap-talk-title">Breathe</div> 351 <div class="recap-talk-speaker">Daniel Steinberg</div> 352 </div> 353 </li> 354 </ul> 355 </div> 356 357 <!-- Day 2 --> 358 <div class="recap-day"> 359 <div class="recap-day-header"> 360 <h2>Day 2</h2> 361 <p>Thursday, July 23, 2026</p> 362 </div> 363 <ul class="recap-talk-list"> 364 <li class="recap-break"> 365 <span class="recap-break-time">8:00 AM</span> 366 <span>Doors Open & Breakfast</span> 367 </li> 368 <li class="recap-talk"> 369 <span class="recap-talk-time">9:00 AM</span> 370 <div class="recap-talk-body"> 371 <div class="recap-talk-title">My Slow Return to a Swift Career</div> 372 <div class="recap-talk-speaker">Ash Furrow</div> 373 </div> 374 </li> 375 <li class="recap-talk"> 376 <span class="recap-talk-time">9:30 AM</span> 377 <div class="recap-talk-body"> 378 <div class="recap-talk-title">How I Bought My Way Into Tech: Rethinking Who Gets In</div> 379 <div class="recap-talk-speaker">Abbey Jackson</div> 380 </div> 381 </li> 382 <li class="recap-talk"> 383 <span class="recap-talk-time">10:00 AM</span> 384 <div class="recap-talk-body"> 385 <div class="recap-talk-title">Keynote Karaoke</div> 386 <div class="recap-talk-speaker">Philippe Casgrain</div> 387 </div> 388 </li> 389 <li class="recap-break"> 390 <span class="recap-break-time">10:30 AM</span> 391 <span>Coffee Break</span> 392 </li> 393 <li class="recap-talk"> 394 <span class="recap-talk-time">11:00 AM</span> 395 <div class="recap-talk-body"> 396 <div class="recap-talk-title">Scaling Swift Development</div> 397 <div class="recap-talk-speaker">Marek Fořt</div> 398 </div> 399 </li> 400 <li class="recap-talk"> 401 <span class="recap-talk-time">11:30 AM</span> 402 <div class="recap-talk-body"> 403 <div class="recap-talk-title">Goodbye Simulator, Hello Device Hub</div> 404 <div class="recap-talk-speaker">Mikaela Caron</div> 405 </div> 406 </li> 407 <li class="recap-talk"> 408 <span class="recap-talk-time">12:00 PM</span> 409 <div class="recap-talk-body"> 410 <div class="recap-talk-title">Arts and Crafts</div> 411 <div class="recap-talk-speaker">Ellen Shapiro</div> 412 </div> 413 </li> 414 <li class="recap-break">
415 <span class="recap-break-time">12:30 PM</span> 416 <span>Lunch</span> 417 </li> 418 <li class="recap-talk"> 419 <span class="recap-talk-time">1:30 - 3:00 PM</span> 420 <div class="recap-talk-body"> 421 <div class="recap-talk-title">Discover what's next: The biggest updates from WWDC26 <span class="recap-talk-badge recap-talk-badge-apple">Apple Session</span></div> 422 <div class="recap-talk-speaker">Apple</div> 423 </div> 424 </li> 425 <li class="recap-break"> 426 <span class="recap-break-time">3:00 PM</span> 427 <span>Coffee Break</span> 428 </li> 429 <li class="recap-talk"> 430 <span class="recap-talk-time">3:30 - 5:00 PM</span> 431 <div class="recap-talk-body"> 432 <div class="recap-talk-title">Live Podcast Recording: Launched <span class="recap-talk-badge">Live Recording</span></div> 433 <div class="recap-talk-speaker">Charlie Chapman with Abbey Jackson, Krishna Satya & Ash Furrow</div> 434 </div> 435 </li> 436 <li class="recap-break"> 437 <span class="recap-break-time">5:00 PM</span> 438 <span>Break</span> 439 </li> 440 <li class="recap-talk"> 441 <span class="recap-talk-time">5:30 - 6:00 PM</span> 442 <div class="recap-talk-body"> 443 <div class="recap-talk-title">Live Musical Performance <span class="recap-talk-badge">Performance</span></div> 444 <div class="recap-talk-speaker">James Dempsey and the Breakpoints (Danijela Vrzan, Rob Napier, Ellen Shapiro, Adrian Eves, Daniel Steinberg)</div> 445 </div> 446 </li> 447 </ul> 448 </div> 449 450 <!-- Post-Conference Workshops --> 451 <div class="recap-day"> 452 <div class="recap-day-header"> 453 <h2>Post-Conference Workshops</h2> 454 <p>Friday, July 24, 2026 · Optional, sold separately</p> 455 </div> 456 <ul class="recap-talk-list"> 457 <li class="recap-talk"> 458 <span class="recap-talk-time">9 AM - 5 PM</span> 459 <div class="recap-talk-body"> 460 <div class="recap-talk-title">Building Local AI Systems with Swift and WendyOS</div> 461 <div class="recap-talk-speaker">Joannis Orlandos</div> 462 </div> 463 </li> 464 <li class="recap-talk"> 465 <span class="recap-talk-time">9 AM - 5 PM</span> 466 <div class="recap-talk-body"> 467 <div class="recap-talk-title">Scaling Swift Development</div> 468 <div class="recap-talk-speaker">Marek Fořt</div> 469 </div> 470 </li> 471 </ul> 472 </div> 473 </div> 474 </div> 475 </div> 476 477 <footer class="footer"> 478 <div class="container"> 479 <div class="footer-content"> 480 <div class="footer-brand"> 481 <img src="logo.svg" alt="Swift Rockies Logo" class="footer-logo"> 482 <p>Swift Rockies 2026</p> 483 <p class="footer-tagline">A retreat-style iOS developer conference</p> 484 </div> 485 <div class="footer-links"> 486 <h4>Quick Links</h4> 487 <ul> 488 <li><a href='/'>Home</a></li> 489 <li><a href='/#venue'>Venue</a></li> 490 <li><a href='/#faq'>FAQ</a></li> 491 <li><a href='/conduct'>Code of Conduct</a></li> 492 <li><a href='/privacy'>Privacy Policy</a></li> 493 <li><a href='/terms'>Terms of Service</a></li> 494 </ul> 495 </div> 496 <div class="footer-contact"> 497 <h4>Contact</h4> 498 <p><a href="mailto:[email protected]">[email protected]</a></p> 499 <p>Calgary, Alberta, Canada</p> 500 </div> 501 </div> 502 <div class="footer-bottom"> 503 <p>© 2026 Swift Rockies. All rights reserved.</p> 504 </div> 505 </div> 506 </footer> 507 508
508<script src="script.js"></script>
508 509</body> 510</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.