• Stars
    star
    179
  • Rank 214,039 (Top 5 %)
  • Language
    Swift
  • License
    MIT License
  • Created almost 3 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

📍async/await CoreLocation

AsyncLocationKit

Swift Package Manager Swift Platforms

Wrapper for Apple CoreLocation framework with new Concurrency Model. No more delegate pattern or completion blocks.

Install


SPM
dependencies: [
    .package(url: "https://github.com/AsyncSwift/AsyncLocationKit.git", .upToNextMinor(from: "1.6.4"))
]

Cocoapods

pod 'AsyncLocationKit', :git => 'https://github.com/AsyncSwift/AsyncLocationKit.git', :tag => '1.6.4'

⚠️ Initialize AsyncLocationManager only synchronously on MainThread

import AsyncLocationKit

let asyncLocationManager = AsyncLocationManager(desiredAccuracy: .bestAccuracy)

let permission = await self.asyncLocationManager.requestAuthorizationWhenInUse() //returns CLAuthorizationStatus

You can use all methods from Apple CLLocationManager.

let coordinate = try await asyncLocationManager.requestLocation() //Request user location once

Start monitoring update of user location with AsyncStream.

for await locationUpdateEvent in await asyncLocationManager.startUpdatingLocation() {
    switch locationUpdateEvent {
    case .didUpdateLocations(let locations):
        // do something
    case .didFailWith(let error):
        // do something
    case .didPaused, .didResume: 
        break
    }
}

If Task was cancelled, Stream finished automaticaly.