Last active
September 21, 2026 06:13
-
-
Save artemnovichkov/0033fa6ca7d77312bbc7c8b7d6d7d350 to your computer and use it in GitHub Desktop.
Unofficial JSON Schema for Xcode 27.2 .xcproj JSON project format
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "$schema": "https://json-schema.org/draft/2020-12/schema", | |
| "title": "Xcode project (.xcproj)", | |
| "description": "Unofficial schema for the Xcode JSON project format (project.xcproj), matching Apple's reference implementation https://github.com/apple/xcode-project-format (XCSchema). Files are parsed as JSON5: comments and trailing commas are allowed. Like the library, unknown keys are allowed and ignored, so typos are not caught. Not checked: unique target names, development language not in supported, known required-capabilities.", | |
| "type": "object", | |
| "required": ["default-configuration", "localizations", "files"], | |
| "properties": { | |
| "required-capabilities": {"$ref": "#/$defs/stringSet", "description": "Feature requirements. Decoding fails if any capability is unknown to the tool."}, | |
| "id": {"anyOf": [{"$ref": "#/$defs/objectID"}, {"type": "null"}]}, | |
| "root-group-debug-id": {"anyOf": [{"$ref": "#/$defs/objectID"}, {"type": "null"}]}, | |
| "configuration-list-debug-id": {"anyOf": [{"$ref": "#/$defs/objectID"}, {"type": "null"}]}, | |
| "organization": {"anyOf": [{"type": "string"}, {"type": "null"}]}, | |
| "class-prefix": {"anyOf": [{"type": "string"}, {"type": "null"}]}, | |
| "build-independent-targets-in-parallel": {"type": "boolean", "default": true}, | |
| "default-configuration": {"type": "string"}, | |
| "configurations": {"type": "array", "default": [], "items": {"$ref": "#/$defs/configuration"}}, | |
| "localizations": { | |
| "type": "object", | |
| "required": ["development"], | |
| "properties": { | |
| "development": {"type": "string"}, | |
| "supported": {"$ref": "#/$defs/stringSet", "description": "Must not include the development language."} | |
| } | |
| }, | |
| "imported-products": {"type": "array", "items": {"$ref": "#/$defs/importedProduct"}}, | |
| "packages": {"type": "array", "items": {"$ref": "#/$defs/package"}}, | |
| "files": {"type": "array", "items": {"$ref": "#/$defs/reference"}}, | |
| "targets": {"type": "array", "items": {"$ref": "#/$defs/target"}}, | |
| "build-settings": {"$ref": "#/$defs/buildSettings"}, | |
| "products-group": { | |
| "oneOf": [{"$ref": "#/$defs/groupTreeReference"}, {"type": "null"}], | |
| "default": "Products", | |
| "description": "Group containing products. Omitted when it is \"Products\"; null = no products group." | |
| }, | |
| "last-upgrade": {"anyOf": [{"$ref": "#/$defs/marketingVersion"}, {"type": "null"}]}, | |
| "last-swift-update": {"anyOf": [{"$ref": "#/$defs/marketingVersion"}, {"type": "null"}]}, | |
| "last-swift-migration": {"anyOf": [{"$ref": "#/$defs/marketingVersion"}, {"type": "null"}]} | |
| }, | |
| "$defs": { | |
| "objectID": {"type": "string", "description": "Opaque unique ID; by convention 24 hex chars."}, | |
| "marketingVersion": { | |
| "type": "string", | |
| "pattern": "^[+-]?\\d+\\.[+-]?\\d+(\\.[+-]?\\d+)?$", | |
| "examples": ["27.0", "26.3.1"], | |
| "description": "2 or 3 integer components." | |
| }, | |
| "stringSet": {"type": "array", "uniqueItems": true, "items": {"type": "string"}}, | |
| "stringList": {"type": "array", "items": {"type": "string"}}, | |
| "multilineText": { | |
| "description": "Single string, or array of lines joined with \"\\n\".", | |
| "oneOf": [{"type": "string"}, {"$ref": "#/$defs/stringList"}] | |
| }, | |
| "targetName": {"type": "string"}, | |
| "platforms": { | |
| "$ref": "#/$defs/stringSet", | |
| "description": "Platform filters, e.g. ios, macos, maccatalyst, tvos, watchos, xros, driverkit." | |
| }, | |
| "phaseKind": {"enum": ["compile-sources", "frameworks", "resources", "headers", "rez", "java-archive", "apple-script", "copy", "script"]}, | |
| "namePathComponent": { | |
| "oneOf": [ | |
| {"type": "string", "pattern": "^[^/]*$", "description": "Child name, or \".\" / \"..\"."}, | |
| { | |
| "type": "object", | |
| "required": ["name"], | |
| "properties": {"name": {"type": "string", "description": "Any child name, including ones with \"/\"."}} | |
| } | |
| ] | |
| }, | |
| "namePath": { | |
| "description": "Path of names through the group tree. String form \"Products/App.app\", or array of components when a name contains \"/\".", | |
| "oneOf": [{"type": "string"}, {"type": "array", "items": {"$ref": "#/$defs/namePathComponent"}}] | |
| }, | |
| "groupTreeReference": { | |
| "description": "Reference to a group-tree element: \"id:<objectID>\" or a name path.", | |
| "oneOf": [{"type": "string"}, {"type": "array", "items": {"$ref": "#/$defs/namePathComponent"}}] | |
| }, | |
| "groupTreeAnchoredReference": { | |
| "oneOf": [ | |
| {"$ref": "#/$defs/groupTreeReference"}, | |
| { | |
| "type": "object", | |
| "required": ["anchor", "relative-path"], | |
| "properties": { | |
| "anchor": {"$ref": "#/$defs/groupTreeReference"}, | |
| "relative-path": {"$ref": "#/$defs/namePath", "description": "File-system path below the anchor, e.g. into folder content."} | |
| } | |
| } | |
| ] | |
| }, | |
| "filePath": { | |
| "type": "string", | |
| "default": "", | |
| "description": "Group-relative path, absolute path (\"/…\"), or path with a base: <PRODUCTS>/, <SDK>/, <DEVELOPER>/, <PROJECT>/, <USER:SETTING>/. Plain paths escape \"<\" and \"\\\\\" with \"\\\\\"; <USER:…> escapes \">\" and \"\\\\\". A path may not start with \"~\"; a based path may not continue with \"/\" or \"~\".", | |
| "pattern": "^(<(PRODUCTS|SDK|DEVELOPER|PROJECT)>/([^/~][\\s\\S]*)?|<USER:([^>\\\\]|\\\\[>\\\\])*>/([^/~][\\s\\S]*)?|([^<~\\\\]|\\\\[<\\\\])([^<\\\\]|\\\\[<\\\\])*)?$" | |
| }, | |
| "buildSettings": { | |
| "type": "object", | |
| "description": "Build settings; any key. Conditions via suffix, e.g. \"SWIFT_OPTIMIZATION_LEVEL[config=Debug]\".", | |
| "additionalProperties": {"oneOf": [{"type": "string"}, {"$ref": "#/$defs/stringList"}]} | |
| }, | |
| "configuration": { | |
| "oneOf": [ | |
| {"type": "string"}, | |
| { | |
| "type": "object", | |
| "required": ["name"], | |
| "properties": { | |
| "id": {"anyOf": [{"$ref": "#/$defs/objectID"}, {"type": "null"}]}, | |
| "name": {"type": "string"}, | |
| "file": { | |
| "anyOf": [ | |
| {"$ref": "#/$defs/groupTreeAnchoredReference", "description": "xcconfig reference in the group tree."}, | |
| {"type": "null"} | |
| ] | |
| } | |
| } | |
| } | |
| ] | |
| }, | |
| "package": { | |
| "type": "object", | |
| "required": ["kind"], | |
| "properties": {"kind": {"enum": ["local", "remote"]}}, | |
| "if": {"properties": {"kind": {"const": "local"}}}, | |
| "then": { | |
| "required": ["path"], | |
| "properties": { | |
| "kind": true, | |
| "path": {"type": "string", "description": "Project-relative path."}, | |
| "traits": {"$ref": "#/$defs/stringList"} | |
| } | |
| }, | |
| "else": { | |
| "required": ["repository"], | |
| "properties": { | |
| "kind": true, | |
| "repository": {"type": "string"}, | |
| "version": {"anyOf": [{"$ref": "#/$defs/versionConstraint"}, {"type": "null"}]}, | |
| "traits": {"$ref": "#/$defs/stringList"} | |
| } | |
| } | |
| }, | |
| "versionConstraint": { | |
| "type": "object", | |
| "description": "First present key wins: revision, branch, version, up-to-next-minor-version, up-to-next-major-version, version-range, then version-range-min + version-range-max.", | |
| "if": {"required": ["revision"]}, | |
| "then": {"properties": {"revision": {"type": "string"}}}, | |
| "else": { | |
| "if": {"required": ["branch"]}, | |
| "then": {"properties": {"branch": {"type": "string"}}}, | |
| "else": { | |
| "if": {"required": ["version"]}, | |
| "then": {"properties": {"version": {"type": "string"}}}, | |
| "else": { | |
| "if": {"required": ["up-to-next-minor-version"]}, | |
| "then": {"properties": {"up-to-next-minor-version": {"type": "string"}}}, | |
| "else": { | |
| "if": {"required": ["up-to-next-major-version"]}, | |
| "then": {"properties": {"up-to-next-major-version": {"type": "string"}}}, | |
| "else": { | |
| "if": {"required": ["version-range"]}, | |
| "then": { | |
| "properties": { | |
| "version-range": { | |
| "type": "string", | |
| "pattern": "^((?!\\.\\.<).)*\\.\\.<((?!\\.\\.<).)*$", | |
| "description": "\"min..<max\"; used when both are plain numeric versions." | |
| } | |
| } | |
| }, | |
| "else": { | |
| "required": ["version-range-min", "version-range-max"], | |
| "properties": {"version-range-min": {"type": "string"}, "version-range-max": {"type": "string"}} | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "importedProduct": { | |
| "type": "object", | |
| "required": ["project", "target", "product-id", "target-membership"], | |
| "properties": { | |
| "name": { | |
| "anyOf": [{"type": "string"}, {"type": "null"}], | |
| "description": "Used instead of path when path is a single component; path is ignored when name is a string." | |
| }, | |
| "project": {"$ref": "#/$defs/groupTreeReference"}, | |
| "target": {"type": "string"}, | |
| "product-id": {"$ref": "#/$defs/objectID"}, | |
| "type": {"anyOf": [{"type": "string", "description": "File type ID."}, {"type": "null"}]}, | |
| "target-membership": {"$ref": "#/$defs/buildFileMembership"} | |
| }, | |
| "if": {"required": ["name"], "properties": {"name": {"type": "string"}}}, | |
| "else": {"required": ["path"], "properties": {"path": {"type": "string"}}} | |
| }, | |
| "buildFileAttributes": { | |
| "is-weak": {"type": "boolean", "default": false}, | |
| "code-sign-on-copy": {"type": "boolean", "default": false}, | |
| "decompress": {"type": "boolean", "default": false}, | |
| "header-preservation": {"enum": ["keep", "remove-on-copy"], "default": "keep"}, | |
| "header-role": {"enum": ["public", "private"]}, | |
| "code-generation": {"enum": ["default", "skip"], "default": "default"}, | |
| "code-generation-visibility": {"enum": ["public", "private", "project"]}, | |
| "mach-interface-generation": {"enum": ["client", "server", "both"]} | |
| }, | |
| "buildFileAttributesObject": { | |
| "type": "object", | |
| "properties": { | |
| "is-weak": {"$ref": "#/$defs/buildFileAttributes/is-weak"}, | |
| "code-sign-on-copy": {"$ref": "#/$defs/buildFileAttributes/code-sign-on-copy"}, | |
| "decompress": {"$ref": "#/$defs/buildFileAttributes/decompress"}, | |
| "header-preservation": {"$ref": "#/$defs/buildFileAttributes/header-preservation"}, | |
| "header-role": {"anyOf": [{"$ref": "#/$defs/buildFileAttributes/header-role"}, {"type": "null"}]}, | |
| "code-generation": {"$ref": "#/$defs/buildFileAttributes/code-generation"}, | |
| "code-generation-visibility": {"anyOf": [{"$ref": "#/$defs/buildFileAttributes/code-generation-visibility"}, {"type": "null"}]}, | |
| "mach-interface-generation": {"anyOf": [{"$ref": "#/$defs/buildFileAttributes/mach-interface-generation"}, {"type": "null"}]} | |
| } | |
| }, | |
| "projectBuildPhaseReference": { | |
| "description": "\"Target/<phase-kind>[/<phase-name>]\", \"id:<phaseID>\", or the name path as an array of components.", | |
| "oneOf": [ | |
| {"$ref": "#/$defs/projectBuildPhaseReferenceString"}, | |
| { | |
| "type": "array", | |
| "minItems": 2, | |
| "maxItems": 3, | |
| "prefixItems": [{"$ref": "#/$defs/childNameComponent"}, {"$ref": "#/$defs/phaseKindComponent"}, {"$ref": "#/$defs/childNameComponent"}] | |
| } | |
| ] | |
| }, | |
| "targetBuildPhaseReference": { | |
| "description": "\"<phase-kind>[/<phase-name>]\", \"id:<phaseID>\", or the name path as an array of components.", | |
| "oneOf": [ | |
| { | |
| "type": "string", | |
| "pattern": "^(id:[\\s\\S]*|(compile-sources|frameworks|resources|headers|rez|java-archive|apple-script|copy|script)(/(?!\\.\\.?$)[^/]*)?)$" | |
| }, | |
| { | |
| "type": "array", | |
| "minItems": 1, | |
| "maxItems": 2, | |
| "prefixItems": [{"$ref": "#/$defs/phaseKindComponent"}, {"$ref": "#/$defs/childNameComponent"}] | |
| } | |
| ] | |
| }, | |
| "buildFileProperties": { | |
| "id": {"$ref": "#/$defs/objectID"}, | |
| "platforms": {"$ref": "#/$defs/platforms"}, | |
| "arguments": {"type": "string", "description": "Additional compiler flags."}, | |
| "asset-tags": {"$ref": "#/$defs/stringSet"} | |
| }, | |
| "buildFile": { | |
| "oneOf": [ | |
| {"$ref": "#/$defs/projectBuildPhaseReferenceString"}, | |
| { | |
| "type": "object", | |
| "required": ["build-phase"], | |
| "properties": { | |
| "id": {"anyOf": [{"$ref": "#/$defs/buildFileProperties/id"}, {"type": "null"}]}, | |
| "build-phase": {"$ref": "#/$defs/projectBuildPhaseReference"}, | |
| "platforms": {"$ref": "#/$defs/buildFileProperties/platforms"}, | |
| "arguments": {"anyOf": [{"$ref": "#/$defs/buildFileProperties/arguments"}, {"type": "null"}]}, | |
| "asset-tags": {"$ref": "#/$defs/buildFileProperties/asset-tags"}, | |
| "is-weak": {"$ref": "#/$defs/buildFileAttributes/is-weak"}, | |
| "code-sign-on-copy": {"$ref": "#/$defs/buildFileAttributes/code-sign-on-copy"}, | |
| "decompress": {"$ref": "#/$defs/buildFileAttributes/decompress"}, | |
| "header-preservation": {"$ref": "#/$defs/buildFileAttributes/header-preservation"}, | |
| "header-role": {"anyOf": [{"$ref": "#/$defs/buildFileAttributes/header-role"}, {"type": "null"}]}, | |
| "code-generation": {"$ref": "#/$defs/buildFileAttributes/code-generation"}, | |
| "code-generation-visibility": {"anyOf": [{"$ref": "#/$defs/buildFileAttributes/code-generation-visibility"}, {"type": "null"}]}, | |
| "mach-interface-generation": {"anyOf": [{"$ref": "#/$defs/buildFileAttributes/mach-interface-generation"}, {"type": "null"}]} | |
| } | |
| } | |
| ] | |
| }, | |
| "buildFileMembership": {"type": "array", "items": {"$ref": "#/$defs/buildFile"}}, | |
| "targetBuildFile": { | |
| "type": "object", | |
| "required": ["build-phase"], | |
| "properties": { | |
| "id": {"anyOf": [{"$ref": "#/$defs/buildFileProperties/id"}, {"type": "null"}]}, | |
| "build-phase": {"$ref": "#/$defs/targetBuildPhaseReference"}, | |
| "platforms": {"$ref": "#/$defs/buildFileProperties/platforms"}, | |
| "arguments": {"anyOf": [{"$ref": "#/$defs/buildFileProperties/arguments"}, {"type": "null"}]}, | |
| "asset-tags": {"$ref": "#/$defs/buildFileProperties/asset-tags"}, | |
| "is-weak": {"$ref": "#/$defs/buildFileAttributes/is-weak"}, | |
| "code-sign-on-copy": {"$ref": "#/$defs/buildFileAttributes/code-sign-on-copy"}, | |
| "decompress": {"$ref": "#/$defs/buildFileAttributes/decompress"}, | |
| "header-preservation": {"$ref": "#/$defs/buildFileAttributes/header-preservation"}, | |
| "header-role": {"anyOf": [{"$ref": "#/$defs/buildFileAttributes/header-role"}, {"type": "null"}]}, | |
| "code-generation": {"$ref": "#/$defs/buildFileAttributes/code-generation"}, | |
| "code-generation-visibility": {"anyOf": [{"$ref": "#/$defs/buildFileAttributes/code-generation-visibility"}, {"type": "null"}]}, | |
| "mach-interface-generation": {"anyOf": [{"$ref": "#/$defs/buildFileAttributes/mach-interface-generation"}, {"type": "null"}]} | |
| } | |
| }, | |
| "commonReference": { | |
| "id": {"$ref": "#/$defs/objectID"}, | |
| "index": {"type": "boolean", "description": "includeInIndex"}, | |
| "name": {"type": "string", "description": "Only when it differs from the last path component."}, | |
| "path": {"$ref": "#/$defs/filePath"} | |
| }, | |
| "reference": { | |
| "type": "object", | |
| "properties": {"kind": {"enum": ["file-reference", "group", "folder", "variant-group", "version-group"], "default": "file-reference"}}, | |
| "if": {"required": ["kind"], "properties": {"kind": {"const": "group"}}}, | |
| "then": {"$ref": "#/$defs/group"}, | |
| "else": { | |
| "if": {"required": ["kind"], "properties": {"kind": {"const": "folder"}}}, | |
| "then": {"$ref": "#/$defs/folder"}, | |
| "else": { | |
| "if": {"required": ["kind"], "properties": {"kind": {"const": "variant-group"}}}, | |
| "then": {"$ref": "#/$defs/variantGroup"}, | |
| "else": { | |
| "if": {"required": ["kind"], "properties": {"kind": {"const": "version-group"}}}, | |
| "then": {"$ref": "#/$defs/versionGroup"}, | |
| "else": {"$ref": "#/$defs/fileReference"} | |
| } | |
| } | |
| } | |
| }, | |
| "fileReference": { | |
| "type": "object", | |
| "properties": { | |
| "id": {"anyOf": [{"$ref": "#/$defs/commonReference/id"}, {"type": "null"}]}, | |
| "index": {"anyOf": [{"$ref": "#/$defs/commonReference/index"}, {"type": "null"}]}, | |
| "path": {"$ref": "#/$defs/commonReference/path"}, | |
| "type": {"anyOf": [{"type": "string", "description": "Explicit file type, e.g. wrapper.application."}, {"type": "null"}]}, | |
| "signature": {"anyOf": [{"type": "string", "description": "Expected code signature."}, {"type": "null"}]}, | |
| "encoding": { | |
| "anyOf": [ | |
| { | |
| "oneOf": [ | |
| { | |
| "enum": [ | |
| "ascii", | |
| "nextstep", | |
| "japanese-euc", | |
| "utf8", | |
| "iso-latin-1", | |
| "symbol", | |
| "non-lossy-ascii", | |
| "shift-jis", | |
| "iso-latin-2", | |
| "unicode", | |
| "windows-code-page-1250", | |
| "windows-code-page-1251", | |
| "windows-code-page-1252", | |
| "windows-code-page-1253", | |
| "windows-code-page-1254", | |
| "iso-2022-jp", | |
| "macos-roman", | |
| "utf16", | |
| "utf16-big-endian", | |
| "utf16-little-endian", | |
| "utf32", | |
| "utf32-big-endian", | |
| "utf32-little-endian" | |
| ] | |
| }, | |
| {"type": "integer", "minimum": 0, "description": "Raw String.Encoding value for encodings without a name."} | |
| ] | |
| }, | |
| {"type": "null"} | |
| ] | |
| }, | |
| "line-ending": {"anyOf": [{"enum": ["line-feed", "carriage-return", "carriage-return-line-feed", "preserve"]}, {"type": "null"}]}, | |
| "target-membership": {"$ref": "#/$defs/buildFileMembership"} | |
| } | |
| }, | |
| "group": { | |
| "type": "object", | |
| "required": ["kind"], | |
| "properties": { | |
| "kind": {"const": "group"}, | |
| "id": {"anyOf": [{"$ref": "#/$defs/commonReference/id"}, {"type": "null"}]}, | |
| "index": {"anyOf": [{"$ref": "#/$defs/commonReference/index"}, {"type": "null"}]}, | |
| "name": {"$ref": "#/$defs/commonReference/name"}, | |
| "path": {"$ref": "#/$defs/commonReference/path"}, | |
| "children": {"type": "array", "items": {"$ref": "#/$defs/reference"}} | |
| } | |
| }, | |
| "variantGroup": { | |
| "type": "object", | |
| "required": ["kind"], | |
| "properties": { | |
| "kind": {"const": "variant-group"}, | |
| "id": {"anyOf": [{"$ref": "#/$defs/commonReference/id"}, {"type": "null"}]}, | |
| "index": {"anyOf": [{"$ref": "#/$defs/commonReference/index"}, {"type": "null"}]}, | |
| "name": {"$ref": "#/$defs/commonReference/name"}, | |
| "path": {"$ref": "#/$defs/commonReference/path"}, | |
| "target-membership": {"$ref": "#/$defs/buildFileMembership"}, | |
| "children": {"type": "array", "items": {"$ref": "#/$defs/fileReference"}} | |
| } | |
| }, | |
| "versionGroup": { | |
| "type": "object", | |
| "required": ["kind"], | |
| "properties": { | |
| "kind": {"const": "version-group"}, | |
| "id": {"anyOf": [{"$ref": "#/$defs/commonReference/id"}, {"type": "null"}]}, | |
| "index": {"anyOf": [{"$ref": "#/$defs/commonReference/index"}, {"type": "null"}]}, | |
| "name": {"$ref": "#/$defs/commonReference/name"}, | |
| "path": {"$ref": "#/$defs/commonReference/path"}, | |
| "current-version": {"anyOf": [{"$ref": "#/$defs/groupTreeReference"}, {"type": "null"}]}, | |
| "type": {"anyOf": [{"type": "string", "description": "Versioned file type, e.g. wrapper.xcdatamodel."}, {"type": "null"}]}, | |
| "target-membership": {"$ref": "#/$defs/buildFileMembership"}, | |
| "children": {"type": "array", "items": {"$ref": "#/$defs/fileReference"}} | |
| } | |
| }, | |
| "folder": { | |
| "type": "object", | |
| "required": ["kind"], | |
| "properties": { | |
| "kind": {"const": "folder"}, | |
| "id": {"anyOf": [{"$ref": "#/$defs/commonReference/id"}, {"type": "null"}]}, | |
| "index": {"anyOf": [{"$ref": "#/$defs/commonReference/index"}, {"type": "null"}]}, | |
| "path": {"$ref": "#/$defs/commonReference/path"}, | |
| "file-types": { | |
| "type": "object", | |
| "description": "Folder-relative member path → file type ID.", | |
| "additionalProperties": {"type": "string"} | |
| }, | |
| "opaque-folders": {"$ref": "#/$defs/stringSet"}, | |
| "target-membership": {"type": "array", "uniqueItems": true, "items": {"$ref": "#/$defs/targetName"}}, | |
| "membership-exceptions": {"type": "array", "items": {"$ref": "#/$defs/folderExceptionSet"}} | |
| } | |
| }, | |
| "folderExceptionSet": { | |
| "type": "object", | |
| "properties": { | |
| "exclusions": {"$ref": "#/$defs/stringSet"}, | |
| "inclusions": {"$ref": "#/$defs/stringSet"}, | |
| "platforms": {"type": "object", "additionalProperties": {"$ref": "#/$defs/platforms"}}, | |
| "attributes": {"type": "object", "additionalProperties": {"$ref": "#/$defs/buildFileAttributesObject"}}, | |
| "asset-tags": {"type": "object", "additionalProperties": {"$ref": "#/$defs/stringSet"}} | |
| }, | |
| "anyOf": [{"required": ["target"]}, {"required": ["build-phase"]}], | |
| "not": {"required": ["exclusions", "inclusions"]}, | |
| "if": {"required": ["target"]}, | |
| "then": { | |
| "properties": { | |
| "target": {"$ref": "#/$defs/targetName"}, | |
| "public-headers": {"$ref": "#/$defs/stringSet"}, | |
| "private-headers": {"$ref": "#/$defs/stringSet"}, | |
| "compiler-flags": {"type": "object", "additionalProperties": {"type": "string"}} | |
| } | |
| }, | |
| "else": {"properties": {"build-phase": {"$ref": "#/$defs/projectBuildPhaseReference"}}} | |
| }, | |
| "target": { | |
| "type": "object", | |
| "required": ["name", "id"], | |
| "properties": { | |
| "name": {"$ref": "#/$defs/targetName", "description": "Unique within the project."}, | |
| "id": {"$ref": "#/$defs/objectID"}, | |
| "configuration-list-debug-id": {"anyOf": [{"$ref": "#/$defs/objectID"}, {"type": "null"}]}, | |
| "kind": {"enum": ["native", "aggregate", "external-build-system"], "default": "native"}, | |
| "product": {"anyOf": [{"$ref": "#/$defs/groupTreeReference"}, {"type": "null"}]}, | |
| "product-type": { | |
| "type": "string", | |
| "description": "Product type without the com.apple.product-type. prefix.", | |
| "examples": [ | |
| "application", | |
| "tool", | |
| "framework", | |
| "library.static", | |
| "library.dynamic", | |
| "bundle", | |
| "bundle.unit-test", | |
| "bundle.ui-testing", | |
| "app-extension", | |
| "extensionkit-extension", | |
| "application.watchapp2", | |
| "application.on-demand-install-capable", | |
| "xcframework" | |
| ] | |
| }, | |
| "last-swift-update": {"anyOf": [{"$ref": "#/$defs/marketingVersion"}, {"type": "null"}]}, | |
| "last-swift-migration": {"anyOf": [{"$ref": "#/$defs/marketingVersion"}, {"type": "null"}]}, | |
| "legacy-provisioning-style": {"anyOf": [{"enum": ["automatic", "manual"]}, {"type": "null"}]}, | |
| "legacy-team-id": {"anyOf": [{"type": "string"}, {"type": "null"}]}, | |
| "test-host-target": {"anyOf": [{"$ref": "#/$defs/targetName"}, {"type": "null"}]}, | |
| "specialized-configurations": { | |
| "type": "array", | |
| "description": "Only configurations with an id or file; plain names are rejected on encode.", | |
| "items": {"$ref": "#/$defs/configuration"} | |
| }, | |
| "dependencies": {"type": "array", "items": {"$ref": "#/$defs/dependency"}}, | |
| "build-phases": {"type": "array", "items": {"$ref": "#/$defs/buildPhase"}}, | |
| "build-rules": {"type": "array", "items": {"$ref": "#/$defs/buildRule"}}, | |
| "package-product-members": {"type": "array", "items": {"$ref": "#/$defs/packageProductMember"}}, | |
| "build-settings": {"$ref": "#/$defs/buildSettings"} | |
| }, | |
| "allOf": [ | |
| { | |
| "if": {"required": ["product-type"]}, | |
| "then": true, | |
| "else": { | |
| "properties": { | |
| "full-product-type": { | |
| "anyOf": [{"type": "string", "description": "Product type identifier outside com.apple.product-type.*"}, {"type": "null"}] | |
| } | |
| } | |
| } | |
| }, | |
| { | |
| "if": {"required": ["kind"], "properties": {"kind": {"const": "external-build-system"}}}, | |
| "then": { | |
| "required": ["build-tool-path"], | |
| "properties": { | |
| "build-tool-path": {"type": "string"}, | |
| "build-tool-arguments": {"type": "string", "default": ""}, | |
| "build-tool-working-directory": {"anyOf": [{"type": "string"}, {"type": "null"}]}, | |
| "pass-build-settings-in-environment": {"type": "boolean", "default": true} | |
| } | |
| } | |
| } | |
| ] | |
| }, | |
| "packageProductReference": { | |
| "package": {"type": "string", "description": "Package name; omitted for local packages."}, | |
| "id": {"$ref": "#/$defs/objectID"}, | |
| "product-name": {"type": "string"}, | |
| "product-type": {"enum": ["other", "build-tool-plugin"], "default": "other"} | |
| }, | |
| "dependency": { | |
| "oneOf": [ | |
| {"$ref": "#/$defs/targetName", "description": "Local target by name."}, | |
| { | |
| "type": "object", | |
| "required": ["target"], | |
| "properties": { | |
| "kind": {"const": "localTarget", "default": "localTarget"}, | |
| "target": {"$ref": "#/$defs/targetName"}, | |
| "platforms": {"$ref": "#/$defs/platforms"} | |
| } | |
| }, | |
| { | |
| "type": "object", | |
| "required": ["kind", "project", "target", "target-id"], | |
| "properties": { | |
| "kind": {"const": "remoteTarget"}, | |
| "project": {"$ref": "#/$defs/groupTreeReference"}, | |
| "target": {"type": "string"}, | |
| "target-id": {"$ref": "#/$defs/objectID"}, | |
| "platforms": {"$ref": "#/$defs/platforms"} | |
| } | |
| }, | |
| { | |
| "type": "object", | |
| "required": ["kind", "product-name"], | |
| "properties": { | |
| "kind": {"const": "package"}, | |
| "package": {"anyOf": [{"$ref": "#/$defs/packageProductReference/package"}, {"type": "null"}]}, | |
| "id": {"anyOf": [{"$ref": "#/$defs/packageProductReference/id"}, {"type": "null"}]}, | |
| "product-name": {"$ref": "#/$defs/packageProductReference/product-name"}, | |
| "product-type": {"$ref": "#/$defs/packageProductReference/product-type"}, | |
| "platforms": {"$ref": "#/$defs/platforms"} | |
| } | |
| } | |
| ] | |
| }, | |
| "packageProductMember": { | |
| "type": "object", | |
| "required": ["product-name", "build-phase"], | |
| "properties": { | |
| "package": {"anyOf": [{"$ref": "#/$defs/packageProductReference/package"}, {"type": "null"}]}, | |
| "id": {"anyOf": [{"$ref": "#/$defs/packageProductReference/id"}, {"type": "null"}]}, | |
| "product-name": {"$ref": "#/$defs/packageProductReference/product-name"}, | |
| "product-type": {"$ref": "#/$defs/packageProductReference/product-type"}, | |
| "build-phase": {"$ref": "#/$defs/targetBuildFile"} | |
| } | |
| }, | |
| "simplePhaseKind": {"enum": ["compile-sources", "frameworks", "resources", "headers", "rez", "java-archive"]}, | |
| "buildPhase": { | |
| "oneOf": [ | |
| {"$ref": "#/$defs/simplePhaseKind"}, | |
| { | |
| "type": "object", | |
| "required": ["kind"], | |
| "properties": { | |
| "kind": {"$ref": "#/$defs/simplePhaseKind"}, | |
| "id": {"anyOf": [{"$ref": "#/$defs/objectID"}, {"type": "null"}]}, | |
| "name": {"anyOf": [{"type": "string"}, {"type": "null"}]} | |
| } | |
| }, | |
| { | |
| "type": "object", | |
| "required": ["kind"], | |
| "properties": { | |
| "kind": {"const": "copy"}, | |
| "id": {"anyOf": [{"$ref": "#/$defs/objectID"}, {"type": "null"}]}, | |
| "name": {"anyOf": [{"type": "string"}, {"type": "null"}]}, | |
| "bundle-base-path": { | |
| "anyOf": [ | |
| { | |
| "enum": [ | |
| "root", | |
| "build-products-directory", | |
| "contents-directory", | |
| "executables-directory", | |
| "resources-directory", | |
| "frameworks-directory", | |
| "shared-frameworks-directory", | |
| "shared-support-directory", | |
| "plugins-directory", | |
| "headers-directory", | |
| "private-headers-directory", | |
| "java-directory", | |
| "apple-scripts-directory", | |
| "info-plist-file", | |
| "package-info-file", | |
| "main-executable-file", | |
| "shallow-main-executable-file" | |
| ], | |
| "description": "Omitted = absolute path in relative-path." | |
| }, | |
| {"type": "null"} | |
| ] | |
| }, | |
| "relative-path": {"type": "string", "default": ""}, | |
| "scope": {"$ref": "#/$defs/phaseScope"} | |
| } | |
| }, | |
| { | |
| "type": "object", | |
| "required": ["kind", "shell", "script"], | |
| "properties": { | |
| "kind": {"const": "script"}, | |
| "id": {"anyOf": [{"$ref": "#/$defs/objectID"}, {"type": "null"}]}, | |
| "name": {"anyOf": [{"type": "string"}, {"type": "null"}]}, | |
| "log-environment-variables": {"type": "boolean", "default": false}, | |
| "input-paths": {"$ref": "#/$defs/stringList"}, | |
| "input-file-list-paths": {"$ref": "#/$defs/stringList"}, | |
| "output-paths": {"$ref": "#/$defs/stringList"}, | |
| "output-file-list-paths": {"$ref": "#/$defs/stringList"}, | |
| "dependency-file": {"anyOf": [{"type": "string"}, {"type": "null"}]}, | |
| "run-on-every-build": {"type": "boolean", "default": false}, | |
| "scope": {"$ref": "#/$defs/phaseScope"}, | |
| "shell": {"type": "string", "examples": ["/bin/sh"]}, | |
| "script": {"$ref": "#/$defs/multilineText"} | |
| } | |
| }, | |
| { | |
| "type": "object", | |
| "required": ["kind"], | |
| "properties": { | |
| "kind": {"const": "apple-script"}, | |
| "id": {"anyOf": [{"$ref": "#/$defs/objectID"}, {"type": "null"}]}, | |
| "name": {"anyOf": [{"type": "string"}, {"type": "null"}]}, | |
| "is-shared-context": {"type": "boolean", "default": false}, | |
| "context-name": {"type": "string", "default": ""} | |
| } | |
| } | |
| ] | |
| }, | |
| "phaseScope": {"enum": ["always", "install"], "default": "always", "description": "install = run only when installing."}, | |
| "buildRule": { | |
| "type": "object", | |
| "required": ["processor"], | |
| "properties": { | |
| "name": {"anyOf": [{"type": "string"}, {"type": "null"}]}, | |
| "id": {"anyOf": [{"$ref": "#/$defs/objectID"}, {"type": "null"}]}, | |
| "processor": {"type": "string", "examples": ["com.apple.compilers.proxy.script"]}, | |
| "file-type": {"anyOf": [{"type": "string"}, {"type": "null"}]}, | |
| "file-patterns": {"anyOf": [{"type": "string"}, {"type": "null"}]}, | |
| "input-files": {"$ref": "#/$defs/stringList"}, | |
| "input-file-lists": {"$ref": "#/$defs/stringList"}, | |
| "output-files": {"$ref": "#/$defs/stringList"}, | |
| "output-file-lists": {"$ref": "#/$defs/stringList"}, | |
| "output-files-compiler-flags": {"$ref": "#/$defs/stringList"}, | |
| "dependency-file": {"anyOf": [{"type": "string"}, {"type": "null"}]}, | |
| "run-once-per-architecture": {"type": "boolean", "default": true}, | |
| "script": {"anyOf": [{"$ref": "#/$defs/multilineText"}, {"type": "null"}]} | |
| } | |
| }, | |
| "childNameComponent": {"oneOf": [{"type": "string", "pattern": "^(?!\\.\\.?$)[^/]*$"}, {"$ref": "#/$defs/namePathComponent/oneOf/1"}]}, | |
| "phaseKindComponent": { | |
| "oneOf": [ | |
| {"$ref": "#/$defs/phaseKind"}, | |
| {"type": "object", "required": ["name"], "properties": {"name": {"$ref": "#/$defs/phaseKind"}}} | |
| ] | |
| }, | |
| "projectBuildPhaseReferenceString": { | |
| "type": "string", | |
| "pattern": "^(id:[\\s\\S]*|(?!\\.\\.?/)[^/]*/(compile-sources|frameworks|resources|headers|rez|java-archive|apple-script|copy|script)(/(?!\\.\\.?$)[^/]*)?)$" | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment