* Fix makePathRelative using wrong base path when projectDirectory differs (#1606)
`makePathRelative` used `project.basePath` to compute parent paths, while
`resolveGroupPath` used `projectDirectory ?? project.basePath`. When these
differ (e.g. via --project flag), intermediate group paths become inconsistent,
causing Xcode to resolve files to the wrong location.
Regression from #1596 which added the `makePathRelative` call in the
`createIntermediateGroups` code path.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Extract basePath computed property in SourceGenerator
Consolidates `projectDirectory ?? project.basePath` into a single
`basePath` property to prevent future mismatches between path resolution
call sites.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Skip makePathRelative for folder-type sources since they use sourceTree
.sourceRoot and need the full project-relative path preserved. The call
was inadvertently added for all source types in #1596 but only synced
folders (.syncedFolder) need it.
Fixes#1603
* Added ProjectFormat enum with specific for each version fields
* Added ability to specify project format version via `projectFormat` option
---------
Co-authored-by: Yonas Kolb <yonaskolb@users.noreply.github.com>
* Add explicitFolders support to syncedFolder
Adds an `explicitFolders` property to `TargetSource` that is expanded from Glob patterns and passed through to `PBXFileSystemSynchronizedRootGroup`.
* Fix syncedFolder sources ignoring createIntermediateGroups
When createIntermediateGroups was enabled and a syncedFolder source had a
multi-component path (e.g. SyncedParent/SyncedChild), two things went wrong:
1. The synced folder was unconditionally added to rootGroups, causing it
to appear both at the project root and inside the correct intermediate
parent group.
2. The synced folder kept its full project-relative path instead of being
made relative to its parent group, so Xcode concatenated them into a
wrong path (e.g. SyncedParent/SyncedParent/SyncedChild).
* Enhance PBXFileElement to recognize synced folders as groups that can be sorted
* Fix membership exceptions for nested synced folder with intermediate groups
* Update Changelog
Gate the supportedDestinations YAML preset block inside the applyTarget check so that settingPresets: none (and project) suppresses Catalyst-related settings (SUPPORTS_MACCATALYST, SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD, SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD) that were previously always injected.
Fixes#1598
* Handle membership exceptions for synchronized root groups
Adds logic to detect and register membership exceptions for PBXFileSystemSynchronizedRootGroup objects, specifically excluding Info.plist files from group membership when necessary. Also ensures resources build phase is added if synchronized root groups are present.
* Refactor synced folder membership exceptions with glob support
Extract configureMembershipExceptions into its own method, use Set for
dedup, resolve excludes via glob expansion, and add a no-op test case.
Incorporates glob support and tests from macguru@baf1108.
* Update UUID
* Comment out excludes in project.yml
Comment out excludes for ExcludedFile.swift due to CI issue.
* Clean up project.pbxproj by removing exception set
Removed PBXFileSystemSynchronizedBuildFileExceptionSet section and its references.
* Remove comment
* Update SourceGeneratorTests.swift
* Update project.pbxproj
* Retrigger CI
* Add info.plist exclusion
* Added `customWorkingDirectory` and `useCustomWorkingDirectory` properties to `Scheme.Run`
* Use new `customWorkingDirectory` and `useCustomWorkingDirectory` when generating `XCScheme.LaunchAction`
* Updated ProjectSpec.md to document new `customWorkingDirectory` and `useCustomWorkingDirectory` properties
* Fix for not setting customWorkingDirectory in the toJSONValue function
* Added test to make sure usCustomWorkingDirectory value is true when the customWorkingDirectory is set to non nil
* Change to infer the value of SchemaGenerator.LaunchAction.useCustomWorkingDirectory based on the value of Schema.Run.customWorkingDirectory
* Removed useCustomWorkingDirectory from the project spec now that it is no longer user defined.
* Expose address sanitizer flags in run and test BuildActions in Schemes
* Update testJSONEncodable to test the new fields
* Also test the asan setting values for run scheme
* Update changelog
---------
Co-authored-by: Yonas Kolb <yonaskolb@users.noreply.github.com>
* update xcodeproj to 8.27.7
* add syncedFolder source type
* drop xcode 15 support
* Rely on fileReference instead of adding new synchronizedRootGroup (#1557)
* fix: don't include untracked children in cache
---------
Co-authored-by: Kirill Yakimovich <kirill.yakimovich@gmail.com>
* Support preferred screen capture format in scheme test action (resolves#1443)
* preferredScreenCaptureFormat decoding test
---------
Co-authored-by: Yonas Kolb <yonaskolb@users.noreply.github.com>
* Make sure to create parent group structure for local packages
* Remove redundant localPackageGroup variable
---------
Co-authored-by: Jaap Manenschijn <jaap.maneschijn@rabobank.nl>
* Support for xcode 15 string catalogs
* Add sample string catalog to Test Fixture and basic test to check that asset catalogs are added in the resources build phase
* Restore unintended changes
* Update Pull Request number for 'Support for Strings Catalogs' in changelog
* Update fixture yml generator
* Detect knownRegions based on locales in string catalogs
* platformFilters on Dependecies
* platformFilters on sources
* fixed current unit tests
* renamed enum to SupportedPlatforms
* supportedPlatforms field for target
* errors
* renamed errors
* inferPlatformFiltersByPath flag
* changed priority to generate filter
* fixed parsing
* fixed init
* unit test supportedPlatforms
* unit tests for errors
* fixing build settings and unit tests
* added new settingsPresets
* new check errors and unit tests
* case insensitive match
* fixed skipping cross platform target
* json decode
* unit tests inferPlatformFiltersByPath and platformFilters for sources
* mocked files
* fixing unit tests
* first test on dependecies
* unit tests completed
* fixed unit tests
* changelog
* doc changes
* doc changes
* doc changes
* doc changes
* doc changes
* doc changes
* doc changes
* doc changes
* fixed doc
* fixed unti tests style
* fixed regex
* fixed doc
* addressing comments
* Added TestProject, moved unit tests resources in another folder
* Raising error if platform is an array
* unit test on new error
* fixed error enum
* Integrated in TestProject
* committed TestProject
* unit test error
* fixing spm deps in test project
* pushed testProject
* pushed testProject
* pushed testProject fix
* comment on isResolved property
* renameing supportedPlatforms to supportedDestinations
* renameing supportedPlatforms to supportedDestinations
* renameing test app
* checked out old file
* fixing test app
* working on auto baseSDK
* fixed deploymentTarget
* renamed errors
* fixed presets
* remamed index to priority
* small comments
* removed isResolved in target and fixed error check
* added unit tests
* fixed doc
* fixed doc
* fixed doc
* fixed doc
* fixed test app
* add visionOS and more error check and testing
* fixed supported destinations priority and tests
* fixed doc
* solved conflicts
* fixed conflicts
* renamed everything
---------
Co-authored-by: Giovanni Amati <giovanni.amati@sky.uk>
* Reproduce issue in FixtureTests
* Don't add PBXContainerItemProxy if existing PBXReferenceProxy was reused
* Move extenral target fixture to an iOS target so that it actually compiles
* Update CHANGELOG.md
* feat: Add possiblity to add resources before the sources build phase;
* feat(ios): Add change to Docs + CHANGELOG;
* fix: rename resourcesBeforeSourcesBuildPhase to putResourcesBeforeSourcesBuildPhase to make it more clear;
* Update CHANGELOG.md
---------
Co-authored-by: Yonas Kolb <yonaskolb@users.noreply.github.com>
* Resolves#173 - Shared breakpoints support
* Added breakpoints full documentation
* Invalid breakpoint just throw JSONUtilities decoding error.
* Use enumeration types instead of String for extensionIDs
* Remove a necessary line
* Remove unnecessary custom Equatable implementation
* Update CHANGELOG.md
* Ignore empty breakpoints
* Update Docs/ProjectSpec.md
Fix a typo
Co-Authored-By: Yonas Kolb <yonaskolb@users.noreply.github.com>
* Change some properties that should be Int to Int
* Create 2 typealiases
* Use BreakpointType where it is missing
* Remove unused Location
* Change some names
* Add Breakpoint.Scope
* Add Breakpoint.StopOnStyle
* Change the type of the raw value to String
* Remove some properties that may cause confusing
* Require filePah and line when the type is .file
* Add tests about decoding breakpoints
* Add Breakpoint.Action.ConveyanceType
* Add default value for waitUntilDone
* Add Breakpoint.Action.SoundName
* Add tests about decoding breakpoint actions
* Fix some issues in ProjectSpec.md
* Improve ProjectSpec.md
* Add missing condition
* Add breakpoints to project.yml
* Use unwarp
* Remove the Breakpoint suffix
* Refactor BreakpointType
* Refactor Breakpoint.Action
* Remove unnecessary properties
* Adjust the line wrapping style for BreakpointGenerator
* Support column breakpoints
---------
Co-authored-by: Alex Rupérez <alejandro.ruperez@intelygenz.com>
Co-authored-by: Yonas Kolb <yonaskolb@users.noreply.github.com>