Skip to content

Releases: tddworks/asc-cli

asc v0.1.68

14 Apr 13:39

Choose a tag to compare

Added

  • asc testflight groups create — create external or internal TestFlight beta groups (--internal flag toggles internal; --public-link-enabled / --feedback-enabled for external groups)
  • asc init review contact flags--contact-first-name, --contact-last-name, --contact-phone, --contact-email save review contact info to .asc/project.json for reuse across versions
  • ProjectConfig review contact fields — optional contactFirstName, contactLastName, contactPhone, contactEmail with hasReviewContact computed property
  • setReviewContact / updateReviewContact affordancesProjectConfig now suggests setting review contact when missing

asc v0.1.67

13 Apr 11:57

Choose a tag to compare

Bug fixes and improvements.

asc v0.1.66

09 Apr 07:14

Choose a tag to compare

Added

  • ThemeDesign domain model — composes from Gallery-native types (GalleryPalette + [Decoration]) for structured theme output. Generated by AI once, applied deterministically to all screenshots
  • ThemeDesignApplier — re-renders through GalleryHTMLRenderer.renderScreen() pipeline with overridden palette and merged decorations (no HTML patching)
  • GalleryPalette.textColor — optional explicit text color, overrides the auto-detect heuristic
  • Decoration.label() shape — text/emoji decorative elements (e.g. Decoration(shape: .label("✨"), ...))
  • DecorationAnimation — float, drift, pulse, spin, twinkle animations for decorations
  • ScreenLayout.withDecorations() — creates a copy with additional decorations
  • GalleryHTMLRenderer.renderDecorations() — renders ScreenLayout.decorations (previously dead code) using cqi units
  • buildDesignContext() on ScreenTheme — prompt method that instructs AI to return ThemeDesign JSON
  • design() on ThemeProvider/ThemeRepository — generate a ThemeDesign from AI in one call
  • --design-only / --apply-design CLI flags — batch theme workflow
  • REST endpointsPOST /app-shots/themes/design and POST /app-shots/themes/apply-design

Changed

  • GalleryHTMLRenderer refactored to Mustache templates — all HTML extracted from Swift into 7 .mustache template files using swift-mustache. The renderer only builds context dictionaries; all HTML, CSS colors (via CSS custom properties in theme-vars.mustache), and keyframe animations live in templates. Templates are pre-compiled at startup via MustacheLibrary for performance. Preview rendering is cached per template ID.
  • DecorationShape.displayCharacter — computed property on the model instead of renderer logic
  • GalleryPalette.isLight + headlineColor — theme detection and text color derivation moved from renderer to palette
  • Decoration extended — new optional fields: color, background, borderRadius, animation
  • Theme selection no longer requires auto-compose — clicking a theme applies immediately to slides with existing preview HTML via ThemeDesign (1 AI call for design, then deterministic apply to all slides)
  • Blitz plugin: design() implemented — generates ThemeDesign via compose bridge mode: "design", enabling the fast design→apply-design flow

asc v0.1.65

06 Apr 03:45

Choose a tag to compare

Changed

  • Presentable protocol — domain models own their table headers and row values; eliminates headers:/rowMapper: boilerplate from 37 list commands
  • REST controllers with DI — routes rewritten as controller structs (AppsController, CodeSigningController, etc.) with injected repo dependencies; repos created once at server startup, not per request
  • No more Command.parse([]) in REST layer — controllers call domain repos and operations directly; CLI and REST are equal thin adapters
  • AffordanceRegistry uses structured Affordance — plugin affordances now render to both CLI commands and REST _links (previously CLI-only)
  • ScreenshotTemplate domain operationsapply(content:), renderFragment(content:) as rich domain methods; ThemedPage value type for page wrapping
  • ScreenshotTemplate Codable includes previewHTML and deviceCount — REST consumers get preview data without special handling

asc v0.1.64

05 Apr 11:35

Choose a tag to compare

Added

  • REST API with HATEOASGET /api/v1 entry point plus 12 resource endpoints (apps, versions, builds, testflight, certificates, bundle-ids, devices, profiles, simulators, plugins, territories) calling domain repositories directly (in-process, no subprocess), returning JSON with _links for agent navigation
  • APIRoot model — HATEOAS entry point at GET /api/v1 listing all available top-level resources with navigable _links
  • Structured Affordance type — single source of truth for both CLI commands and REST links; models define affordances once, rendered to either format by OutputFormatter
  • APILink and AffordanceMode — domain types supporting dual-mode affordance rendering (.cli"affordances", .rest"_links")
  • RESTPathResolver — resolves CLI command + params into REST API paths using a route table covering 35+ resource types across the full domain hierarchy
  • HTML-to-PNG export--preview image option on asc app-shots templates apply and asc app-shots themes apply renders composed HTML to PNG via WebKit, with --image-output for custom output path
  • HTMLRenderer protocol@Mockable domain protocol for HTML-to-image rendering, implemented by WebKitHTMLRenderer using WKWebView snapshot

asc v0.1.63

02 Apr 10:30

Choose a tag to compare

Added

  • Plugin Marketplaceasc plugins market list and asc plugins market search --query X to browse and search plugins from tddworks/asc-registry
  • Multi-source plugin registryPluginSource protocol with GitHubPluginSource implementation; composable sources in PluginMarketRepository
  • asc plugins install --name X — download and install .plugin bundles from the marketplace
  • asc plugins uninstall --name X — remove installed plugin bundles (matches by slug or registry ID)
  • Plugins page in Command Center — web UI with Installed and Marketplace tabs, stats bar, install/uninstall with loading spinners
  • Enriched plugin manifestmanifest.json now supports description, author, repositoryURL, categories; installed plugins display the same rich info as marketplace listings
  • Centralized plugin affordance mergingAffordanceRegistry affordances merged automatically in OutputFormatter via WithPluginAffordances; domain models no longer need manual registry calls
  • Example pluginexamples/hello-plugin/ demonstrates AffordanceRegistry, server routes, and UI affordance handlers
  • Plugin registry repotddworks/asc-registry with registry.json and release assets for ASC Pro + Hello Plugin

Changed

  • Unified Plugin model — merged Plugin and MarketPlugin into a single model with isInstalled, downloadURL?, slug? fields
  • Refactored plugin system — replaced event-based script plugins with dylib .plugin bundle management
  • Removed event plugin system — deleted PluginEvent, PluginEventPayload, PluginResult, PluginRunner, PluginEventBus and all infrastructure
  • Removed event bus from commandsBuildsUpload and VersionsSubmit no longer emit plugin events
  • Apps page affordance buttons — plugin affordances (e.g. greet from Hello Plugin) render as clickable buttons via appAffordanceHandlers registry

asc v0.1.62

02 Apr 05:10

Choose a tag to compare

Added

  • asc web-server — Swift/Hummingbird HTTP+WebSocket server replacing Node.js. Single binary, zero external dependencies, HTTPS with self-signed cert
  • Plugin architecture.plugin bundles in ~/.asc/plugins/ extend the CLI with routes, commands, affordances, and UI. Dylibs built with dynamic_lookup (~300KB)
  • AffordanceRegistry — plugins extend domain model affordances at runtime (e.g. pro plugin adds stream to booted simulators)
  • Affordance-driven UI — web app renders buttons from CAEOAS affordances, not hardcoded features. Plugins register handlers via window.simAffordanceHandlers
  • Command Center Simulators page — device list with search/filter, stats cards, affordance-driven actions

asc v0.1.61

31 Mar 11:35

Choose a tag to compare

Added

  • Screenshot image URLsasc screenshots list now returns imageUrl for each screenshot, so you can view and render real App Store images directly from CLI output
  • Screenshot platform filtering — filter and browse screenshots by platform (iPhone, iPad, etc.) in the web UI
  • Simulator screenshot capture — capture and browse simulator screenshots in the web gallery
  • Simulator live streaming — stream your simulator screen in real-time via MJPEG to the browser

Changed

  • Simulator interaction feedback — improved tap ripple effect and gesture responsiveness in the streaming UI

asc v0.1.60

31 Mar 09:14

Choose a tag to compare

Added

  • asc simulators list [--booted] — list available iOS simulators with state-aware affordances
  • asc simulators boot --udid <udid> — boot a simulator
  • asc simulators shutdown --udid <udid> — shut down a simulator
  • asc simulators stream [--udid <udid>] [--port <port>] — interactive simulator streaming to the browser with device bezel frames, tap/swipe/type via AXe, gesture presets, and accessibility inspection

asc v0.1.59

30 Mar 03:06

Choose a tag to compare

Added

  • asc builds list --platform — filter builds by platform (ios, macos, tvos, visionos)
  • asc builds list --version — filter builds by marketing version (e.g. 1.0.0)
  • asc builds next-number — get the next build number for a version/platform, ideal for CI/CD automation (resolves #13)
  • Build platform field — builds now include platform from preReleaseVersion
  • Build number populatedbuildNumber field now maps from Build.attributes.version (was always nil)

Fixed

  • Global options (--pretty, --output, --timeout) now accepted by all commands — previously 10 leaf commands (builds add-beta-group, builds remove-beta-group, builds uploads delete, versions set-build, reviews responses delete, app-clip-experiences delete, app-clip-experience-localizations delete, analytics-reports delete, auth logout, auth use) rejected these flags with "Unknown option"

Changed

  • asc builds list — table output now includes Build Number and Platform columns
  • Build version semanticsversion field now holds the marketing version (from PreReleaseVersion) when available; buildNumber holds the build string
  • Builds sorted by newest first — list results default to -uploadedDate sort order