diff --git a/Samples/DistributionSample/DistributionSample.yml b/Samples/DistributionSample/DistributionSample.yml index f9c262ff4de..3973ca4bc09 100644 --- a/Samples/DistributionSample/DistributionSample.yml +++ b/Samples/DistributionSample/DistributionSample.yml @@ -1,3 +1,5 @@ +# yaml-language-server: $schema=../../schema/xcodegen.schema.json + name: DistributionSample createIntermediateGroups: true generateEmptyDirectories: true diff --git a/Samples/SentrySampleShared/SentrySampleShared.yml b/Samples/SentrySampleShared/SentrySampleShared.yml index c06e7181aa4..766ac1b5ac2 100644 --- a/Samples/SentrySampleShared/SentrySampleShared.yml +++ b/Samples/SentrySampleShared/SentrySampleShared.yml @@ -1,3 +1,5 @@ +# yaml-language-server: $schema=../../schema/xcodegen.schema.json + name: SentrySampleShared createIntermediateGroups: true generateEmptyDirectories: true diff --git a/Samples/SessionReplay-CameraTest/SessionReplay-CameraTest.yml b/Samples/SessionReplay-CameraTest/SessionReplay-CameraTest.yml index 44bb23891dc..b7418474e85 100644 --- a/Samples/SessionReplay-CameraTest/SessionReplay-CameraTest.yml +++ b/Samples/SessionReplay-CameraTest/SessionReplay-CameraTest.yml @@ -1,3 +1,5 @@ +# yaml-language-server: $schema=../../schema/xcodegen.schema.json + name: SessionReplay-CameraTest include: - ../Shared/feature-flags.yml diff --git a/Samples/iOS-ObjectiveC/iOS-ObjectiveC.yml b/Samples/iOS-ObjectiveC/iOS-ObjectiveC.yml index 0c398a74283..db728b59122 100644 --- a/Samples/iOS-ObjectiveC/iOS-ObjectiveC.yml +++ b/Samples/iOS-ObjectiveC/iOS-ObjectiveC.yml @@ -1,3 +1,5 @@ +# yaml-language-server: $schema=../../schema/xcodegen.schema.json + name: iOS-ObjectiveC include: - ../Shared/feature-flags.yml diff --git a/Samples/iOS-Swift/iOS-Swift.yml b/Samples/iOS-Swift/iOS-Swift.yml index d1bcffea2d1..e7c777921fe 100644 --- a/Samples/iOS-Swift/iOS-Swift.yml +++ b/Samples/iOS-Swift/iOS-Swift.yml @@ -1,3 +1,5 @@ +# yaml-language-server: $schema=../../schema/xcodegen.schema.json + name: iOS-Swift include: - ../Shared/feature-flags.yml diff --git a/Samples/iOS-Swift6/iOS-Swift6.yml b/Samples/iOS-Swift6/iOS-Swift6.yml index d9488c197d3..42914365235 100644 --- a/Samples/iOS-Swift6/iOS-Swift6.yml +++ b/Samples/iOS-Swift6/iOS-Swift6.yml @@ -1,3 +1,5 @@ +# yaml-language-server: $schema=../../schema/xcodegen.schema.json + name: iOS-Swift6 include: - ../Shared/feature-flags.yml diff --git a/Samples/iOS-SwiftUI/iOS-SwiftUI.yml b/Samples/iOS-SwiftUI/iOS-SwiftUI.yml index 04610fad251..78d1d20caa0 100644 --- a/Samples/iOS-SwiftUI/iOS-SwiftUI.yml +++ b/Samples/iOS-SwiftUI/iOS-SwiftUI.yml @@ -1,3 +1,5 @@ +# yaml-language-server: $schema=../../schema/xcodegen.schema.json + name: iOS-SwiftUI include: - ../Shared/feature-flags.yml diff --git a/Samples/iOS15-SwiftUI/iOS15-SwiftUI.yml b/Samples/iOS15-SwiftUI/iOS15-SwiftUI.yml index aea773cf6c4..16fb4884914 100644 --- a/Samples/iOS15-SwiftUI/iOS15-SwiftUI.yml +++ b/Samples/iOS15-SwiftUI/iOS15-SwiftUI.yml @@ -1,3 +1,5 @@ +# yaml-language-server: $schema=../../schema/xcodegen.schema.json + name: iOS15-SwiftUI include: - ../Shared/feature-flags.yml diff --git a/Samples/macOS-Swift/macOS-Swift.yml b/Samples/macOS-Swift/macOS-Swift.yml index 2cff8c1409c..72f2461500b 100644 --- a/Samples/macOS-Swift/macOS-Swift.yml +++ b/Samples/macOS-Swift/macOS-Swift.yml @@ -1,3 +1,5 @@ +# yaml-language-server: $schema=../../schema/xcodegen.schema.json + name: macOS-Swift include: - ../Shared/feature-flags.yml diff --git a/Samples/macOS-SwiftUI/macOS-SwiftUI.yml b/Samples/macOS-SwiftUI/macOS-SwiftUI.yml index 1ac363d60d4..65f7586814b 100644 --- a/Samples/macOS-SwiftUI/macOS-SwiftUI.yml +++ b/Samples/macOS-SwiftUI/macOS-SwiftUI.yml @@ -1,3 +1,5 @@ +# yaml-language-server: $schema=../../schema/xcodegen.schema.json + name: macOS-SwiftUI include: - ../Shared/feature-flags.yml diff --git a/Samples/tvOS-Swift/tvOS-Swift.yml b/Samples/tvOS-Swift/tvOS-Swift.yml index 8ed5239c8ba..f6aff53d798 100644 --- a/Samples/tvOS-Swift/tvOS-Swift.yml +++ b/Samples/tvOS-Swift/tvOS-Swift.yml @@ -1,3 +1,5 @@ +# yaml-language-server: $schema=../../schema/xcodegen.schema.json + name: tvOS-Swift include: - ../Shared/feature-flags.yml diff --git a/Samples/visionOS-Swift/visionOS-Swift.yml b/Samples/visionOS-Swift/visionOS-Swift.yml index d6e64e1fdaa..5269e53599d 100644 --- a/Samples/visionOS-Swift/visionOS-Swift.yml +++ b/Samples/visionOS-Swift/visionOS-Swift.yml @@ -1,3 +1,5 @@ +# yaml-language-server: $schema=../../schema/xcodegen.schema.json + name: visionOS-Swift include: - ../Shared/feature-flags.yml diff --git a/Samples/watchOS-Swift/watchOS-Swift.yml b/Samples/watchOS-Swift/watchOS-Swift.yml index ceebefcb2fe..dae29d6524c 100644 --- a/Samples/watchOS-Swift/watchOS-Swift.yml +++ b/Samples/watchOS-Swift/watchOS-Swift.yml @@ -1,3 +1,5 @@ +# yaml-language-server: $schema=../../schema/xcodegen.schema.json + name: watchOS-Swift include: - ../Shared/feature-flags.yml diff --git a/schema/xcodegen.schema.json b/schema/xcodegen.schema.json new file mode 100644 index 00000000000..0c61baa7309 --- /dev/null +++ b/schema/xcodegen.schema.json @@ -0,0 +1,1764 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://xcodegen.github.io/XcodeGen/schema.json", + "title": "XcodeGen Project Spec", + "description": "Schema for XcodeGen project specification files", + "type": "object", + "required": ["name"], + "properties": { + "name": { + "type": "string", + "description": "Name of the generated project" + }, + "include": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "relativePaths": { + "type": "boolean" + }, + "enable": { + "type": "boolean" + } + }, + "required": ["path"] + } + ] + } + } + ], + "description": "One or more paths to other specs" + }, + "createIntermediateGroups": { + "type": "boolean", + "description": "If true, intermediate groups will be created for every path component" + }, + "generateEmptyDirectories": { + "type": "boolean", + "description": "Generate empty directories in the project" + }, + "options": { + "type": "object", + "properties": { + "minimumXcodeGenVersion": { + "type": "string" + }, + "carthageBuildPath": { + "type": "string" + }, + "carthageExecutablePath": { + "type": "string" + }, + "createIntermediateGroups": { + "type": "boolean" + }, + "bundleIdPrefix": { + "type": "string" + }, + "settingPresets": { + "type": "string", + "enum": ["all", "none", "project", "targets"] + }, + "developmentLanguage": { + "type": "string" + }, + "xcodeVersion": { + "type": "string" + }, + "deploymentTarget": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "transitivelyLinkDependencies": { + "type": "boolean" + }, + "groupSortPosition": { + "type": "string", + "enum": ["top", "bottom", "none"] + }, + "generateEmptyDirectories": { + "type": "boolean" + }, + "schemePathPrefix": { + "type": "string" + }, + "usesTabs": { + "type": "boolean" + }, + "indentWidth": { + "type": "integer" + }, + "tabWidth": { + "type": "integer" + }, + "disabledValidations": { + "type": "array", + "items": { + "type": "string" + } + }, + "defaultConfig": { + "type": "string" + }, + "groupOrdering": { + "type": "array", + "items": { + "type": "object", + "properties": { + "pattern": { + "type": "string" + }, + "order": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "findCarthageFrameworks": { + "type": "boolean" + }, + "localPackagesGroup": { + "type": "string" + }, + "fileTypes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "file": { + "type": "boolean" + }, + "buildPhase": { + "type": "string" + }, + "attributes": { + "type": "array", + "items": { + "type": "string" + } + }, + "resourceTags": { + "type": "array", + "items": { + "type": "string" + } + }, + "compilerFlags": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "preGenCommand": { + "type": "string" + }, + "postGenCommand": { + "type": "string" + }, + "useBaseInternationalization": { + "type": "boolean" + }, + "defaultSourceDirectoryType": { + "type": "string", + "enum": ["group", "folder", "syncedFolder"] + } + } + }, + "attributes": { + "type": "object", + "additionalProperties": true, + "description": "PBXProject attributes" + }, + "breakpoints": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "breakpoints": { + "type": "array", + "items": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "continueAfterRunningActions": { + "type": "boolean" + }, + "actions": { + "type": "array", + "items": { + "type": "object" + } + } + } + } + } + } + } + }, + "configs": { + "type": "object", + "additionalProperties": { + "type": "string", + "enum": ["debug", "release"] + }, + "description": "Project build configurations" + }, + "configFiles": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": ".xcconfig files per config" + }, + "settings": { + "$ref": "#/definitions/Settings", + "description": "Project specific settings" + }, + "settingGroups": { + "type": "object", + "additionalProperties": { + "type": "object", + "additionalProperties": true + } + }, + "targets": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Target" + } + }, + "fileGroups": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of paths to add to the root of the project" + }, + "schemes": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Scheme" + } + }, + "schemeTemplates": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Scheme" + } + }, + "targetTemplates": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Target" + } + }, + "packages": { + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "$ref": "#/definitions/RemotePackage" + }, + { + "$ref": "#/definitions/LocalPackage" + } + ] + } + }, + "projectReferences": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ProjectReference" + } + } + }, + "definitions": { + "Target": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "application", + "application.on-demand-install-capable", + "application.messages", + "application.watchapp", + "application.watchapp2", + "application.watchapp2-container", + "app-extension", + "app-extension.intents-service", + "app-extension.messages", + "app-extension.messages-sticker-pack", + "bundle", + "bundle.ocunit-test", + "bundle.ui-testing", + "bundle.unit-test", + "command-line-tool", + "extensionkit-extension", + "framework", + "framework.static", + "instruments-package", + "library.dynamic", + "library.static", + "oc-unit-test-bundle", + "sticker-pack-extension", + "tool", + "tv-app-extension", + "watch-app", + "watchkit-extension", + "watchkit2-extension", + "xcode-extension", + "driver-extension", + "system-extension", + "xpc-service", + "" + ] + }, + "platform": { + "oneOf": [ + { + "type": "string", + "enum": ["auto", "iOS", "macOS", "tvOS", "watchOS", "visionOS"] + }, + { + "type": "array", + "items": { + "type": "string", + "enum": ["iOS", "macOS", "tvOS", "watchOS", "visionOS"] + } + } + ] + }, + "supportedDestinations": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "deploymentTarget": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + ] + }, + "sources": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/TargetSource" + } + ] + } + } + ] + }, + "dependencies": { + "type": "array", + "items": { + "$ref": "#/definitions/Dependency" + } + }, + "configFiles": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "plist": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "properties": { + "type": "object", + "additionalProperties": true + } + }, + "required": ["path"] + } + ] + }, + "info": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "properties": { + "type": "object", + "additionalProperties": true + } + }, + "required": ["path"] + } + ] + }, + "entitlements": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "properties": { + "type": "object", + "additionalProperties": true + } + }, + "required": ["path"] + } + ] + }, + "buildToolPlugins": { + "type": "array", + "items": { + "type": "object", + "properties": { + "plugin": { + "type": "string" + }, + "package": { + "type": "string" + } + }, + "required": ["plugin"] + } + }, + "preBuildScripts": { + "type": "array", + "items": { + "$ref": "#/definitions/BuildScript" + } + }, + "postBuildScripts": { + "type": "array", + "items": { + "$ref": "#/definitions/BuildScript" + } + }, + "preCompileScripts": { + "type": "array", + "items": { + "$ref": "#/definitions/BuildScript" + } + }, + "postCompileScripts": { + "type": "array", + "items": { + "$ref": "#/definitions/BuildScript" + } + }, + "buildRules": { + "type": "array", + "items": { + "$ref": "#/definitions/BuildRule" + } + }, + "scheme": { + "$ref": "#/definitions/TargetScheme" + }, + "legacy": { + "$ref": "#/definitions/LegacyTarget" + }, + "template": { + "type": "string" + }, + "templates": { + "type": "array", + "items": { + "type": "string" + } + }, + "templateAttributes": { + "type": "object", + "additionalProperties": true + }, + "transitivelyLinkDependencies": { + "type": "boolean" + }, + "directlyEmbedCarthageDependencies": { + "type": "boolean" + }, + "requiresObjCLinking": { + "type": "boolean" + }, + "onlyCopyFilesOnInstall": { + "type": "boolean" + }, + "putResourcesBeforeSourcesBuildPhase": { + "type": "boolean" + }, + "attributes": { + "type": "object", + "additionalProperties": true + }, + "settings": { + "$ref": "#/definitions/Settings" + } + }, + "additionalProperties": false + }, + "TargetSource": { + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "name": { + "type": "string" + }, + "group": { + "type": "string" + }, + "createIntermediateGroups": { + "type": "boolean" + }, + "excludes": { + "type": "array", + "items": { + "type": "string" + } + }, + "includes": { + "type": "array", + "items": { + "type": "string" + } + }, + "compilerFlags": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "headerVisibility": { + "type": "string", + "enum": ["public", "private", "project"] + }, + "type": { + "type": "string", + "enum": ["file", "folder", "group", "syncedFolder"] + }, + "destinationFilters": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "inferDestinationFiltersByPath": { + "type": "boolean" + }, + "optional": { + "type": "boolean" + }, + "buildPhase": { + "oneOf": [ + { + "type": "string", + "enum": ["sources", "resources", "headers", "none"] + }, + { + "type": "object", + "properties": { + "copyFiles": { + "type": "object", + "properties": { + "destination": { + "type": "string", + "enum": [ + "absolutePath", + "productsDirectory", + "wrapper", + "executables", + "resources", + "javaResources", + "frameworks", + "sharedFrameworks", + "sharedSupport", + "plugins" + ] + }, + "subpath": { + "type": "string" + } + }, + "required": ["destination"] + } + }, + "required": ["copyFiles"] + } + ] + }, + "attributes": { + "type": "array", + "items": { + "type": "string" + } + }, + "resourceTags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": ["path"] + }, + "Dependency": { + "oneOf": [ + { + "type": "object", + "properties": { + "target": { + "type": "string" + }, + "embed": { + "type": "boolean" + }, + "codeSign": { + "type": "boolean" + }, + "removeHeaders": { + "type": "boolean" + }, + "link": { + "type": "boolean" + }, + "weak": { + "type": "boolean" + }, + "platformFilter": { + "type": "string", + "enum": ["iOS", "macOS", "all"] + }, + "destinationFilters": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "platforms": { + "type": "array", + "items": { + "type": "string" + } + }, + "copy": { + "type": "object", + "properties": { + "destination": { + "type": "string", + "enum": [ + "absolutePath", + "productsDirectory", + "wrapper", + "executables", + "resources", + "javaResources", + "frameworks", + "sharedFrameworks", + "sharedSupport", + "plugins" + ] + }, + "subpath": { + "type": "string" + } + }, + "required": ["destination"] + } + }, + "required": ["target"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "package": { + "type": "string" + }, + "product": { + "type": "string" + }, + "products": { + "type": "array", + "items": { + "type": "string" + } + }, + "version": { + "type": "string" + } + }, + "required": ["package"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "sdk": { + "type": "string" + }, + "root": { + "type": "string" + } + }, + "required": ["sdk"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "carthage": { + "type": "string" + }, + "findFrameworks": { + "type": "boolean" + }, + "linkType": { + "type": "string", + "enum": ["dynamic", "static"] + }, + "platformFilter": { + "type": "string", + "enum": ["iOS", "macOS", "all"] + }, + "destinationFilters": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + } + }, + "required": ["carthage"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "framework": { + "type": "string" + }, + "embed": { + "type": "boolean" + }, + "codeSign": { + "type": "boolean" + }, + "weak": { + "type": "boolean" + }, + "implicit": { + "type": "boolean" + }, + "platformFilter": { + "type": "string", + "enum": ["iOS", "macOS", "all"] + }, + "destinationFilters": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "copy": { + "type": "object", + "properties": { + "destination": { + "type": "string", + "enum": [ + "absolutePath", + "productsDirectory", + "wrapper", + "executables", + "resources", + "javaResources", + "frameworks", + "sharedFrameworks", + "sharedSupport", + "plugins" + ] + }, + "subpath": { + "type": "string" + } + }, + "required": ["destination"] + } + }, + "required": ["framework"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "git": { + "type": "string" + }, + "branch": { + "type": "string" + }, + "commit": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "submodules": { + "type": "boolean" + } + }, + "required": ["git"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "xctest": { + "type": "boolean" + } + }, + "required": ["xctest"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "bundle": { + "type": "string" + } + }, + "required": ["bundle"], + "additionalProperties": false + } + ] + }, + "BuildScript": { + "type": "object", + "properties": { + "script": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "path": { + "type": "string" + }, + "name": { + "type": "string" + }, + "shell": { + "type": "string" + }, + "inputFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "outputFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "inputFileLists": { + "type": "array", + "items": { + "type": "string" + } + }, + "outputFileLists": { + "type": "array", + "items": { + "type": "string" + } + }, + "showEnvVars": { + "type": "boolean" + }, + "basedOnDependencyAnalysis": { + "type": "boolean" + }, + "runOnlyWhenInstalling": { + "type": "boolean" + }, + "discoveredDependencyFile": { + "type": "string" + } + } + }, + "BuildRule": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "filePattern": { + "type": "string" + }, + "fileType": { + "type": "string" + }, + "script": { + "type": "string" + }, + "outputFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "outputFilesCompilerFlags": { + "type": "array", + "items": { + "type": "string" + } + }, + "compilerSpec": { + "type": "string" + }, + "runOncePerArchitecture": { + "type": "boolean" + } + } + }, + "TargetScheme": { + "type": "object", + "properties": { + "commandLineArguments": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "environmentVariables": { + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/EnvironmentVariable" + } + } + ] + }, + "gatherCoverageData": { + "type": "boolean" + }, + "coverageTargets": { + "type": "array", + "items": { + "type": "string" + } + }, + "preActions": { + "type": "array", + "items": { + "$ref": "#/definitions/ExecutionAction" + } + }, + "postActions": { + "type": "array", + "items": { + "$ref": "#/definitions/ExecutionAction" + } + }, + "testTargets": { + "type": "array", + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/TestableTargetReference" + } + ] + } + }, + "testPlans": { + "type": "array", + "items": { + "$ref": "#/definitions/TestPlan" + } + } + } + }, + "LegacyTarget": { + "type": "object", + "properties": { + "toolPath": { + "type": "string" + }, + "passBuildSettingsInEnvironment": { + "type": "boolean" + }, + "buildArgumentsString": { + "type": "string" + }, + "buildWorkingDirectory": { + "type": "string" + } + }, + "required": ["toolPath"] + }, + "Scheme": { + "type": "object", + "properties": { + "templates": { + "type": "array", + "items": { + "type": "string" + } + }, + "templateAttributes": { + "type": "object", + "additionalProperties": true + }, + "build": { + "$ref": "#/definitions/Build" + }, + "run": { + "$ref": "#/definitions/RunAction" + }, + "test": { + "$ref": "#/definitions/TestAction" + }, + "profile": { + "$ref": "#/definitions/ProfileAction" + }, + "analyze": { + "$ref": "#/definitions/AnalyzeAction" + }, + "archive": { + "$ref": "#/definitions/ArchiveAction" + }, + "shared": { + "type": "boolean" + }, + "orderHint": { + "type": "integer" + }, + "isShown": { + "type": "boolean" + } + } + }, + "Build": { + "type": "object", + "properties": { + "targets": { + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "type": "string", + "enum": ["all", "test", "run", "profile", "analyze", "archive"] + }, + { + "type": "array", + "items": { + "type": "string", + "enum": ["all", "test", "run", "profile", "analyze", "archive"] + } + } + ] + } + }, + "parallelizeBuild": { + "type": "boolean" + }, + "buildImplicitDependencies": { + "type": "boolean" + }, + "preActions": { + "type": "array", + "items": { + "$ref": "#/definitions/ExecutionAction" + } + }, + "postActions": { + "type": "array", + "items": { + "$ref": "#/definitions/ExecutionAction" + } + } + } + }, + "ExecutionAction": { + "type": "object", + "properties": { + "script": { + "type": "string" + }, + "name": { + "type": "string" + }, + "actionType": { + "type": "string", + "enum": ["shellScriptAction"] + }, + "shell": { + "type": "string" + }, + "target": { + "type": "string" + } + }, + "required": ["script"] + }, + "RunAction": { + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/CommonBuildAction" + }, + { + "type": "object", + "properties": { + "executable": { + "type": "string" + }, + "askForAppToLaunch": { + "type": "boolean" + }, + "launchAutomaticallySubstyle": { + "type": "integer" + }, + "debugEnabled": { + "type": "boolean" + }, + "storeKitConfigurationFileReference": { + "type": "string" + }, + "locationScenarioReference": { + "type": "string" + }, + "enableGPUFrameCaptureMode": { + "type": "integer", + "enum": [0, 1, 2] + }, + "enableAddressSanitizer": { + "type": "boolean" + }, + "enableThreadSanitizer": { + "type": "boolean" + }, + "enableUBSanitizer": { + "type": "boolean" + }, + "stopOnEveryMainThreadCheckerIssue": { + "type": "boolean" + }, + "stopOnEveryUBSanitizerIssue": { + "type": "boolean" + }, + "disableMainThreadChecker": { + "type": "boolean" + }, + "commandLineArguments": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "environmentVariables": { + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/EnvironmentVariable" + } + } + ] + } + } + } + ] + }, + "TestAction": { + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/CommonBuildAction" + }, + { + "type": "object", + "properties": { + "targets": { + "type": "array", + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/TestableTargetReference" + } + ] + } + }, + "gatherCoverageData": { + "type": "boolean" + }, + "coverageTargets": { + "type": "array", + "items": { + "type": "string" + } + }, + "parallelizable": { + "type": "boolean" + }, + "randomExecutionOrder": { + "type": "boolean" + }, + "location": { + "type": "string" + }, + "skipped": { + "type": "boolean" + }, + "skippedTests": { + "type": "array", + "items": { + "type": "string" + } + }, + "selectedTests": { + "type": "array", + "items": { + "type": "string" + } + }, + "testPlans": { + "type": "array", + "items": { + "$ref": "#/definitions/TestPlan" + } + }, + "commandLineArguments": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "environmentVariables": { + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/EnvironmentVariable" + } + } + ] + } + } + } + ] + }, + "TestableTargetReference": { + "oneOf": [ + { + "type": "object", + "properties": { + "target": { + "type": "string" + }, + "parallelizable": { + "type": "boolean" + }, + "randomExecutionOrder": { + "type": "boolean" + }, + "skipped": { + "type": "boolean" + }, + "skippedTests": { + "type": "array", + "items": { + "type": "string" + } + }, + "selectedTests": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": ["target"] + }, + { + "type": "object", + "properties": { + "package": { + "type": "string" + }, + "parallelizable": { + "type": "boolean" + }, + "randomExecutionOrder": { + "type": "boolean" + }, + "skipped": { + "type": "boolean" + }, + "skippedTests": { + "type": "array", + "items": { + "type": "string" + } + }, + "selectedTests": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": ["package"] + }, + { + "type": "object", + "properties": { + "local": { + "type": "string" + }, + "parallelizable": { + "type": "boolean" + }, + "randomExecutionOrder": { + "type": "boolean" + }, + "skipped": { + "type": "boolean" + }, + "skippedTests": { + "type": "array", + "items": { + "type": "string" + } + }, + "selectedTests": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": ["local"] + }, + { + "type": "object", + "properties": { + "project": { + "type": "string" + }, + "parallelizable": { + "type": "boolean" + }, + "randomExecutionOrder": { + "type": "boolean" + }, + "skipped": { + "type": "boolean" + }, + "skippedTests": { + "type": "array", + "items": { + "type": "string" + } + }, + "selectedTests": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": ["project"] + } + ] + }, + "TestPlan": { + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "defaultPlan": { + "type": "boolean" + } + }, + "required": ["path"] + }, + "ProfileAction": { + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/CommonBuildAction" + }, + { + "type": "object", + "properties": { + "executable": { + "type": "string" + }, + "askForAppToLaunch": { + "type": "boolean" + }, + "commandLineArguments": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "environmentVariables": { + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/EnvironmentVariable" + } + } + ] + } + } + } + ] + }, + "AnalyzeAction": { + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/CommonBuildAction" + } + ] + }, + "ArchiveAction": { + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/CommonBuildAction" + }, + { + "type": "object", + "properties": { + "customArchiveName": { + "type": "string" + }, + "revealArchiveInOrganizer": { + "type": "boolean" + } + } + } + ] + }, + "CommonBuildAction": { + "type": "object", + "properties": { + "config": { + "type": "string" + }, + "preActions": { + "type": "array", + "items": { + "$ref": "#/definitions/ExecutionAction" + } + }, + "postActions": { + "type": "array", + "items": { + "$ref": "#/definitions/ExecutionAction" + } + } + } + }, + "EnvironmentVariable": { + "type": "object", + "properties": { + "variable": { + "type": "string" + }, + "value": { + "type": "string" + }, + "isEnabled": { + "type": "boolean" + } + }, + "required": ["variable", "value"] + }, + "RemotePackage": { + "type": "object", + "properties": { + "url": { + "type": "string", + "format": "uri" + }, + "version": { + "type": "string" + }, + "majorVersion": { + "type": "string" + }, + "minorVersion": { + "type": "string" + }, + "exactVersion": { + "type": "string" + }, + "from": { + "type": "string" + }, + "minVersion": { + "type": "string" + }, + "maxVersion": { + "type": "string" + }, + "branch": { + "type": "string" + }, + "revision": { + "type": "string" + }, + "github": { + "type": "string" + } + }, + "required": ["url"] + }, + "LocalPackage": { + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "group": { + "type": "string" + }, + "excludeFromProject": { + "type": "boolean" + } + }, + "required": ["path"] + }, + "ProjectReference": { + "type": "object", + "properties": { + "path": { + "type": "string" + } + }, + "required": ["path"] + }, + "Settings": { + "type": "object", + "properties": { + "configs": { + "type": "object", + "additionalProperties": { + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + } + }, + "description": "Per-configuration build settings" + }, + "base": { + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "description": "Base build settings applied to all configurations" + } + }, + "additionalProperties": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "description": "Build settings that can include base settings and per-configuration settings" + } + } +}