🛰 CoreLocation Made Easy - Efficient & Easy Location Tracker, IP Location, Gecoder, Geofence, Autocomplete, Beacon Ranging, Broadcaster and Visits Monitoring

Overview

SwiftLocation

Location Manager Made Easy

SwiftLocation is a lightweight Swift Library that provides an easy way to work with location-related functionalities. No more pain with delegates or callbacks but a simple request based architecture with multiple subscriptions and automatic tuning of the core location manager's settings.

Feature Description
🛰 Location via GPS Monitor single, continuous or significant location updates with fully configurable APIs.
👩‍💻 Location via IP Approximate location data without user authorization.
IPApiIPDataIPGeolocationIPInfoIPifyIPStack.
🛴 Geofencing Supports monitoring of circular regions and custom polygons.
🌍 Gecoder
Reverse Geocoder
Get address from coordinates and viceversa.
AppleGoogleHereMapBoxOpenStreet.
🏠 Autocomplete Suggestions & details for addresses, places or POIs.
AppleGoogleHere.
📍 Beacon Beacons ranging, monitoring.
📡 Beacon Broadcaster Broadcast beacon from the app (only foreground).
🏞 Visits Significant visited location monitoring.

🤾 Play Now!

SwiftLocation comes with a playground application you can use to learn how to use the lib or just play with each supported feature!

drawing

❤️ Your Support

Hi fellow developer!
You know, maintaining and developing tools consumes resources and time. While I enjoy making them your support is fundamental to allow me to continue its development.

If you are using SwiftLocation or any other of my creations please consider the following options:

Introduction

It's pretty easy to use; all the features are accessible through the SwiftLocation object.

Each feature creates and adds to a pool manager a new request (conforms to RequestProtocol protocol) object you can use to get the results or fine-tuning its configuration.

Result is a Result<Data, LocationError> object (where Data is a struct/class which depends on the request).
You can manage as you want but SwiftLocation also exposes two optional properties:

  • .error to get the error produced (LocationError?)
  • .data to get the result produced (<RequestInstance>.ProducedData?)

All requests are retained automatically so you don't need to keep them alive until they're running.

You can add one or more subscriptions to get the produced data by calling then() operator on request (optionally you can specify the DispatchQueue where result is returned, by default is .main).

To cancel/stop a running request (ie. a continuous location update) call cancelRequest() on it: it will remove the request from the queue and adjust core location settings based upon remaining requests if needed.

To temporarily pause a request while still in queue use .isEnabled property.

Discover Features

Getting user location via GPS

Just one line of code:

SwiftLocation.gpsLocation().then {
    print("Location is \($0.location)")
}

Remember: Before using SwiftLocation you should set the appropriate keys in your Info.plist (NSLocationAlwaysAndWhenInUseUsageDescription or NSLocationWhenInUseUsageDescription and NSLocationTemporaryUsageDescriptionDictionary if you are using reduced location in iOS 14+).

If you need more customization you can fine-tune your request by configuring each of the available parameters. This is a more complex example:

SwiftLocation.gpsLocationWith {
    // configure everything about your request
    $0.subscription = .continous // continous updated until you stop it
    $0.accuracy = .house 
    $0.minDistance = 300 // updated every 300mts or more
    $0.minInterval = 30 // updated each 30 seconds or more
    $0.activityType = .automotiveNavigation
    $0.timeout = .delayed(5) // 5 seconds of timeout after auth granted
}.then { result in // you can attach one or more subscriptions via `then`.
    switch result {
    case .success(let newData):
        print("New location: \(newData)")
    case .failure(let error):
        print("An error has occurred: \(error.localizedDescription)")
    }
}

.significant subscription requires always authorization and works even in the background.

If the app is not running and it's resumed by the system GPS request is restored for you by SwiftLocation, so you can bind your own subscriptions.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // The best place to resume your requests is the app launch.
    SwiftLocation.onRestoreGPS = { requests in
        for request in requests {
            request.then {
                // do anything or bind to your own classes
            }
        }
    }
    ...
}

Getting the last known location

SwiftLocation store automatically the last known location, even between re-launches of the app:

let location = SwiftLocation.lastKnownGPSLocation

Geocoder & Reverse Geocoder

Geocoding is the process of converting addresses (like a street address) into geographic coordinates which you can use to place markers on a map, or position the map.
Reverse geocoding is the process of back (reverse) coding of a point location to a readable address or place name.

Let me show how you can use Apple service to get the coordinates of a famous place:

let service = Geocoder.Apple(address: "1 infinite loop cupertino")
SwiftLocation.geocodeWith(service).then { result in
    // You will get an array of suggested [GeoLocation] objects with data and coordinates
    print(result.data)
}

Reverse geocoding still straighforward. This is an example using google:

let service = Geocoder.Google(lat: 37.331656, lng: -122.0301426, APIKey: "<your api key>")
SwiftLocation.geocodeWith(service).then { result in
    // Different services, same expected output [GeoLocation]
    print(result.data)
}

As you noticed there are no differences in expected output; all services return the same output, an array of [GeoLocation] objects which contain the data fetched (please refer to the doc for further details).

As you see some services require API Keys; it's really boring passing the key to each request uh?
If you plan to use the same key for all services of a family consider using the shared credentials store:

SwiftLocation.credentials[.google] = "<google api key>" // setup the key

// you can now omit the APIKey parameter in your google requests!
// SwiftLocation will automatically read the shared credentials value!
let service = Geocoder.Google(address: "Via Roma 1, Milano")
SwiftLocation.geocodeWith(service).then { result in
    // ...
}

Each service has its unique settings you can configure (see the complete doc here).
Once you created the service object you can configure its own settings before sending it to the requests pool:

let service = Geocoder.MapBox(address: "Trafalgar Square")
// MapBox service has lots of configuration available to get better results
service.locale = "en"
service.limit = 1
service.boundingBox = Geocoder.MapBox.BoundingBox(minLat: 40.7661, minLon: -73.9876,
                                                  maxLat: 40.8002, maxLon: -73.9397)
service.resultTypes = [.place]
SwiftLocation.geocodeWith(service).then { result in
    print(result.data) // different services, same expected output [GeoLocation]
}

It supports the following services (some of these require API keys) under the Geocoder umbrella (check the documentation for more infos):

Get Location By IP Address

Sometimes you don't need a precise location and don't want to bother your user authorizing the app to get it.
In these cases, you can use one of the six services available to get an approximate location (plus some other location data) just by using location by IP service.

The following example shows how to get an IPLocation.Data object with all the info retrieved from the current device's IP address (you can also specify other IP addresses in init of the service).

SwiftLocation.ipLocationWith(IPLocation.IPData()).then { result in
    print(result.location.coordinates)
    // get the city and other data from .info dictionary
    print(result.location.info[.city])
    print(result.location.info[.countryCode])
}

It supports the following services (some of these require API keys). Check the single class to read custom configurations:

Autocomplete Addresses

You can use autocomplete to give your applications the type-ahead-search behavior of the Maps apps search field. The autocomplete service can match on full words and substrings, resolving place names, addresses, and plus codes (1). Applications can therefore send queries as the user types, to provide on-the-fly place predictions.

You can also get the detailed info about predictions, ie when the user tap on one of the suggestions and you need to get the coordinates and other data (2).

Services are available under the Autocomplete umbrella and supports.
You can create two kinds of autocomplete:

  • (1) search for full words and substrings (.init(partialMatches: ...)
  • (2) place details (.init(detailsFor: ...))
let australia = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: -33.269290, longitude: 150.479955), latitudinalMeters: 20000, longitudinalMeters: 20000)

let service = Autocomplete.Apple(partialMatches: "Mart", region: australia)
SwiftLocation.autocompleteWith(service).then { result in
    // You get an array of `PartialAddressMatch`
    // From this array you can obtain infos with (2).
    //
    // Martial Arts Search Nearby, 
    // Mart Search Nearby, Martinsville,
    // NSW, Australia
    // ...
    let partialMatches = result.data.map { $0.partialAddress }
}

Now suppose you want to get more info from the first result Martial Arts Search Nearby.
Just call the service with it:

let detailService = Autocomplete.Apple(detailsFor: partialMatches.first)
SwiftLocation.autocompleteWith(detailService).then { result in
    // Extract the array of found `GeoLocation` places
    let places = result.data?.map({ $0.place })
    let firstResult: GeoLocation = places?.first
    print(firstResult.coordinates) // coordinates
    // .info contains additional fetched information depending from used service
    print(firstResult.info[.formattedAddress])
    print(firstResult.info[.subAdministrativeArea]) 
    // ...
}

There is no difference if you are using Autocomplete.Google(partialMatches: "...") about expected result types, but info dictionary may contain more or less data.
Of course different services exposes different settings:

let service = Autocomplete.Google(partialMatches: "Mart")
// See the doc for all settings each service exposes!
service.placeTypes = [.cities, .address]
service.radius = 500
service.strictBounds = true
SwiftLocation.autocompleteWith(detailService).then { ... }

It supports the the following Geofencing services available under Autocomplete umbrella (check the documentation for more infos):

Geofencing Regions

Geofence is a virtual perimeter for a real-world geographic area.
An example of geofencing usage involves a location-aware device of a location-based service (LBS) user entering or exiting a geo-fence.

With SwiftLocation you can monitor:

  • circular region
  • custom polygon region (actually it does not work correctly so avoid it)
let options = GeofencingOptions(circleWithCenter: CLLocationCoordinate2D(latitude: 3, longitude: 2), radius: 100)
SwiftLocation.geofenceWith(options).then { result in
    guard let event = result.data else { return }

    switch event {
    case .didEnteredRegion(let r):
        print("Triggered region entering! \(r)")
    case .didExitedRegion(let r):
        print("Triggered region exiting! \(r)")
    default:
        break
    }
}

To monitor a custom polygon just create the appropriate GeofencingOptions to pass let options GeofencingOptions(polygon: <MKPolygon>).

Geofencing also works in background and app killed. You can restore saved session and bind to your own trigger event directly at startup:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // The best place to resume your requests when app is killed
    SwiftLocation.onRestoreGeofences = { requests in // do anything you want }
}

Significant Visits Monitoring

Sometimes you may need to monitor updates only when the user’s movements are noteworthy. The visits service is the most power-efficient way of gathering location data.
Each update includes both the location and the amount of time spent at that location. This service isn’t intended for navigation or other real-time activities (
Read More).

// You can also specify an activity To help the system determine how to manage the battery use.
SwiftLocation.visits(activityType: .fitness).then { result in
    print("A new visits to \(result.data)")
}

This also works in the background when an app is killed, so you can restore it in your app launch if you need to trigger some events.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // The best place to resume your requests when app is killed
    SwiftLocation.onRestoreVisits = { requests in // do anything you want }
}

Beacon Monitoring

An iBeacon is a device that emits a Bluetooth signal that can be detected by your devices. You decide what actions to take based on the proximity of nearby beacons (Read More).

let beacon = BeaconRequest.Beacon(uuid: <UUID>, minor: <MinorID>, major: <MajorID>)
SwiftLocation.beacon(beacon).then { result in
    guard let event = result.data else { return }
    switch event {
    case .rangingBeacons(let b):
        print("Ranged beacon: \(b)")
    case .didEnterRegion(let r):
        print("Did enter in region: \(r)")
    case .didExitRegion(let r):
        print("Did exit in \(r)")
    }
}

You can of course monitor more than one beacon or a family UUID:

SwiftLocation.beacon(BeaconRequest(UUIDs: [<UUID_Family1>,<UUID_Family2>])).then { ... }

Beacon Broadcaster

Sometimes you may need to broadcast your app as a beacon. SwiftLocation allows you to do it (however due to iOS limitations it will work only in the foreground with the app open).

let beaconToSimulate = BroadcastedBeacon(UUID: <UUID>, 
                                        majorID: <MajorID>, minorID: <MinorID>, 
                                        identifier: <Identifier>)
SwiftLocation.broadcastAsBeacon(beaconToSimulate)

SwiftLocation.stopBroadcasting() allows you to stop broadcasting, while SwiftLocation.isBeaconBroadcastActive allows you to check if broadcasting is active or not.

User Authorization Request

Typically you don't need to manage authorization manually because SwiftLocation will handle it based upon the request you add to the pool manager and your Info.plist configuration (you can force preferred authorization mode by setting SwiftLocation.preferredAuthorizationMode = <AuthorizationMode>; by default is .plist).

However if you need to request authorization manually you can still use:

SwiftLocation.requestAuthorization(.onlyInUse) { newStatus in
    print("New status \(newStatus.description)")
}

To get the current authorization status use
let currentStatus = SwiftLocation.authorizationStatus

Background Location Updates

In order to get continous updates of location in background you need to specify the appropriate Background Capabilities > Location Updates in "Signining & Capabilities" of your Xcode project.
Moreover you should set to the SwiftLocation.allowsBackgroundLocationUpdates = true a

Optionally you can also set SwiftLocation.pausesLocationUpdatesAutomatically = true allowing the location manager to pause updates can improve battery life on the target device without sacrificing location data. When this property is set to true, the location manager pauses updates (and powers down the appropriate hardware) at times when the location data is unlikely to change. For example, if the user stops for food while using a navigation app, the location manager might pause updates for a period of time. You can help the determination of when to pause location updates by assigning a value to the activityType property.

Finally if your app is stopped all your requests are saved automatically and can be restored in early stage of the application's launch like in this example:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // The best place to resume your requests is the app launch.
    SwiftLocation.onRestoreGPS = { requests in ... }
    SwiftLocation.onRestoreVisits = { requests in ... }
    SwiftLocation.onRestoreGeofences = { requests in ... }
    ...
}

If you want to disable automatic requests save you can set the SwiftLocation.automaticRequestSave = false.

Precise & Reduced Location in iOS 14+

Location data are very sensitive; since iOS 14 Apple introduced a further layer of privacy to Core Location Manager: users can choose whether to give precise or approximate location access.
Since 5.0.1 SwiftLocation supports this options and it's transparent to old iOS versions.

You can specify the precise option you can use when creating a new request using the .precise property of GPSLocationOptions object. If you don't specify it you will get the location precision user set at the first authorization request.
If, at certain point, you need to get the precise location you can explicitly request one-time permission setting .precise = .fullAccuracy.
It's up to SwiftLocation request further authorization to the user in case he set reduced accuracy; you don't need anything!

SwiftLocation.gpsLocationWith {
  $0.precise = .fullAccuracy
  // set any other filter options
}.then { result in
  print("Location found is \(result.location) and it's \(SwiftLocation.preciseAccuracy.description)")
}

You can use SwiftLocation.preciseAccuracy to get the current precise authorization status and act accordinly your business logic.

This option is available since iOS14+. Older versions always uses fullAccuracy and the parameter is ignored.****

Installation

SwiftLocation is compatible with Swift 5.x+ under iOS (11+) and macOS platforms.

You can install it via CocoaPods:

use_frameworks!
pod 'SwiftLocation/Core'
pod 'SwiftLocation/BeaconBroadcaster' ## If you want to use Beacon Broadcaster

or SPM in your Package.swift:

import PackageDescription

  let package = Package(name: "YourPackage",
    dependencies: [
      .Package(url: "https://github.com/malcommac/SwiftLocation.git", majorVersion: 0),
    ]
  )

You must then use import SwiftLocation to use the core features.
In order to use Bluetooth services you can import import SwiftLocationBeaconBroadcaster.

Consider ❤️ support the development of this library!

Contributing

  • If you need help or you'd like to ask a general question, open an issue.
  • If you found a bug, open an issue.
  • If you have a feature request, open an issue.
  • If you want to contribute, submit a pull request.

Copyright & Acknowledgements

SwiftLocation is currently owned and maintained by Daniele Margutti.
You can follow me on Twitter @danielemargutti.
My web site is https://www.danielemargutti.com

This software is licensed under MIT License.

Follow me on:

Comments
  • iTunes Connect rejects builds because NSBluetoothPeripheralUsageDescription is required

    iTunes Connect rejects builds because NSBluetoothPeripheralUsageDescription is required

    I just submitted a build to iTunes Connect that was rejected. The email I received stated:

    This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSBluetoothPeripheralUsageDescription key with a string value explaining to the user how the app uses this data.

    I looked through all my source including Pods. The only project that has any mention of (Core) Bluetooth is SwiftLocation in BeaconsManager.swift. Need a workaround to get builds submitted again. For now, I manually removed all mentions in my Pods.

    bug enhancement 
    opened by robbiet480 13
  • allowsBackgroundLocationUpdates

    allowsBackgroundLocationUpdates

    Can you please help me to get location when application in background mode. I am having Google Map integrated in my app and confused in getting location in background.

    Thanks in advance

    opened by swabzz 13
  • monitorRegion onEnter not called

    monitorRegion onEnter not called

    Great project. It is my favourite Core Location wrapper!

    In my project, monitorRegion onEnter is not getting called.

    var region = CLCircularRegion(center: regionCoordinates, radius: CLLocationDistance(50), identifier: "identifier_region") let requestID = SwiftLocation.shared.monitorRegion(region, onEnter: { (region) -> Void in // events called on enter }) { (region) -> Void in // event called on exit }

    Even though locationManager(manager: CLLocationManager, didEnterRegion region: CLRegion) is called in SwiftLocation. What have I missed?

    Thanks Martin

    opened by MartinW 10
  • Getting user location doesn't seems to work on iOS9

    Getting user location doesn't seems to work on iOS9

    Hello,

    When I try to retrieve user location on iOS9, the request is added to the queue but then nothing happens. You can reproduce this in the simulator with the sample project by using the first commented case :

    let x = Location.getLocation(accuracy: .city, frequency: .continuous, success: { (_, location) in
    	print("A new update of location is available: \(location)")
    }) { (request, last, error) in
    	request.cancel() // stop continous location monitoring on error
    	print("Location monitoring failed due to an error \(error)")
    }
    x.register(observer: LocObserver.onAuthDidChange(.main, { (request, oldAuth, newAuth) in
    	print("Authorization moved from \(oldAuth) to \(newAuth)")
    }))
    

    It works on iOS10 sim but not on iOS9 (same on devices). I tried many configurations but it doesn't seems to change anything.

    invalid 
    opened by nicolas255 9
  • Locator.currentPosition does not return, but CLLocationManager is able to determine the location changes

    Locator.currentPosition does not return, but CLLocationManager is able to determine the location changes

    It sometimes happens that Locator.currentPosition(accuracy: .block, onSuccess: { (location) -> (Void) in ..... } does not return the location, even if waiting for some minutes.

    Firstly I thought it was a problem with my device, I've restarted it, reinstalled the app, disabled and enabled location services, but I couldn't get the location method to return. I've tried the same method call after adding a CLLocationManager in the same ViewController, and it displays the device's current location immediately, thus leaving me to think the problem lies in the pod.

    Did anyone also stumble upon this odd behavior?

    documentation 
    opened by bogdan-razvan 8
  • Swift 3 build errors

    Swift 3 build errors

    I am trying out this framework for my future project (it looks great), but unfortunately the test project I have started (Using Cocoapods (1.1.0.beta 1) with:

    pod 'SwiftLocation' :git: => 'https://github.com/malcommac/SwiftLocation.git', :branch => 'feature/swift3'
    

    doesn't build. There is two different type of errors and 15 errors overall:

    1. Some declarations are missing, among them are: RegionHandlerStateDidChange, RegionHandlerStateDidChange, RegionHandlerError, ...
    2. Beacon has two declarations. One in BeaconManager.swift and the other one in Common.swift

    I'm guessing you are testing and building your project without the pods (have you used pod lib create ...?) This is always error prone.

    Could you take a look. I'm lost a bit. There are files in my pod that have not been added to your test project. 😖

    opened by mohpor 8
  • Relaxing the accuracy level (both for horizontal accuracy and received interval) for room and house

    Relaxing the accuracy level (both for horizontal accuracy and received interval) for room and house

    If I call

    LocationManager.shared.locateFromGPS(.continous, accuracy: .block, activity: .otherNavigation) { result in
      ...
    }
    

    multiple times at different times, and I start location tracking on each handler, only the first receives updates. The 2nd start receiving updates only if the first one is stopped.

    For this to happen, I delayed the 2nd call to locateFromGPS by 10 seconds (using DispatchQueue.main.asyncAfter())

    If I replace .continous with .oneShot it works fine instead.

    Is it supposed to work this way, or is it a bug?

    bug 
    opened by jeden 7
  • 3.2.0 refuses to build with Carthage

    3.2.0 refuses to build with Carthage

    /usr/bin/xcrun xcodebuild -workspace /Users/ek/zero/zero-ios/Carthage/Checkouts/SwiftLocation/SwiftLocation.xcworkspace -scheme SwiftLocation-iOS -configuration Release -derivedDataPath /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0 -sdk iphoneos ONLY_ACTIVE_ARCH=NO BITCODE_GENERATION_MODE=bitcode CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY= CARTHAGE=YES archive -archivePath /var/folders/n2/gpjdw_f17611zqhc_f3zq7_m0000gp/T/SwiftLocation SKIP_INSTALL=YES GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=NO CLANG_ENABLE_CODE_COVERAGE=NO (launched in /Users/ek/zero/zero-ios/Carthage/Checkouts/SwiftLocation)User defaults from command line:
        IDEArchivePathOverride = /var/folders/n2/gpjdw_f17611zqhc_f3zq7_m0000gp/T/SwiftLocation
        IDEDerivedDataPathOverride = /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0
    
    Build settings from command line:
        BITCODE_GENERATION_MODE = bitcode
        CARTHAGE = YES
        CLANG_ENABLE_CODE_COVERAGE = NO
        CODE_SIGN_IDENTITY = 
        CODE_SIGNING_REQUIRED = NO
        GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO
        ONLY_ACTIVE_ARCH = NO
        SDKROOT = iphoneos11.2
        SKIP_INSTALL = YES
    
    === BUILD TARGET SwiftLocation-iOS OF PROJECT SwiftLocation WITH CONFIGURATION Release ===
    
    Check dependencies
    The file “Pods-SwiftLocation-iOS.release.xcconfig” couldn’t be opened because there is no such file. (/Users/ek/zero/zero-ios/Carthage/Checkouts/SwiftLocation/Pods/Target Support Files/Pods-SwiftLocation-iOS/Pods-SwiftLocation-iOS.release.xcconfig)
    
    Write auxiliary files
    /bin/mkdir -p /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/SwiftLocation.build/Release-iphoneos/SwiftLocation-iOS.build/Objects-normal/armv7
    write-file /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/SwiftLocation.build/Release-iphoneos/SwiftLocation-iOS.build/Objects-normal/armv7/SwiftLocation.LinkFileList
    write-file /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/SwiftLocation.build/Release-iphoneos/SwiftLocation-iOS.build/SwiftLocation-own-target-headers.hmap
    write-file /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/SwiftLocation.build/Release-iphoneos/SwiftLocation-iOS.build/SwiftLocation-project-headers.hmap
    write-file /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/SwiftLocation.build/all-product-headers.yaml
    write-file /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/SwiftLocation.build/Release-iphoneos/SwiftLocation-iOS.build/Script-E2B25B138939EAE47C04ED63.sh
    chmod 0755 /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/SwiftLocation.build/Release-iphoneos/SwiftLocation-iOS.build/Script-E2B25B138939EAE47C04ED63.sh
    /bin/mkdir -p /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/SwiftLocation.build/Release-iphoneos/SwiftLocation-iOS.build/DerivedSources
    write-file /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/SwiftLocation.build/Release-iphoneos/SwiftLocation-iOS.build/DerivedSources/SwiftLocation_vers.c
    write-file /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/SwiftLocation.build/Release-iphoneos/SwiftLocation-iOS.build/SwiftLocation-all-non-framework-target-headers.hmap
    write-file /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/SwiftLocation.build/Release-iphoneos/SwiftLocation-iOS.build/SwiftLocation-generated-files.hmap
    /bin/mkdir -p /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/SwiftLocation.build/Release-iphoneos/SwiftLocation-iOS.build/Objects-normal/arm64
    write-file /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/SwiftLocation.build/Release-iphoneos/SwiftLocation-iOS.build/Objects-normal/arm64/SwiftLocation.LinkFileList
    write-file /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/SwiftLocation.build/Release-iphoneos/SwiftLocation-iOS.build/Objects-normal/arm64/SwiftLocation-iOS-OutputFileMap.json
    write-file /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/SwiftLocation.build/Release-iphoneos/SwiftLocation-iOS.build/Objects-normal/armv7/SwiftLocation-iOS-OutputFileMap.json
    write-file /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/SwiftLocation.build/Release-iphoneos/SwiftLocation-iOS.build/SwiftLocation.hmap
    write-file /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/SwiftLocation.build/Release-iphoneos/SwiftLocation-iOS.build/swift-overrides.hmap
    write-file /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/SwiftLocation.build/Release-iphoneos/SwiftLocation-iOS.build/module.modulemap
    write-file /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/SwiftLocation.build/Release-iphoneos/SwiftLocation-iOS.build/Script-9E2F4121426A6420397A065F.sh
    chmod 0755 /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/SwiftLocation.build/Release-iphoneos/SwiftLocation-iOS.build/Script-9E2F4121426A6420397A065F.sh
    write-file /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/SwiftLocation.build/Release-iphoneos/SwiftLocation-iOS.build/SwiftLocation-all-target-headers.hmap
    
    Create product structure
    /bin/mkdir -p /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/SwiftLocation.framework/Modules
    /bin/mkdir -p /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/SwiftLocation.framework/Headers
    
    ProcessInfoPlistFile /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/SwiftLocation.framework/Info.plist Configs/SwiftLocation.plist
        cd /Users/ek/zero/zero-ios/Carthage/Checkouts/SwiftLocation
        export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/Users/ek/.pyenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/usr/local/MacGPG2/bin"
        builtin-infoPlistUtility /Users/ek/zero/zero-ios/Carthage/Checkouts/SwiftLocation/Configs/SwiftLocation.plist -expandbuildsettings -format binary -platform iphoneos -o /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/SwiftLocation.framework/Info.plist
    
    SymLink /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/BuildProductsPath/Release-iphoneos/SwiftLocation.framework /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/SwiftLocation.framework
        cd /Users/ek/zero/zero-ios/Carthage/Checkouts/SwiftLocation
        export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/Users/ek/.pyenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/usr/local/MacGPG2/bin"
        /bin/ln -sfh /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/SwiftLocation.framework /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/BuildProductsPath/Release-iphoneos/SwiftLocation.framework
    
    PhaseScriptExecution [CP]\ Check\ Pods\ Manifest.lock /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/SwiftLocation.build/Release-iphoneos/SwiftLocation-iOS.build/Script-E2B25B138939EAE47C04ED63.sh
        cd /Users/ek/zero/zero-ios/Carthage/Checkouts/SwiftLocation
        /bin/sh -c /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/SwiftLocation.build/Release-iphoneos/SwiftLocation-iOS.build/Script-E2B25B138939EAE47C04ED63.sh
    diff: /Podfile.lock: No such file or directory
    diff: /Manifest.lock: No such file or directory
    error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
    
    ** ARCHIVE FAILED **
    
    
    The following build commands failed:
    	PhaseScriptExecution [CP]\ Check\ Pods\ Manifest.lock /Users/ek/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/SwiftLocation/3.2.0/Build/Intermediates.noindex/ArchiveIntermediates/SwiftLocation-iOS/IntermediateBuildFilesPath/SwiftLocation.build/Release-iphoneos/SwiftLocation-iOS.build/Script-E2B25B138939EAE47C04ED63.sh
    (1 failure)
    
    
    opened by ekimia 7
  • onAuthorizationDidChange not called (and never called) on specific flow

    onAuthorizationDidChange not called (and never called) on specific flow

    Environment:

    • Version 1.1.1
    • Swift 3
    • iPhone 4S 8.4

    I am displaying a alert to open the app settings when the status is different than the one required (.alwaysInUse). The handler is being called when I swap between an incorrect value (!= .alwaysInUse) and (.alwaysInUse) but is not called between two incorrect values. This is important because I am using the handler to open an alert.

    Reproduce:

    1. Open app and authorise location
    2. Go to settings app (app suspended and change to when in use or never)
    3. Go to app and the handler onAuthorizationDidChange is called
    4. Go to settings app and change to the other non-always option
    5. Go back to app and the handler is not called
    6. From now on, the onAuthorizationDidChange event handler is never called
    enhancement 
    opened by bphenriques 7
  • Not working on iOS 10 beta

    Not working on iOS 10 beta

    Hello and thank you for your great work!

    I'm using the provided latest version of the sources and I'm encountering an error on a device running iOS 10 beta 6 in Xcode 7 using Swift 2.2.

    Here's my test project, maybe you could tell me what's wrong.

    Works perfectly fine on iOS 9.3.5

    opened by ShadeApps 7
  • monitoring for ble beacons will never work as the callbacks filter based monitoredGeoRegions

    monitoring for ble beacons will never work as the callbacks filter based monitoredGeoRegions

    Hi, I discovered monitoring for ble beacons will never work as the callbacks filter based monitoredGeoRegions I fixed it by doubling the code for now ;) .. there should be a common protocol

    bug 
    opened by Daij-Djan 7
  • Not working with AppClip

    Not working with AppClip

    Just by importing the library into my app Clip Target in Xcode I get the following error/warning when uploading to TestFlight/AppStore:

    ITMS-90842: Invalid SDK usage - App clip 'BuildTarget_AC_Base.app/AppClips/BuildTarget_AppClip.app' uses the SDK selector 'requestAlwaysAuthorization', which is not supported. Ensure your app clip is using supported SDK features.

    You can use "#if APPCLIP" to skip code that reference API that are not allowed in AppClips. Is it possible to solve this in the framework as well?

    opened by appfrilans 0
  • Authorization status listener in New Framework version

    Authorization status listener in New Framework version

    How to observe authorization status changes?

    in old version of the framework, we can use following methods. LocationManager.shared.requireUserAuthorization() LocationManager.shared.onAuthorizationChange.add { } LocationManager.shared.onAuthorizationChange.remove() But I'm not seeing those methods in updated framework. Can I get any help for finding these equivalent methods in new framework? Thanks in advance.

    opened by subbuchaudhary 0
  • update playground app to use SwiftPackage and resolve compiler warnings

    update playground app to use SwiftPackage and resolve compiler warnings

    This PR:

    • removes dependency on CocoaPods from the playground app and references the library Package.swift instead.
    • updates code where deprecations warnings were prompted by the compiler
    • adds support for async/await to the excellent RequestProtocol (includes README example and a working code example)

    The first commit is constrained to the first two bullets above The second commit adds async/await support

    opened by levous 0
  • How to observe authorizationStatus change?

    How to observe authorizationStatus change?

    For CLLocationManager, I can use func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) to observe. But since I'm using this framework, can anybody tell me how to observe authorizationStatusChange with SwiftLocation?

    image

    I found above in source code, and seems like it invoked some authorizationCallbacks, which are added by SwiftLocation.requestAuthorization(completion:). But after adding a callback, I changed authorization status for my app, nothing happened.

    And, there's no .delegate option for SwiftLocation instance, so how can I achieve it?

    opened by RoyRao2333 0
Releases(5.1.0)
  • 5.1.0(Feb 10, 2021)

    Released on 2021-01-10

    Changelog

    • [NEW] #338 Bluetooth broadcasting capabilities detached in a subspec for CocoaPods
    • [NEW] #339 Bluetooth broadcasting capabilities detached in a subspec for Swift Package Manager
    • [FIX] #335 Bug fix for distance and interval validation controls (#333, #332)
    Source code(tar.gz)
    Source code(zip)
  • 5.0.3(Dec 24, 2020)

    Released on 2020-12-24

    Library

    • [FIX] [#318] minDistance/minInterval filtering does not work (lastLocation property has never been set on first pass inside GPSRequest) bug

    Playground Application

    • [FIX] [#319] Wrong timeoutInterval description for GPSRequest
    Source code(tar.gz)
    Source code(zip)
  • 5.0.2(Dec 6, 2020)

  • 5.0.1(Nov 28, 2020)

    Released on 2020-11-28

    • [NEW] [#311] Added support for Swift Package Manager dynamic library.
    • [NEW] [#312] Add support for precise and reduced GPS accuracy option introduced in iOS 14+.
    • [NEW] [#313] Expose allowsBackgroundLocationUpdates and pausesLocationUpdatesAutomatically property to SwiftLocation
    • [NEW] [#314] Add opportunity to discard and not automatic save GPS/Geofence/Visits requests between app sessions.
    • [NEW] [#286] Add BundleIdentifier to Google-requests to enable google api restriction option.
    • [FIX] [#309] Fixed an issue when evaluating minDistance property of the Location Manager.
    • [FIX] [#303] Fixed an issue when compiling Mac Catalyst 14+ ('rangedRegions' fix).
    • [FIX] [#305] Fixed several warnings with Mac Catalyst
    • [FIX] [#310] Fixed an issue with Codable and GPSLocationOptions's where timeout variable is nullable.
    • [FIX] [#306] Fixed gpsLocationWith() init with builder which does not work correctly (cannot configure get continuous GPS values).
    • [FIX] [#304] Added LICENSE file to silent warning of CocoaPods.
    • [FIX] [#302] Updated README.md documentation.
    Source code(tar.gz)
    Source code(zip)
  • 5.0.0(Nov 11, 2020)

  • 4.2.0(Nov 17, 2019)

    Released on: 2019-11-17

    CHANGES

    • #266 [NEW] Added support for iBeacon's beacon tracking
    • #271 [NEW] Fixed issue in SPM package which prevents library to be compiled in XCode 11 due to iOS9 related errors.
    • #265 [CHG] Relaxed the accuracy level (both for horizontal accuracy and received interval) for room (60mts/40secs) and house (25mts/20secs)
    • #272 [FIX] AutoCompleteRequest.Options has now a public init.
    • #267 [FIX] Fixed bug which prevents oneShot location requests to be removed from queue after completing.
    Source code(tar.gz)
    Source code(zip)
  • 4.1.0(Sep 14, 2019)

    Release On: 2019-09-13

    CHANGES

    • #248 [NEW] Added dataFrequency property to the LocationRequest object which allows to filter continous subscription data by time/distance constraints.
    • #261 [NEW] Added support for Swift Package Manager (Swift 5.x).
    • #262 [FIX] place_id is now parsed correctly as identifier property of the Place instance both for OpenStreetMap and GoogleMaps requests.
    • #262 [FIX] rawData property of the Place allows you to access to the raw data returned from 3rd party services.
    • #263 [FIX] GeocoderRequest.Options initializer is now accessible.
    Source code(tar.gz)
    Source code(zip)
  • 4.0.2(May 12, 2019)

    Released on: 2019-05-12

    CHANGES

    • #257 [NEW] LocationManager's completeAllLocationRequest() function is now public and allows you to complete all gps location requests with a single command by passing optional error reason.
    • #256 [NEW] LocationRequest now produces a new type of error in case of missing required location before timeout. It's called requiredLocationNotFound and includes both the time interval of the timeout and the last absolute location received from gps module (regardless the required accuracy).
    Source code(tar.gz)
    Source code(zip)
  • 4.0.1(May 12, 2019)

  • 4.0.0(May 12, 2019)

  • 3.2.0(Mar 16, 2018)

    Version 3.2.0 - Download

    Released on: March 16, 2018

    • #197 Added neighborhood and formatted address key in Place entity.
    • #181 Fixed an issue with WhenInUse authorization under iOS 11 which may cause crashes.
    • #180 events.listen() function now returns a TokenID you can use to remove event listener callback via events.remove().
    • #186 Added language support to Google Places APIs requests (default is english).
    • #187 Fixed a memory issue with geocoding requests (if you don't keep it alive by assigning the request to a strong var you will not receive responses because the request itself are destroyed immediately). Since this version all requests are keeped strongly by the library itself (you don't need to store them manually anymore and they are removed automatically once finished and events are dispatched). Requests interaction (add/remove of a request) is a thread-safe operation.
    • #189 Added support for HTTPS on freeIP service.
    Source code(tar.gz)
    Source code(zip)
  • 3.0.1-beta(Oct 29, 2017)

  • 2.0.7(May 8, 2017)

  • 2.0.1(May 8, 2017)

  • 1.2.0(Feb 20, 2017)

  • 1.1.1(Nov 30, 2016)

    • #89 Fixed a runtime exception with reserve geocoding functions
    • #92 Fixed wrong documentation about stop() and cancel() func of Request
    • #91 Updated for Swift 3.1
    Source code(tar.gz)
    Source code(zip)
Owner
Daniele Margutti
iOS & macOS Engineer, UI/UX Lover. Continuous improvement is better than delayed perfection.
Daniele Margutti
AirQualityMonitoringDashboard - (AQI)Air Quality Monitoring Dashboard

AirQualityMonitoringDashboard (AQI)Air Quality Monitoring Dashboard This is an s

Rajesh Kumar G A 0 Feb 6, 2022
WatchCon is a tool which enables creating easy connectivity between iOS and WatchOS.

WatchCon WatchCon is a tool which enables creating easy connectivity between iOS and WatchOS Requirements iOS 9.0+ / watchOS 2.0+ CocoaPods CocoaPods

Abdullah Selek 33 Sep 22, 2022
Easy Haptic Feedback Generator 📳

Haptica is an easy haptic feedback generator. $ pod try Haptica Requirements iOS 9.0+ Xcode 8.0+ Swift 5 (Haptica 3.x), Swift 4 (Haptica 2.x), Swift

Lasha Efremidze 702 Jan 1, 2023
Haptico 📳 - easy to use haptic feedback generator with pattern-play support

Haptico Haptico is easy to use iOS haptic feedback generator. Besides default haptic feedbacks it can play patterns! Checkout Example project. Table o

Sapozhnik Ivan 462 Jan 1, 2023
A better way to operate QR Code in Swift, support iOS, macOS, watchOS and tvOS.

EFQRCode is a lightweight, pure-Swift library for generating stylized QRCode images with watermark or icon, and for recognizing QRCode from images, in

EFPrefix 4.3k Jan 2, 2023
Instagram-like photo browser and a camera feature with a few line of code in Swift.

NOTE: This project is no longer maintained. We highly recommend YPImagePicker. Fusuma Fusuma is a Swift library that provides an Instagram-like photo

Yuta Akizuki 2.4k Dec 31, 2022
A camera view controller with custom image picker and image cropping.

ALCameraViewController A camera view controller with custom image picker and image cropping. Features Front facing and rear facing camera Simple and c

Alex Littlejohn 2k Dec 29, 2022
:mag_right: A simple and beautiful barcode scanner.

Description BarcodeScanner is a simple and beautiful wrapper around the camera with barcode capturing functionality and a great user experience. Barco

HyperRedink 1.6k Jan 3, 2023
Library for iOS Camera API. Massively increase performance and ease of use within your next iOS Project.

CameraKit helps you add reliable camera to your app quickly. Our open source camera platform provides consistent capture results, service that scales,

CameraKit 628 Dec 27, 2022
Get the data from Accelerometer, Gyroscope and Magnetometer in only Two or a few lines of code.

Get the data from Accelerometer, Gyroscope and Magnetometer in only Two or a few lines of code. CoreMotion now made insanely simple :octocat: :satellite:

Muhammad Haroon Baig 1.1k Nov 16, 2022
Simply the fastest way to transmit data between iOS/tvOS and OSX

DarkLightning DarkLightning is a lightweight Swift library to allow data transmission between iOS/tvOS devices (Lightning port, Dock connector, USB-C)

Jens Meder 318 Nov 29, 2022
Swift library to easily check the current device and some more info about it.

Usage To run the example project, clone the repo, and run pod install from the Example directory first. let device = Deviice.current device is a Devi

Andrea Mario Lufino 56 Nov 3, 2022
Luminous provides you a lot of information about the system and a lot of handy methods to quickly get useful data on the iOS platform.

Luminous Example To run the example project, clone the repo, and run pod install from the Example directory first. Requirements iOS 8+ Swift 5 Xcode 1

Andrea Mario Lufino 324 Nov 27, 2022
Light weight tool for detecting the current device and screen size written in swift.

Device detect the current  device model and screen size. Installation CocoaPods Device is available through CocoaPods. To install it, simply add the

Lucas Ortis 1.5k Dec 28, 2022
NFC Forum Well Known Type Data Parser for iOS11 and Core NFC

NFCNDEFParse NFC Forum Well Known Type Data Parser for iOS11 and Core NFC. Supports parsing of types: Text - NFCForum-TS-RTD_Text_1.0 2006-07-24 Uri -

Jari Kalinainen 14 Oct 21, 2022
Lightweight Cocoa library for detecting the running device's model and screen size.

Lightweight Cocoa library for detecting the running device's model and screen size. With the newer  devices, developers have more work to do. This li

Sebastian Dobrincu 1.3k Nov 24, 2022
Writes twitter and contact (links) to writable nfcs on iPhone 7+ iOS 14+

nfc writer ios app nfc writer app is a hacky fun side project that writes twitter and contact (links) to writable nfcs. runs on iPhone 7+ iOS 14+. joi

Vivian Phung 5 Nov 23, 2022
🛰 CoreLocation Made Easy - Efficient & Easy Location Tracker, IP Location, Gecoder, Geofence, Autocomplete, Beacon Ranging, Broadcaster and Visits Monitoring

Location Manager Made Easy SwiftLocation is a lightweight Swift Library that provides an easy way to work with location-related functionalities. No mo

Daniele Margutti 3.2k Dec 30, 2022
A project to test the accuracy of iOS geofence and visits monitoring.

GeofenceTester iOS About This Component • Build • Support • Contribute • Licensing A project to test the accuracy of iOS geofence and visits monitorin

Telekom Open Source Software 3 Oct 27, 2022
A lightweight and efficient bus tracker app for the Miami-Dade Transit System

A lightweight bus tracker app for the Miami-Dade Transit System Built in Swift, this app features a favorites page, real-time bus location and ETA, us

Jacob Schuster 1 Dec 10, 2021