Upgrade to Pro — share decks privately, control downloads, hide ads and more …

From challenge to joy: My journey developing Tu...

From challenge to joy: My journey developing Tuist for scalable Xcode Projects

This is the slides of the talk that I gave at Swiftable 2023 about our experience building and evolving Tuist to help teams overcome the challenges of using Xcode at scale.

Pedro Piñera Buendía

November 30, 2023
Tweet

More Decks by Pedro Piñera Buendía

Other Decks in Technology

Transcript

  1. Pedro Piñera · @pepicrft / @tuistio From challenge to joy

    My journey developing Tuist for scalable Xcode Projects
  2. Pedro Piñera · @pepicrft / @tuistio Hola 👋 • Pedro

    Piñera • Based in Berlin 🍺 • Never tried mate 🧉 • Creator of Tuist and XcodeProj
  3. <<<<<<< HEAD 6C6137152AEE54830017CA42 /* Asado.swift in Sources */ = {isa

    = PBXBuildFile; fi leRef = 6C6137142AEE54830017CA42 /* Asado.swift */; }; ======= 6CB8F03C2AEE54CA00C3829E /* Mate.swift in Sources */ = {isa = PBXBuildFile; fi leRef = 6CB8F03B2AEE54CA00C3829E /* Mate.swift */; }; >>>>>>> ead2c0b (Add mate) VCS Conflicts Pedro Piñera · @pepicrft / @tuistio
  4. .pbxproj was introduced before Git .pbxproj 2003 Git 2005 GitHub

    2008 Pedro Piñera · @pepicrft / @tuistio
  5. Apple tried to improve the situation with workspaces .pbxproj 2003

    Git 2005 GitHub 2008 Workspaces 2011 Pedro Piñera · @pepicrft / @tuistio
  6. Models Representation Tools Xcode xcodebuild Xcode build system .xcodeproj .xcworkspace

    .pbxproj Project Workspace Target Pedro Piñera · @pepicrft / @tuistio
  7. ✅ My project has minimal Git conflicts - Project.swift DSL

    ⚠ Modifying the project graph is painful Pedro Piñera · @pepicrft / @tuistio
  8. iOS App Static Library Dynamic Framework Bundle macOS App Static

    Library Dynamic Framework Static Library Static Library Pedro Piñera · @pepicrft / @tuistio
  9. iOS App Static Library Dynamic Framework Bundle macOS App Static

    Library Dynamic Framework Static Library Static Library Copy into product Copy into product
  10. iOS App Static Library Dynamic Framework Bundle macOS App Static

    Library Dynamic Framework Static Library Static Library Static Library Pedro Piñera · @pepicrft / @tuistio
  11. ✅ My project has minimal Git conflicts - Project.swift DSL

    ✅ My project graph is fun to work with - Project.swift DSL ⚠ Xcode is slow due to the size of the project Pedro Piñera · @pepicrft / @tuistio
  12. iOS App Static Library Dynamic Framework Bundle macOS App Static

    Library Dynamic Framework Static Library Static Library
  13. ✅ My project has minimal Git conflicts - Project.swift DSL

    ✅ My project graph is fun to work with - Project.swift DSL ✅ My project is fast within Xcode - Focused projects integration ⚠ My project dependencies DX is not ideal Pedro Piñera · @pepicrft / @tuistio
  14. Bugs, Bugs, Bugs, Bugs, Bugs, Bugs, Bugs, Bugs, Bugs, Bugs,

    Bugs, Bugs, Bugs, Bugs, Bugs, Bugs, Bugs, Bugs, Bugs, Bugs, Bugs, Bugs, Bugs, Bugs, Bugs, Bugs, Bugs, Bugs But Apple will hopefully fix it Pedro Piñera · @pepicrft / @tuistio
  15. ✅ My project has minimal Git conflicts - Project.swift DSL

    ✅ My project graph is fun to work with - Project.swift DSL ✅ My project is fast within Xcode - Focused projects ✅ My project deps DX is smooth - XcodeProj package integration ⚠ My project clean builds are slow Pedro Piñera · @pepicrft / @tuistio
  16. ✅ My project has minimal Git conflicts - Project.swift DSL

    ✅ My project graph is fun to work with - Project.swift DSL ✅ My project is fast within Xcode - Focused projects ✅ My project deps DX is smooth - XcodeProj package integration ✅ My project clean builds are fast - Binary caching ⚠ My project CI times are slow Pedro Piñera · @pepicrft / @tuistio
  17. iOS App Static Library Dynamic Framework Bundle macOS App Static

    Library Dynamic Framework Static Library Static Library
  18. ✅ My project has minimal Git conflicts - Project.swift DSL

    ✅ My project graph is fun to work with - Project.swift DSL ✅ My project is fast within Xcode - Focused projects ✅ My project deps DX is smooth - XcodeProj package integration ✅ My project clean builds are fast - Binary caching ✅ My project CI times are fast - Selective testing and binary caching Pedro Piñera · @pepicrft / @tuistio
  19. Resource synthesizers Generators Tasks Plugins Graph inspection Run command Actionable

    insights Distributed caching … Pedro Piñera · @pepicrft / @tuistio
  20. Simple things should be easy, and everything else should be

    possible Pedro Piñera · @pepicrft / @tuistio
  21. Working at scale can be simple and most importantly fun

    Pedro Piñera · @pepicrft / @tuistio