Skip to content

MidgarKit 3.0.0: the Midgar portal

Choose a tag to compare

@guitaripod guitaripod released this 13 Oct 18:04
· 101 commits to master since this release

MidgarKit 3.0.0: the Midgar portal

The "More Apps" list is gone. In its place is the portal: a full-screen universe in the spirit of the original watchOS home screen. Every Midgar app is a round icon on a honeycomb you drag around, a fisheye keeps the focused app large, related apps sit closest, and the app you are in stays on the map as "you are here".

  • Entry card. MidgarEntryView (UIKit, AppKit) and MidgarEntryCard (SwiftUI) show a live miniature of the honeycomb. Put it first in Settings; tapping it opens the portal with an iris that grows out of the card.
  • Knows what you have. Installed apps get a tick and an OPEN button, apps for another platform say so and offer to send the link, and a progress ring around the Midgar emblem counts what you own. Needs the Midgar URL schemes in LSApplicationQueriesSchemes (scripts/midgar_schemes.py).
  • Fast. Core Animation layers only, a display link that runs only while something moves. 120 Hz on ProMotion iPhones (needs CADisableMinimumFrameDurationOnPhone), measured 8.4 ms mean frame time on an iPhone Air.
  • Every platform. iOS 16, iPadOS, macOS 13, tvOS 16, visionOS 1. Liquid Glass on 26.
  • Localized into 22 languages, accessible with VoiceOver and Reduce Motion.
  • Attribution. Product pages open with a campaign token (<host>-<placement>) and the provider token, and anonymous counts are kept per host, storefront and placement in D1. MidgarConfig.enableTelemetry turns the counts off.
  • Parental gates. MidgarConfig.gate lets a host with a gate guard the portal.

Upgrading from 2.x

Midgar.present(from:config:) still works. The title and accent config values are ignored. Replace the old "More Apps" row with MidgarEntryView().embed(in: cell.contentView, verticalInset: 8) (or MidgarEntryCard()), register the schemes, and add CADisableMinimumFrameDurationOnPhone. scripts/audit_hosts.py --app Some.app --bundle-id com.example.app checks a built app.