Repository navigation
Conversation
Engine (Packages/FrameGenKit, shared by the app and the tool): - XCFrameworkPipeline runs a BuildRequest and reports PipelineEvents; failure highlights come from the failing step's output only. - Projects and workspaces (CocoaPods): a sibling .xcworkspace is preferred, configurations come from the workspace's main project, missing paths are rejected up front. - Ten platforms (iOS, Mac Catalyst, macOS, tvOS, watchOS, visionOS and their simulators), detected from the scheme's SUPPORTED_PLATFORMS. - Optional XCFramework signing with a secure timestamp, before zipping. - Publishing to GitHub releases through gh, or with a shell command template (presets for GitLab, Bitbucket, S3, Artifactory); download URL templates give the binaryTarget snippet its real URL. Command-line tool: - framegen build/list/identities, embedded in FrameGen.app/Contents/Helpers and linked by the Homebrew cask; JSON output and stable exit codes. - "Copy Build Command" prints the same invocation from the app. App: - Version, signing, distribution and platform options; Publish (⌘U); notifications when a build finishes in the background. - Russian localization through String Catalogs. - Saved settings decode leniently and migrate to workspace keys. Tooling: CI runs swift test for the package; release.sh checks the embedded tool (arm64, hardened runtime, version). 174 package tests, 9 app tests.
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This implements the development backlog. The build engine moves into a local Swift package, FrameGenKit, shared by the app and a new
framegencommand-line tool, so CI runs exactly the same pipeline as the app.It also adds:
.xcworkspaceand CocoaPods support;This PR is stacked on #3 (release pipeline), which is stacked on #2 and #1. GitHub retargets it to
mainas those merge.Changes
Engine (
Packages/FrameGenKit)XCFrameworkPipeline.run(BuildRequest, onEvent:)reportsPipelineEvents. The app adapts them toBuildState; the tool prints them.ProjectLocatorprefers a sibling.xcworkspaceand rejects paths that don't exist. Workspace configurations come from its main, non-Pods project.SchemeBuildInforeadsSUPPORTED_PLATFORMS,SUPPORTS_MACCATALYST,PRODUCT_NAMEandMARKETING_VERSIONfrom-showBuildSettings -json.codesign --timestampruns before the zip, and the checksum is computed after it.SigningIdentityparsessecurity find-identity.Publisheruploads to GitHub withgh: it creates the release, or replaces the asset if the release exists. A shell command template covers other hosts, with presets for the GitLab Package Registry, Bitbucket Downloads, S3 and Artifactory.Templatefills{name},{version},{zip},{path}and{checksum}: percent-encoded in URLs, shell-quoted in commands.Command-line tool
framegen build | list | identities | help, with JSON output and exit codes 0, 1, 2 and 130.FrameGenCLIintoFrameGen.app/Contents/Helpers/framegen, with hardened runtime and signed on copy. The cask'sbinarystanza puts it onPATH.BuildArgumentsparses the options and prints them back for Product › Copy Build Command (⌥⌘C). Round-trip tests keep the two in sync.App
Localizable.xcstringsandInfoPlist.xcstrings, including plural rules.ProjectSettingsdecodes leniently, so an unknown platform or field no longer wipes every project's settings. Settings saved under an.xcodeprojpath migrate to the workspace key.Tooling
swift test --package-path Packages/FrameGenKit.release.shchecks that the embedded tool is arm64-only, uses the hardened runtime and reports the release version.docs/RELEASING.mdare updated.Testing
swift test: 174 tests pass, 133 in FrameGenKit and 41 in FrameGenCLI.xcodebuild test: 9 app tests pass, covering BuildState and saved settings.scripts/release.sh 2.1 --dry-runpasses, including the new tool checks.codesign -dvshows a timestamp, and the checksum matches the signed zip;--signname or missing arguments gives exit code 2.Not tested
codesignmessage will be visible.