ChangelogParserfor parsing Keep a Changelog format markdown and filtering entries between versions.ChangelogParser.entriesSince(build:upTo:from:)— filter changelog entries by build number range, extracted from+Nsemver metadata in entry version strings; handles RC-to-RC upgrades where the marketing version doesn't change.Environment.lastLaunchedVersionexposed publicly for version upgrade detection.Environment.currentBuild— the current app build number read fromCFBundleVersionat launch.Environment.lastLaunchedBuild— the build number of the previous run, persisted inUserDefaults; used byChangelogPresenterfor What's New detection.
AppAcknowledgements: replacedcustomAcknowledgements: String?withspecialThanks: String?anddisclaimer: String?, each rendered as its own labelled section.
ChangelogPresenter.whatsNewEntries()now compares build numbers (currentBuildvslastLaunchedBuild) instead of marketing version strings; RC builds with different build numbers correctly trigger the What's New display even when the marketing version hasn't changed.WhatsNewView: fixed macOS build error — replaced unavailableToolbarItem(placement: .topBarTrailing)with.automaticand guarded.navigationBarTitleDisplayModebehind#if !os(macOS).- Sentry adapter for CrashReporter and BugReporter protocols with user feedback form.
- OSLog adapter for Logger protocol using
os.LoggerandOSLogStore. CrashReporterprotocol:supportsLogsandsupportsBreadcrumbscapability flags.CrashReporterprotocol:recordBreadcrumb(message:category:level:)for contextual breadcrumb trail.- OSLog adapter forwards logs to crash reporter preferring structured logs over breadcrumbs.
- Sentry adapter attaches app logs to user feedback submissions.
- Split PippinAdapters into individual SPM library targets for selective linking (e.g.
PippinAdapters-Sentry,PippinAdapters-OSLog). - A launch argument to help signal forcing dark mode.
- Removed
DefaultEnvironment.swiftconvenience initializer (referenced adapters across multiple targets).
- InfoViewController: fixed rendering corruption when company link has no image (nil image created zero-size
NSTextAttachment). - LaunchArguments that resolved to different string values due to bundle names when linked statically.
- Migrated from CocoaPods to Swift Package Manager
- Replaced PippinLibrary dependency with swift-armcknight (SwiftArmcknight + SwiftArmcknightUIKit)
- All UIKit-dependent code gated behind
#if canImport(UIKit)for cross-platform compilation - Protocols (
CrashReporter,Logger,Model,Locator) conditionally inheritDebuggableonly on iOS Environmentproperties (alerter,activityIndicator,bugReporter,fonts,colors,debugging,touchVisualizer) only available on iOS- iOS-only dependencies (FLEX, JGProgressHUD, SwiftMessages) are platform-conditional
- Removed adapters from build: COSTouchVisualizer, PinpointKit, KSCrash (API incompatible with 2.x)
- Removed podspecs