* 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
* 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
- Add explicit -destination flags to build.sh — newer Xcode versions no
longer auto-select a build destination, causing "Found no destinations
for the scheme" errors
- Update CI matrix to Xcode 16.4 and 26.2 — Xcode 16.0-16.3 simulator
runtimes are no longer installed on the macos-15 runner image
- Add PRODUCT_BUNDLE_IDENTIFIER to ExternalTarget fixture — Xcode 26.x
requires a bundle identifier for embedded frameworks
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Custom error handler
* Check for error reason and expected type
* Improvements
* Update CHANGELOG.md
* Update master (#1)
* Update CI equipments and drop Xcode 15 support (#1548)
* Add validation to ensure that settings.configs values are dictionaries, in order to prevent misuse (#1547)
* Add validation to ensure settings.configs values are dictionaries to prevent misuse
* Add tests for invalid settings.configs value formats
* Replaced with filter and split into a function
* Rename invalidConfigsFormat to invalidConfigsMappingFormat
* Add comments to explain invalid fixture
* Rename test fixture
* Update CHANGELOG.md
* Correct grammer
* Use KeyPath instead of closure
* Rename validateMappingStyleInConfig to extractValidConfigs
* Add a document comment for extractValidConfigs(from:)
* Use old testing api and remove EquatableErrorBox
* Rename test case to use "mapping" instead of "dictionary"
* Add ValidSettingsExtractor to encapsulate the logic for converting a dictionary to Settings
* Add settings validation for both Target and AggregateTarget
* Add tests for invalid settings.configs in Target and AggregateTarget
* Add document comments for ValidSettingsExtractor
* Rename ValidSettingsExtractor to BuildSettingsExtractor
* Add settings validation for settingGroups
* Add tests for settingGroups
* Rename extract to parse
* Refactor
* Update Tests/ProjectSpecTests/InvalidConfigsFormatTests.swift
---------
Co-authored-by: Yonas Kolb <yonaskolb@users.noreply.github.com>
* Synced folders (#1541)
* 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>
* Use USER env var instead of LOGNAME (#1559)
During user switch with su/sudo in system LOGNAME may not be initialised, but USER env var is always exist.
* Address Sanitizer options in run/test schemes (#1550)
* 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 to 2.44.0
# Conflicts:
# CHANGELOG.md
---------
Co-authored-by: Kohki Miki <giginet.net@gmail.com>
Co-authored-by: Ryu <87907656+Ryu0118@users.noreply.github.com>
Co-authored-by: Yonas Kolb <yonaskolb@users.noreply.github.com>
Co-authored-by: Kirill Yakimovich <kirill.yakimovich@gmail.com>
Co-authored-by: Kanstantsin Shautsou <kanstantsin.sha@gmail.com>
Co-authored-by: Himanshu Kumar <7786778+hi-kumar@users.noreply.github.com>
* Revert
* Refactoring started
* func json(atKeyPath keyPath: String) -> String?
* All cases
---------
Co-authored-by: Kohki Miki <giginet.net@gmail.com>
Co-authored-by: Ryu <87907656+Ryu0118@users.noreply.github.com>
Co-authored-by: Yonas Kolb <yonaskolb@users.noreply.github.com>
Co-authored-by: Kirill Yakimovich <kirill.yakimovich@gmail.com>
Co-authored-by: Kanstantsin Shautsou <kanstantsin.sha@gmail.com>
Co-authored-by: Himanshu Kumar <7786778+hi-kumar@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>
* Add validation to ensure settings.configs values are dictionaries to prevent misuse
* Add tests for invalid settings.configs value formats
* Replaced with filter and split into a function
* Rename invalidConfigsFormat to invalidConfigsMappingFormat
* Add comments to explain invalid fixture
* Rename test fixture
* Update CHANGELOG.md
* Correct grammer
* Use KeyPath instead of closure
* Rename validateMappingStyleInConfig to extractValidConfigs
* Add a document comment for extractValidConfigs(from:)
* Use old testing api and remove EquatableErrorBox
* Rename test case to use "mapping" instead of "dictionary"
* Add ValidSettingsExtractor to encapsulate the logic for converting a dictionary to Settings
* Add settings validation for both Target and AggregateTarget
* Add tests for invalid settings.configs in Target and AggregateTarget
* Add document comments for ValidSettingsExtractor
* Rename ValidSettingsExtractor to BuildSettingsExtractor
* Add settings validation for settingGroups
* Add tests for settingGroups
* Rename extract to parse
* Refactor
* Update Tests/ProjectSpecTests/InvalidConfigsFormatTests.swift
---------
Co-authored-by: Yonas Kolb <yonaskolb@users.noreply.github.com>
* Respect relativePaths in local package paths
Before this a local package defined in an included file would not
respect relativePaths: true.
This fixes#1497.
* Test local package with relative path
* add relative paths support to localPackages syntax
---------
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>
* Update Xcode 13.0 to 13.4.1, add job for Xcode 14.3.1
* Set DEVELOPER_DIR env to simplify changing Xcode version
* Update Carthage workarounds for Xcode 14
* 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>
* Added test for when includes contain relative paths with the same name.
* Updated mergedDictionary to handle includes with the same file path.
* Removed the need to multiple places to pass in cachedSpecFiles.
* Converts the projectRoot into a absolute path before loading a project.
* Updated changelog.
* Fix recursive include path when relativePath is not set
If relativePath is not set on a particular include, the first level of
include will currently work, but starting at the second level of
iteration, the computed include path will fail as relativePath will be
appended over and over onto the filePath. We're fixing that recursion
problem here and adding the corresponding tests to make sure it doesn't
happen again.
* Include projectRoot in include paths
The projectRoot setting (when specified) is currently ignored when
computing the include paths. We're fixing that in that commit.
* Use memoization during recursive SpecFiles creation
SpecFile objects are created by recursive through includes. On a large
project with programatically generated SpecFile, it is not rare to have
hundreds of SpecFiles, creating a large web of include dependencies.
In such a case, it is not rare either for a particular SpecFile to be
included by multiple other SpecFiles. When that happens, XcodeGen
currently creates a SpecFile object every time a SpecFile gets included,
which can lead to an exponential growth of includes.
I have seen hundreds of files being turned into hundred of thousands of
SpecFile object creations, which leads to an impractical XcodeGen run of
tens of minutes.
This change adds memoization during SpecFile recursion, in order to
reuse the previously created SpecFiles, if available, instead of
re-creating them.
* Update CHANGELOG.md
Add the following changes to the changelog:
* b97bdc4 - Use memoization during recursive SpecFiles creation
* a6b96ad - Include projectRoot in include paths
* 557b074 - Fix recursive include path when relativePath is not set
* add new option enable for include of spec
* fix to see the environment variable when parsing include
* add test for include with environment variable
* fix how to parse boolean value
* add spec about enable for include
* add Change Log
* fix the number of PR in changelog
* fix include test to make more clear
* fix test to focus enable option more
* fix english error
* fix to expand variable only one time
* add new test case by setting environment object as NO
* Fix profile action to not run frameworks
* Add PR number to changelog
* Update CHANGELOG.md
Co-authored-by: Yonas Kolb <yonaskolb@users.noreply.github.com>
* Embed ExtensionKit Extensions
* Fix explicitFileType for extensionKit
* Update ChangeLog
* Fix if statement structure
* Add a new example extension to Tests/Fixtures/TestProject/
* Update Tests/Fixtures/TestProject/Project.xcodeproj
* Comment out example for extension kit extension in Tests/Fixtures/TestProject/
* Update Tests/Fixtures/TestProject/Project.xcodeproj
* Fix XcodeGen building after XcodeProj update to 8.8.0
**Reason**
- XcodeProj has been updated and has API breaking changes
**Content**
- Added new enum case handling in `Linkage`
- Renamed the enum case name for `XCWorkspaceDataFileRef.init`
* add new product type to docs
* update changelog
Co-authored-by: Yonas Kolb <yonaskolb@users.noreply.github.com>
* upgrade scheme and project versions
* parse test plans
* remove xctestplan from resources
* generate test plan references in schemes
* add test plan to fixture
* non-mutable way of creating [XCScheme.TestPlanReference]
* update fixture version
* Add documentation
* Add default test plan option
# Conflicts:
# Sources/ProjectSpec/Scheme.swift
# Tests/Fixtures/paths_test/included_paths_test.yml
# Tests/ProjectSpecTests/SpecLoadingTests.swift
* Add test plan validation
# Conflicts:
# Tests/ProjectSpecTests/ProjectSpecTests.swift
* Check for multiple default test plans
* set first plan as default default plan
* small tweaks
* fix test plan path properties
* add test plants to target scheme
* docs
* fix fixture test plan path
* update changelog
* added ability to disable test plan path validation
Co-authored-by: Ota Mares <ota@rebuy.com>
* support local Swift Package test case into test scheme
* update test
* add test
* update CHABGELOG.md
* Update CHANGELOG.md
* revert resolved package test
* Update Sources/XcodeGenKit/SchemeGenerator.swift
Co-authored-by: Kohki Miki <giginet.net@gmail.com>
* make TargetReference convert from new JSON format
* add .package for location of target reference
* receive target reference format at target of scheme
* update test
* update XcodeProj
* add test and fix small bugs
* update docs
* support multiple style of coverageTargets
* add edge case of parsing test targets
* fix docs
* Update Docs/ProjectSpec.md
Co-authored-by: Yonas Kolb <yonaskolb@users.noreply.github.com>
* create TestableTargetReference for not making API complex
* fix code format
* fix parameter name to Testable Target Reference
* support directly writing key of Testable Target Reference
* fix compile error in build
Co-authored-by: Kohki Miki <giginet.net@gmail.com>
Co-authored-by: Yonas Kolb <yonaskolb@users.noreply.github.com>