All Versions
103
Latest Version
Avg Release Cycle
9 days
Latest Release
-

Changelog History
Page 1

  • v2.3.2 Changes

    🛠 Fixed

    • 👌 Improve error message in case ModuleMapMapper fails to retrieve a dependency #3733 by @danyf90
    • 🛠 Fix resolution of external dependencies with products including binary targets #3737 by @danyf90

    🔄 Changed

    ➕ Added

  • v2.3.1 Changes

    🛠 Fixed

    • 🛠 Fix release process to make Tuist compatible again with Xcode 12.5 and above #3731 by @mikchmie
  • v2.3.0 Changes

    🔄 Changed

    • Focus on project targets when no targets are passed to tuist focus #3654 by @danyf90
    • 👉 Make the cache warm command significantly faster by avoid recompiling already in-cache dependency targets #3585 by @danyf90
    • 👍 Allow overriding SWIFT_VERSION #3644 by @kwridan
      • The SWIFT_VERSION build setting is now part of the .essential DefaultSettings
      • This aligns its behavior with the rest of the default settings, and allows excluding it if necessary via:
      • Specifying DefaultSettings.none for cases where xcconfig files are used to control all build settings
      • Explicitly excluding it via:
        • DefaultSettings.recommended(excluding: ["SWIFT_VERSION])
        • DefaultSettings.essential(excluding: ["SWIFT_VERSION])
      • Additionally for convenience, Tuist will not set a SWIFT_VERSION target level setting if a project level setting already exists for it

    ➕ Added

    • ➕ Add support for base settings for SwiftPackageManager generated targets. This allows to specify custom settings configurations. #3683 by @danyf90
    • ⚡️ Test targets in autogenerated scheme updated to run in parallel #3682 by @wattson12

    🛠 Fixed

    • 🛠 Fixed caching of targets with sdk dependencies #3681 by @danyf90
  • v2.2.1 Changes

    🛠 Fixed

  • v2.2.0 Changes

    🔄 Changed

    • 💥 Breaking Update logic to calculate deployment target for SwiftPackageManager packages not specifying it, and remove no longer used SwiftPackageManagerDependencies.deploymentTargets property #3602 by @danyf90
    • 💥 Breaking Update logic to calculate client ID starting from UUID instead of hostname, to avoid collisions #3632 by @danyf90
    • 💥 Breaking Removed value for ENABLE_TESTING_SEARCH_PATHS in SPM dependencies. If a target requires a non-default value, you can set it using the targetSettings property in the Dependencies.swift file #3632 by @wattson12
    • 0️⃣ Target's initializer now has InfoPlist.default set as the default value for the infoPlist argument #3644 by @hisaac

    ➕ Added

    🛠 Fixed

    • Fix handling of TUIST_CONFIG_COLOURED_OUTPUT environment variable #3631 by @danyf90
    • 🛠 Fix tuist dump config no longer requires to be executed inside the Tuist folder #3647 by @danyf90
  • v2.1.1 Changes

    🛠 Fixed

  • v2.1.0 Changes

    🔄 Changed

    • 👉 Use cache version instead of Tuist version in target hash calculation #3554 by @danyf90
    • Perform remote cache download and upload concurrently #3549 by @danyf90

    ➕ Added

    • ➕ Add analytics option to Config.Cloud to enable sending analytics event to cloud backend #3547 by @danyf90
    • ➕ Add optional manifest argument to tuist dump command, to allow to dump other kinds of manifests #3551 by @danyf90
    • ➕ Add device and os options to caching profiles #3546 by @mollyIV
    • ➕ Add support for configuring the LastUpgradeCheck of the Xcode project #3561 by @mollyIV
    • ➕ Add arbitrarily high LastUpgradeCheck to SwiftPackageManager generated projects to disable warnings #3569 by @danyf90
    • ➕ Add isCI parameter to analytics events #3568 by @mollyIV
    • ➕ Add Files Resource Synthesizer #3584 by @mollyIV
    • ➕ Add support for additional files at the target level #3579 by @danyf90

    🛠 Fixed

    • 🛠 Fix a focused project issue for which when focusing a tests target, cached resources are not linked to it. #3571 by @fila95
    • 🛠 Fix target caching resources linking for extensions. They are now considered runnable targrts (which they are) #3570 by @fila95
    • 🛠 Fix the way a target is known to be supporting resources, excluding .commandLineTools. #3572 by @fila95
    • 🛠 Fix Swift Package Manager default resource handling #3295 by @mstfy
    • 🔧 If present, use coloured output configuration from environment even if it's false #3550 by @danyf90
    • 🛠 Fix tuist generate performance regression #3562 by @adellibovi
    • 🛠 Fix SwiftPackageManager dependencies mapping when the dependency contains nested umbrella header #3588 by @danyf90

    ✂ Removed

    • ✂ Removed unused Cloud.Option.insights case #3547 by @danyf90
  • v2.0.2 Changes

    🛠 Fixed

    • 🛠 Fix caching of targets with module map #3528 by @danyf90
    • 🛠 Fix SwiftPackageManager local xcframework mapping #3533 by @danyf90
    • 🛠 Fix mapping of SwiftPackageManager dependencies using alternative default source folders #3532 by @danyf90
  • v2.0.1 Changes

    🛠 Fixed

  • v2.0.0 Changes

    🔄 Changed

    • 💥 Breaking made constructors from scheme action models internal and exposed static methods for initializing them instead. For example, TestAction.init(..) becomes TestAction.testAction(...). #3400 by @pepibumur:
      • Motivation:: Using static initializers gives us the flexibility to introduce improvements without breaking the API.
      • Migration: Update all the action initializers to use the static methods instead. The name of the static method matches the name of the class but starting with a lowercase.
    • 💥 Breaking tuist focus no longer includes automatically related tests and bundle targets as sources. #3501 by @danyf90.
      • Motivation: the behavior might cause to include unwanted targets in some scenario
      • Migration: if you need to include tests and bundle targets as sources, specify them as arguments of the tuist focus command

    ✂ Removed

    • 💥 Breaking .cocoapods target dependency
      • Motivation: .cocoapods's API led users to believe their integration issues were Tuist's fault. Therefore we decided to remove it and make it an explicit action developers need to run after the generation of Xcode projects through Tuist.
      • Migration: we recommend wrapping the the generation of projects in a script that runs pod install right after generating the project: tuist generate && pod install. Alternatively, you might consider adopting Swift Package Manager and using our built-in support for package dependencies through the Dependencies.swift manifes tfile.
    • 💥 Breaking Support for deprecated TuistConfig.swift has been ended. Define your configuration using Config.swift. Check documentation for details. #3373 by @laxmorek
    • 💥 Breaking Support for deprecated Template.swift has been ended. Define your templates using any name that describes them (name_of_template.swift). Check documentation for details. #3373 by @laxmorek
      • Migration: we recommend wrapping the generation of projects in a script that runs pod install right after generating the project: tuist generate && pod install. Alternatively, you might consider adopting Swift Package Manager and using our built-in support for package dependencies through the Dependencies.swift manifest file.
    • 💥 Breaking simplified TestAction's methods for creating an instance. #3375 by @pepibumur:
      • Motivation: there was some redundancy across all the methods to initialize a TestAction. To ease its usage, we've simplified all of them into a single method. It takes the test plans as an array of Paths and the configuration as an instance of PresetBuildConfiguration. We've also made the init constructor internal to have the flexibility to change the signature without introducing breaking changes.
      • Migration: In those places where you are initializing a TestAction, update the code to use either the .testActions or the .targets methods.
    • 💥 Breaking removed the tuist doc command. #3401 by @pepibumur
      • Motivation: the command was barely used so we are removing it to reduce the maintenance burden and reduce the binary size.
      • Migration: you can use Tuist tasks or Fastlane to run swift-doc and generate documentation from your generated projects.
    • 💥 Breaking removed PresetBuildConfiguration in favour of ConfigurationName. #3400 by @pepibumur:
      • Motivation: Making the configuration a type gives the developers the flexibility to provide their list of configurations through extensions. For example, ConfigurationName.beta.
      • Migration: Scheme actions are now initialized passing a configuration argument of type ConfigurationName. Note that it conforms ExpressibleByStringLiteral so you can initialize it with a string literal.
    • 💥 Breaking removed the tuist up command in favour of a sidecar CLI tool, tuist-up that can be installed independently.
      • Motivation: provisioning environments for working with Xcode projects was outside of the scope of the project. Moreover, it added up to our triaging and maintenace work because errors that bubbled up from underlying commands made people think that they were Tuist bugs.
      • Migration: as suggested here, turn your Setup.swift into a up.toml and use tuist-up instead.
    • 💥 Breaking Scheme TestAction options have been consolidated together under a new type TestActionOptions.
      • Motivation: This makes the API consistent with some of the other Scheme actions as well as how it appears in the Scheme editor.
      • Migration: Use TestAction.targets(options: .options(language:region:codeCoverage:codeCoverageTargets))
      • TestAction.language > TestActionOptions.language
      • TestAction.region > TestActionOptions.region
      • TestAction.codeCoverage > TestActionOptions.codeCoverage
      • TestAction.codeCoverageTargets > TestActionOptions.codeCoverageTargets
    • 💥 Breaking removed deprecated TUIST_* configuration variables. #3493 by @danyf90.

      • Motivation:: They have been replaced by the corresponding TUIST_CONFIG_* variables instead.
      • Migration: Use the corresponding TUIST_CONFIG_* variables instead.
    • 💥 Breaking Settings is now publicly initialized via a new static method .settings().

      • Motivation: Using static initializers gives us the flexibility to introduce improvements without breaking the API.
      • Migration: Replace settings: Settings(base: ["setting": "value"]) with settings: .settings(base: ["setting": "value"])
    • 💥 Breaking CustomConfiguration has been merged with Configuration.

      • Motivation: Simplify the API and reduce confusion between Configuration and CustomConfiguration.
      • Migration: Replace let configurations: [CustomConfiguration] = [ ... ] with let configurations: [Configuration] = [ ... ].
    • 💥 Breaking Specifying custom build settings files for default configurations via Settings(base:debug:release:) has changed.

      • Motivation: To support the CustomConfiguration API simplification.
      • Migration: Replace
      let settings = Settings(
          debug: Configuration(settings: ["setting": "debug"]), 
          release: Configuration(settings: ["setting": "release"])
      )
      

      with:

      let settings: Settings = .settings(
          debug: ["setting": "debug"], 
          release: ["setting": "release"]
      )
      
    • 💥 Breaking Specifying xcconfig files for default configurations via Settings(base:debug:release:) has changed.

      • Motivation: To support the CustomConfiguration API simplification.
      • Migration: Replace
      let settings = Settings(
          debug: Configuration(xcconfig: "configs/debug.xcconfig"), 
          release: Configuration(xcconfig: "configs/release.xcconfig")
      )
      

      with:

      let settings: Settings = .settings(
          configurations: [
            .debug(name: .debug, xcconfig: "configs/debug.xcconfig"),
            .release(name: .release, xcconfig: "configs/release.xcconfig"),
          ]
      )
      
    • 💥 Breaking Rename target actions to scripts to align with Xcode's terminology #3374 by @pepibumur

      • Motivation To align with Xcode's terminology used for the build phase counterpart, scripts.
      • Migration Replace
      let target = Target(actions: [.post(tool: "/bin/echo", arguments: ["rocks"], name: "tuist")])
      

      with

      let target = Target(scripts: [.post(tool: "/bin/echo", arguments: ["rocks"], name: "tuist")])