- scripts/version.sh resolves ICCERY_RELEASE_TAG / MARKETING_VERSION / CURRENT_PROJECT_VERSION from RELEASE_TAG env or `git describe`; tag builds hard-fail when the tag's X.Y.Z != project.yml MARKETING_VERSION - build number = `git rev-list --count HEAD` (Apple: macOS CFBundleVersion must monotonically increase, no per-version reset) - tag ships as a bundled ICCeryReleaseTag resource — a generated Info.plist can't carry custom keys (INFOPLIST_KEY_* allowlist, and ProcessInfoPlistFile runs after script phases); About shows "tag (marketing)", e.g. v2.0.0-pre2-grok (2.0.0) - DMG named ICCery-<tag>-<build>.dmg for tagged/described builds - CI twins: fetch-depth 0 + RELEASE_TAG env + stamped test builds
144 lines
4.7 KiB
YAML
144 lines
4.7 KiB
YAML
name: ICCery
|
|
options:
|
|
bundleIdPrefix: com.gronod
|
|
deploymentTarget:
|
|
macOS: "12.0"
|
|
groupSortPosition: top
|
|
|
|
packages:
|
|
ICCeryCore:
|
|
path: Packages/ICCeryCore
|
|
|
|
targets:
|
|
ICCery:
|
|
type: application
|
|
platform: macOS
|
|
deploymentTarget: "12.0"
|
|
sources:
|
|
- path: Sources/ICCery
|
|
- path: Resources
|
|
excludes:
|
|
- ICCery.entitlements
|
|
- ICCery.Debug.entitlements
|
|
- Argyll
|
|
- dmg-background.png
|
|
- dmg-background@2x.png
|
|
- path: Resources/Argyll
|
|
type: folder
|
|
dependencies:
|
|
- package: ICCeryCore
|
|
product: ICCeryCore
|
|
- sdk: SceneKit.framework
|
|
postBuildScripts:
|
|
- name: Copy Argyll sidecars
|
|
script: |
|
|
set -e
|
|
SRC="${SRCROOT}/Vendor/Argyll"
|
|
DEST="${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Argyll"
|
|
if [ -d "$SRC" ]; then
|
|
mkdir -p "$DEST"
|
|
rsync -a "$SRC/" "$DEST/"
|
|
else
|
|
echo "note: Vendor/Argyll absent — run scripts/fetch-argyll.sh"
|
|
fi
|
|
basedOnDependencyAnalysis: false
|
|
- name: Stamp release tag
|
|
# GENERATE_INFOPLIST_FILE writes Info.plist after script phases and
|
|
# only honours Apple's INFOPLIST_KEY_* allowlist — so the tag ships as
|
|
# a bundled resource read by ArtefactFiles.appInfo (#189).
|
|
script: |
|
|
DEST="$TARGET_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH"
|
|
mkdir -p "$DEST"
|
|
printf '%s' "${ICCERY_RELEASE_TAG:-}" > "$DEST/ICCeryReleaseTag"
|
|
basedOnDependencyAnalysis: false
|
|
settings:
|
|
base:
|
|
PRODUCT_BUNDLE_IDENTIFIER: com.gronod.iccery2
|
|
PRODUCT_NAME: ICCery
|
|
PRODUCT_BUNDLE_PACKAGE_TYPE: APPL
|
|
GENERATE_INFOPLIST_FILE: YES
|
|
INFOPLIST_KEY_CFBundleDisplayName: ICCery
|
|
INFOPLIST_KEY_LSMinimumSystemVersion: "12.0"
|
|
INFOPLIST_KEY_NSPrincipalClass: NSApplication
|
|
INFOPLIST_KEY_NSHumanReadableCopyright: "Copyright © 2026 Gronod. AGPLv3."
|
|
MARKETING_VERSION: "2.0.0"
|
|
CURRENT_PROJECT_VERSION: "1"
|
|
# Stamped by scripts/version.sh at packaging/CI time (release tag or
|
|
# `git describe` string); About shows it next to the marketing version.
|
|
# Written to the bundled ICCeryReleaseTag resource by the
|
|
# "Stamp release tag" phase — GENERATE_INFOPLIST_FILE drops custom
|
|
# INFOPLIST_KEY_* names and generates the plist after script phases.
|
|
# Tag builds hard-fail when the tag's X.Y.Z != MARKETING_VERSION above.
|
|
ICCERY_RELEASE_TAG: ""
|
|
ENABLE_HARDENED_RUNTIME: YES
|
|
CODE_SIGN_ENTITLEMENTS: Resources/ICCery.entitlements
|
|
CODE_SIGN_IDENTITY: "-"
|
|
CODE_SIGN_STYLE: Automatic
|
|
ENABLE_APP_SANDBOX: NO
|
|
ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon
|
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME: AccentColor
|
|
SWIFT_VERSION: "5.0"
|
|
OTHER_SWIFT_FLAGS: ["$(inherited)", "-strict-concurrency=minimal"]
|
|
MACOSX_DEPLOYMENT_TARGET: "12.0"
|
|
ARCHS: "$(ARCHS_STANDARD)"
|
|
# Debug builds sign ad-hoc; hardened-runtime library validation would
|
|
# reject the embedded ICCeryCore package framework (no Team ID) when
|
|
# the test host launches (run 31992, #119). DISABLE_LIBRARY_VALIDATION
|
|
# does not inject the entitlement on Xcode 14.2, so use a dedicated
|
|
# Debug entitlements file. Release keeps validation and links the
|
|
# package statically anyway.
|
|
configs:
|
|
Debug:
|
|
CODE_SIGN_ENTITLEMENTS: Resources/ICCery.Debug.entitlements
|
|
|
|
ICCeryCoreTests:
|
|
type: bundle.unit-test
|
|
platform: macOS
|
|
deploymentTarget: "12.0"
|
|
sources:
|
|
- path: Tests/ICCeryCoreTests
|
|
dependencies:
|
|
- package: ICCeryCore
|
|
product: ICCeryCore
|
|
- target: ICCery
|
|
settings:
|
|
base:
|
|
BUNDLE_LOADER: "$(TEST_HOST)"
|
|
TEST_HOST: "$(BUILT_PRODUCTS_DIR)/ICCery.app/Contents/MacOS/ICCery"
|
|
GENERATE_INFOPLIST_FILE: YES
|
|
CODE_SIGN_IDENTITY: "-"
|
|
SWIFT_VERSION: "5.0"
|
|
MACOSX_DEPLOYMENT_TARGET: "12.0"
|
|
|
|
ICCeryUITests:
|
|
type: bundle.ui-testing
|
|
platform: macOS
|
|
deploymentTarget: "12.0"
|
|
sources:
|
|
- path: Tests/ICCeryUITests
|
|
dependencies:
|
|
- target: ICCery
|
|
settings:
|
|
base:
|
|
TEST_TARGET_NAME: ICCery
|
|
GENERATE_INFOPLIST_FILE: YES
|
|
CODE_SIGN_IDENTITY: "-"
|
|
SWIFT_VERSION: "5.0"
|
|
MACOSX_DEPLOYMENT_TARGET: "12.0"
|
|
|
|
schemes:
|
|
ICCery:
|
|
build:
|
|
targets:
|
|
ICCery: all
|
|
ICCeryCoreTests: [test]
|
|
ICCeryUITests: [test]
|
|
run:
|
|
config: Debug
|
|
test:
|
|
config: Debug
|
|
gatherCoverageData: false
|
|
targets:
|
|
- ICCeryCoreTests
|
|
- ICCeryUITests
|