Releases: transistorsoft/native-background-geolocation
Releases · transistorsoft/native-background-geolocation
4.0.32
4.0.31
TSLocationManager 4.0.31
4.0.30
TSLocationManager 4.0.30
4.0.29
TSLocationManager 4.0.29
4.0.28
TSLocationManager 4.0.28
4.0.27
TSLocationManager 4.0.27
4.0.26
TSLocationManager 4.0.26
4.0.25
TSLocationManager 4.0.25
4.0.24
- Don't show location authorization nag-dialog while !config.enabled
4.0.23
- Hardcode static URLs and license in podspec template
Remove unnecessary ENV-based templating for homepage, documentation,
social media URLs, and license fields — these never change between
releases. - Fix requestPermission() 30s timeout when user declines Always upgrade
The upgrade-decline detection in applicationDidBecomeActive was gated
behind a config.enabled check, so calling requestPermission() before
ready() (config not enabled) caused the pending request to never resolve.
Move in-flight authorization request lifecycle (Ask Next Time reset and
upgrade-decline detection) above the config.enabled/automaticPromptEnabled
guards so pending requests always complete regardless of tracking state. - Add transistorAuthorizationToken param to ready()
BGGeo.ready() now accepts an optional TransistorToken that auto-configures
http.url and authorization (strategy, tokens, refreshUrl, refreshPayload,
expires). The token rewrite always applies regardless of reset flag, since
tokens may refresh between launches.
DemoApp updated to use the new param, removing manual auth setup from
the config closure.
Doc test generator updated to handle bare ready() → ready { _ in }
conversion for the new required-closure signature. - Logger.log() accepts LogLevel enum instead of raw String
The public log() method now takes a LogLevel enum value, preventing
typos in level strings. Convenience methods (debug, info, warn, error,
notice) still delegate directly to the ObjC layer via string tags.
Added LogLevel.tag computed property to map enum cases to the ObjC
string constants expected by TSLocationManager.log:message:. - Logger.log() accepts LogLevel enum instead of raw String
The public log() method now takes a LogLevel enum value, preventing
typos in level strings. Convenience methods (debug, info, warn, error,
notice) still delegate directly to the ObjC layer via string tags.
Added LogLevel.tag computed property to map enum cases to the ObjC
string constants expected by TSLocationManager.log:message:. - Add convenience logging methods to Logger (debug, info, warn, error, notice)
Thin wrappers over log(_:message:) matching the TS and Kotlin SDKs,
so Swift developers can write bgGeo.logger.debug("msg") instead of
bgGeo.logger.log("debug", message: "msg"). - Gitignore auto-generated DocsExamplesCompileTest.swift
This file is regenerated by scripts/generate_docs_compile_test_swift.py
from docs-db YAML files and should not be tracked. - Add ready(reset:configure:), type-safe enums, and event improvements
SwiftInterface API improvements:- BGGeo.ready(reset:configure:): config closure is now required (no bare
ready()). reset=true (default) applies config every launch; reset=false
applies only on first install, using persisted config on subsequent boots. - HttpConfig.method: String → HttpMethod enum (.post, .put, .patch)
- GeolocationConfig.locationAuthorizationRequest: String →
LocationAuthorizationRequest enum (.always, .whenInUse, .any) - PersistenceConfig.locationsOrderDirection: String →
LocationsOrderDirection enum (.ascending, .descending) - ScheduleEvent: add typed enabled/trackingMode properties
- AuthorizationEvent: add isSuccess computed property
- HeartbeatEvent: add typed locationEvent property
DemoApp updated to use ready(reset: false) { } pattern, replacing
manual isFirstBoot guard.
Doc compile test generator updated with Android-only detection and
expanded to 110 test methods.
- BGGeo.ready(reset:configure:): config closure is now required (no bare
- Add pure-Swift Geofence API, removeListeners(), and docs compile verification
- Geofence struct: add public initializers for circle and polygon geofences
so developers never need to touch TSGeofence.h directly. GeofenceManager.add()
and addAll() now accept Geofence instead of TSGeofence. - BGGeo.removeListeners(): new method to bulk-remove all event listeners,
delegates to TSEventManager.removeListeners. - generate_docs_compile_test_swift.py: extracts swift: blocks from docs-db
YAML files and generates DocsExamplesCompileTest.swift for compile verification. - DemoApp updated to use pure-Swift Geofence API.
- Geofence struct: add public initializers for circle and polygon geofences
- Add SwiftInterface: pure Swift API for SwiftUI developers
Introduces a thin Swift proxy layer (BGGeo) wrapping the ObjC TSLocationManager
singleton with idiomatic Swift patterns: async/await, closure-based event listeners
with auto-cleanup EventSubscription tokens, typed config sub-modules, and Swift
structs for all event types.- 27 new Swift files in SwiftInterface/ (Config/, Events/, plus module proxies)
- Token-based event listener lifecycle (TSEventManager returns UUID tokens)
- ObjC onX methods now return NSString* token (backwards-compatible)
- Sub-objects: config, logger, store, geofences, authorization, sensors, app
- TransistorAuthorizationService for demo server auth
- DemoApp2 fully migrated to new Swift API
- Removed old SwiftOverlay/TSLocationEvent+Swift.swift
- Updated CLAUDE.md with SwiftInterface sync instructions
- Rename '## Unreleased' to versioned heading at publish time
Updates both the private and public CHANGELOG.md, replacing
'## Unreleased' with '## X.Y.Z — YYYY-MM-DD' before copying
to the public repo. - Add pod install to setup script
- Add setup script and Install section to README
- Add post-commit hook to auto-update CHANGELOG.md
Appends commit messages under an "## Unreleased" section (created if
missing). Skips merge commits, strips Co-Authored-By lines, indents
multi-line bodies. Amends the commit to include the changelog update.
Set core.hooksPath with: git config core.hooksPath scripts/hooks - Add JSON POST body support to authorization token refresh. Port Android SDK behavior: when refreshHeaders contains "Content-Type: application/json", serialize refreshPayload as a JSON body instead of form-encoded. Unrecognized content types fall back to form-encoded for backward compatibility.