Easily get the device's current location on iOS.

Overview

INTULocationManager

Build Status Test Coverage Version Platform License

INTULocationManager makes it easy to get the device's current location and is currently heading on iOS. It is an Objective-C library that also works great in Swift.

INTULocationManager provides a block-based asynchronous API to request the current location, either once or continuously. It internally manages multiple simultaneous locations and heading requests, and each one-time location request can specify its own desired accuracy level and timeout duration. INTULocationManager automatically starts location services when the first request comes in and stops the location services when all requests have been completed, while dynamically managing the power consumed by location services to reduce the impact on battery life.

What's wrong with CLLocationManager?

CLLocationManager requires you to manually detect and handle things like permissions, stale/inaccurate locations, errors, and more. CLLocationManager uses a more traditional delegate pattern instead of the modern block-based callback pattern. And while it works fine to track changes in the user's location over time (such as, for turn-by-turn navigation), it is extremely cumbersome to correctly request a single location update (such as to determine the user's current city to get a weather forecast, or to autofill an address from the current location).

INTULocationManager makes it easy to request both the device's current location, either once or continuously, as well as the device's continuous heading. The API is extremely simple for both one-time location requests and recurring subscriptions to location updates. For one-time location requests, you can specify how accurate of a location you need, and how long you're willing to wait to get it. Significant location change monitoring is also supported. INTULocationManager is power efficient and conserves the device's battery by automatically determining and using the most efficient Core Location accuracy settings, and by automatically powering down location services (e.g. GPS or compass) when they are no longer needed.

Installation

INTULocationManager requires iOS 9.0 or later.

Using CocoaPods

  1. Add the pod INTULocationManager to your Podfile.
pod 'INTULocationManager'
  1. Run pod install from Terminal, then open your app's .xcworkspace file to launch Xcode.
  2. Import the INTULocationManager.h header.
  • With use_frameworks! in your Podfile
    • Swift: import INTULocationManager
    • Objective-C: #import <INTULocationManager/INTULocationManager.h> (or with Modules enabled: @import INTULocationManager;)
  • Without use_frameworks! in your Podfile
    • Swift: Add #import "INTULocationManager.h" to your bridging header.
    • Objective-C: #import "INTULocationManager.h"

Using Carthage

  1. Add the intuit/LocationManager project to your Cartfile.
github "intuit/LocationManager"
  1. Run carthage update, then follow the additional steps required to add the iOS and/or Mac frameworks into your project.
  2. Import the INTULocationManager framework/module.
  • Swift: import INTULocationManager
  • Objective-C: #import <INTULocationManager/INTULocationManager.h> (or with Modules enabled: @import INTULocationManager;)

Manually from GitHub

  1. Download all the files in INTULocationManager subdirectory.
  2. Add the source files to your Xcode project (drag and drop is easiest).
  3. Import the INTULocationManager.h header.
  • Swift: Add #import "INTULocationManager.h" to your bridging header.
  • Objective-C: #import "INTULocationManager.h"

Usage

Requesting Permission to Access Location Services

INTULocationManager automatically handles obtaining permission to access location services when you issue a location request and the user has not already granted your app the permission to access that location services.

iOS 9 and above

Starting with iOS 8, you must provide a description for how your app uses location services by setting a string for the key NSLocationWhenInUseUsageDescription or NSLocationAlwaysUsageDescription in your app's Info.plist file. INTULocationManager determines which level of permissions to request based on which description key is present. You should only request the minimum permission level that your app requires, therefore it is recommended that you use the "When In Use" level unless you require more access. If you provide values for both description keys, the more permissive "Always" level is requested.

iOS 11

Starting with iOS 11, you must provide a description for how your app uses location services by setting a string for the key NSLocationAlwaysAndWhenInUseUsageDescription in your app's Info.plist file.

iOS 12

Starting with iOS 12, you will have access to set the desiredActivityType as CLActivityTypeAirborne.

Getting the Current Location (once)

To get the device's current location, use the method requestLocationWithDesiredAccuracy:timeout:block:.

The desiredAccuracy parameter specifies how accurate and recent of a location you need. The possible values are:

INTULocationAccuracyCity          // 5000 meters or better, received within the last 10 minutes  -- lowest accuracy
INTULocationAccuracyNeighborhood  // 1000 meters or better, received within the last 5 minutes
INTULocationAccuracyBlock         // 100 meters or better, received within the last 1 minute
INTULocationAccuracyHouse         // 15 meters or better, received within the last 15 seconds
INTULocationAccuracyRoom          // 5 meters or better, received within the last 5 seconds      -- highest accuracy

The desiredActivityType parameter indicated the type of activity that is being tracked. The possible values are:

CLActivityTypeFitness               // Track fitness activities such as walking, running, cycling, and so on
CLActivityTypeAutomotiveNavigation  // Track location changes to the automobile
CLActivityTypeAirborne              // Track airborne activities - iOS 12 and above
CLActivityTypeOtherNavigation       // Track vehicular navigation that are not automobile related
CLActivityTypeOther                 // Track unknown activities. This is the default value

The timeout parameter specifies that how long you are willing to wait for a location with the accuracy you requested. The timeout guarantees that your block will execute within this period of time, either with a location of at least the accuracy you requested (INTULocationStatusSuccess), or with whichever location could be determined before the timeout interval was up (INTULocationStatusTimedOut). Pass 0.0 for no timeout (not recommended).

By default, the timeout countdown begins as soon as the requestLocationWithDesiredAccuracy:timeout:block: method is called. However, there is another variant of this method that includes a delayUntilAuthorized: parameter, which allows you to pass YES to delay the start of the timeout countdown until the user has responded to the system location services permissions prompt (if the user hasn't allowed or denied the app access yet).

Here's an example:

INTULocationManager *locMgr = [INTULocationManager sharedInstance];
[locMgr requestLocationWithDesiredAccuracy:INTULocationAccuracyCity
                                   timeout:10.0
                      delayUntilAuthorized:YES	// This parameter is optional, defaults to NO if omitted
                                     block:^(CLLocation *currentLocation, INTULocationAccuracy achievedAccuracy, INTULocationStatus status) {
                                         if (status == INTULocationStatusSuccess) {
                                             // Request succeeded, meaning achievedAccuracy is at least the requested accuracy, and
                                             // currentLocation contains the device's current location.
                                         }
                                         else if (status == INTULocationStatusTimedOut) {
                                             // Wasn't able to locate the user with the requested accuracy within the timeout interval.
                                             // However, currentLocation contains the best location available (if any) as of right now,
                                             // and achievedAccuracy has info on the accuracy/recency of the location in currentLocation.
                                         }
                                         else {
                                             // An error occurred, more info is available by looking at the specific status returned.
                                         }
                                     }];
let locationManager = INTULocationManager.sharedInstance()
locationManager.requestLocation(withDesiredAccuracy: .city,
                                            timeout: 10.0,
                               delayUntilAuthorized: true) { (currentLocation, achievedAccuracy, status) in
                                   if (status == INTULocationStatus.success) {
                                       // Request succeeded, meaning achievedAccuracy is at least the requested accuracy, and
                                       // currentLocation contains the device's current location
                                   }
                                   else if (status == INTULocationStatus.timedOut) {
                                       // Wasn't able to locate the user with the requested accuracy within the timeout interval.
                                       // However, currentLocation contains the best location available (if any) as of right now,
                                       // and achievedAccuracy has info on the accuracy/recency of the location in currentLocation.
                                   }
                                   else {
                                       // An error occurred, more info is available by looking at the specific status returned.
                                   }
           }

Subscribing to Continuous Location Updates

To subscribe to continuous location updates, use the method subscribeToLocationUpdatesWithBlock:. This method instructs location services to use the highest accuracy available (which also requires the most power). The block will execute indefinitely (even across errors, until canceled), once for every new updated location regardless of its accuracy.

If you do not need the highest possible accuracy level, you should instead use subscribeToLocationUpdatesWithDesiredAccuracy:block:. This method takes the desired accuracy level and uses it to control how much power is used by location services, with lower accuracy levels like Neighborhood and City requiring less power. Note that INTULocationManager will automatically manage the system location services accuracy level, including when there are multiple active location requests/subscriptions with different desired accuracies.

If an error occurs, the block will execute with a status other than INTULocationStatusSuccess, and the subscription will be kept alive.

Here's an example:

INTULocationManager *locMgr = [INTULocationManager sharedInstance];
[locMgr subscribeToLocationUpdatesWithDesiredAccuracy:INTULocationAccuracyHouse
                                                block:^(CLLocation *currentLocation, INTULocationAccuracy achievedAccuracy, INTULocationStatus status) {
                                                    if (status == INTULocationStatusSuccess) {
                                                        // A new updated location is available in currentLocation, and achievedAccuracy indicates how accurate this particular location is.
                                                    }
                                                    else {
                                                        // An error occurred, more info is available by looking at the specific status returned. The subscription has been kept alive.
                                                    }
                                                }];

Subscribing to Significant Location Changes

To subscribe the significant location changes, use the method subscribeToSignificantLocationChangesWithBlock:. This instructs the location services to begin monitoring for significant location changes, which is very power efficient. The block will execute indefinitely (until canceled), once for every new updated location regardless of its accuracy. Note that if there are other simultaneously active location requests or subscriptions, the block will execute for every location update (not just for significant location changes). If you intend to take action only when the location has changed significantly, you should implement custom filtering based on the distance & time received from the last location.

If an error occurs, the block will execute with a status other than INTULocationStatusSuccess, and the subscription will be kept alive.

Here's an example:

INTULocationManager *locMgr = [INTULocationManager sharedInstance];
[locMgr subscribeToSignificantLocationChangesWithBlock:^(CLLocation *currentLocation, INTULocationAccuracy achievedAccuracy, INTULocationStatus status) {
    if (status == INTULocationStatusSuccess) {
		// A new updated location is available in currentLocation, and achievedAccuracy indicates how accurate this particular location is.
    }
    else {
        // An error occurred, more info is available by looking at the specific status returned. The subscription has been kept alive.
    }
}];

If your app has acquired the "Always" location services authorization and your app is terminated with at least one active significant location change subscription, your app may be launched in the background when the system detects a significant location change. Note that when the app terminates, all of your active location requests & subscriptions with INTULocationManager are canceled. Therefore, when the app launches due to a significant location change, you should immediately use INTULocationManager to set up a new subscription for significant location changes in order to receive the location information.

Here is an example of how to handle being launched in the background due to a significant location change:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // If you start monitoring significant location changes and your app is subsequently terminated, the system automatically relaunches the app into the background if a new event arrives.
    // Upon relaunch, you must still subscribe to significant location changes to continue receiving location events. 
    if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey]) {
        INTULocationManager *locMgr = [INTULocationManager sharedInstance];
        [locMgr subscribeToSignificantLocationChangesWithBlock:^(CLLocation *currentLocation, INTULocationAccuracy achievedAccuracy, INTULocationStatus status) {
            // This block will be executed with the details of the significant location change that triggered the background app launch,
            // and will continue to execute for any future significant location change events as well (unless canceled).
        }];
    }
    return YES;
}

Managing Active Requests or Subscriptions

When issuing a location request, you can optionally store the request ID, which allows you to force complete or cancel the request at any time:

INTULocationManager *locMgr = [INTULocationManager sharedInstance];
INTULocationRequestID requestID = [locMgr requestLocationWithDesiredAccuracy:INTULocationAccuracyHouse
                                                                     timeout:5.0
                                                                       block:locationRequestBlock];

// Force the request to complete early, like a manual timeout (will execute the block)
[[INTULocationManager sharedInstance] forceCompleteLocationRequest:requestID];

// Cancel the request (won't execute the block)
[[INTULocationManager sharedInstance] cancelLocationRequest:requestID];

Note that subscriptions never timeout; calling forceCompleteLocationRequest: on a subscription will simply cancel it.

Subscribing to Continuous Heading Updates

To subscribe to continuous heading updates, use the method subscribeToHeadingUpdatesWithBlock:. This method does not set any default heading filter value, but you can do so using the headingFilter property on the manager instance. It also does not filter based on accuracy of the result, but rather leaves it up to you to check the returned CLHeading object's headingAccuracy property to determine whether or not it is acceptable.

The block will execute indefinitely (until canceled), once for every new updated heading regardless of its accuracy. Note that if heading requests are removed or canceled, the manager will automatically stop updating the device heading in order to preserve battery life.

If an error occurs, the block will execute with a status other than INTUHeadingStatusSuccess, and the subscription will only be automatically canceled if the device doesn't have heading support (i.e. for status INTUHeadingStatusUnavailable).

Here's an example:

INTULocationManager *locMgr = [INTULocationManager sharedInstance];
[locMgr subscribeToHeadingUpdatesWithBlock:^(CLHeading *heading, INTUHeadingStatus status) {
    if (status == INTUHeadingStatusSuccess) {
        // An updated heading is available
        NSLog(@"'Heading updates' subscription block called with Current Heading:\n%@", heading);
    } else {
        // An error occurred, more info is available by looking at the specific status returned. The subscription will be canceled only if the device doesn't have heading support.
    }
}];

Example Project

Open the project included in the repository (requires Xcode 6 and iOS 8.0 or later). It contains a LocationManagerExample scheme that will run a simple demo app. Please note that it can run in the iOS Simulator, but you need to go to the iOS Simulator's Debug > Location menu once running the app to simulate a location (the default is None).

Issues & Contributions

Please open an issue here on GitHub if you have a problem, suggestion, or other comment.

Pull requests are welcome and encouraged! There are no official guidelines, but please try to be consistent with the existing code style.

License

INTULocationManager is provided under the MIT license.

INTU on GitHub

Check out more iOS and OS X open source projects from Intuit!

Comments
  • Location Accuracy stuck at City, can't get neighborhood.

    Location Accuracy stuck at City, can't get neighborhood.

    Recently I began working on an app for a client that was using INTULocationManager 4.1.1. The first few updates went well and I didn't have to touch the Location code at all but recently we've been having an issue. We're asking for .Neighborhood level accuracy and after doing some debugging we're finding that location is always showing accuracy is at .City after timing out. Tried setting the timeout obscenely high and walking around with the app but it never get's better than .City. If I drop the accuracy requested to .City the rest of the app functions normally although less accurately. I really need better accuracy than .City so this is only a temporary workaround. Might be worth noting that the issue started around the iOS 10 release.

    Any and all help is much appreciated!

    opened by DancinDirk 33
  • Add support for heading requests

    Add support for heading requests

    Just copied over the same design abstractions for handling heading requests. I chose not to abstract the heading accuracy (since it's rather subjective) but rather let the observers handle that with the CLHeading object that gets returned and the headingFilter setting.

    Should close https://github.com/intuit/LocationManager/pull/22 and https://github.com/intuit/LocationManager/issues/41

    opened by iwasrobbed 16
  • Distinguish between location services disabled in the settings and location services in the application

    Distinguish between location services disabled in the settings and location services in the application

    Created two methods locationServicesEnabled and applicationLocationAuthorizationEnabled to distinguish between when the user has location services disabled in general for their device and when they've authorized the application to use location services.

    opened by KhanFu 13
  • No option to set pausesLocationUpdatesAutomatically to NO.

    No option to set pausesLocationUpdatesAutomatically to NO.

    This is causing a break in my application running in the background where location updates don't restart after being paused in background mode by pausesLocationUpdatesAutomatically.

    enhancement 
    opened by Gnative 12
  • Add Tests for the LocationManager

    Add Tests for the LocationManager

    With @lazerwalker

    We've added a base of tests around the INTULocationRequest and INTULocationManager classes. Our current plan of attack is to add some more coverage to the INTULocationManager, as well as add in Travis/Coveralls support for CI and code coverage metrics.

    opened by orta 12
  • [feature] Knowing the user general location without asking for permission.

    [feature] Knowing the user general location without asking for permission.

    A nice feature to have in this class is the ability to identify the user general location (country) without asking for permission. Something like a desiredAccuracy of INTULocationAccuracyCountry. This can be done in a number of ways but the best I can think of is to use something like http://www.iplocationtools.com/ or any other free service that offers to translate an IP address to a country. (And of course without using Core Location)

    Services like Spotify etc' that are country based always using something like that in order to know the user location without asking for permission.

    enhancement 
    opened by sSegev 11
  • feat: added ability to specify the activity type if needed

    feat: added ability to specify the activity type if needed

    The iOS activity types, CLActivityType, help the iOS determine what type of activity is being tracked and when/if the tracking should be paused based on how long the device has been stationary.

    This PR allows the user to set the activity type for their specific use case. CLLocationManager defaults to CLActivityTypeOther and will continue to do so if not set by the user.

    • overloaded subscription methods with new activity type parameter
    • updated example app to include activity type selection
    • updated read.me with info on activity type
    • updated device simulator iOS version to 12
    • updated travis Xcode version to 10
    • updated target iOS pod version to 12
    hacktoberfest 
    opened by dcortright 10
  • Will I get current location even if the app is killed or terminated ?

    Will I get current location even if the app is killed or terminated ?

    I want to get user current location even if the app is killed or terminated. And When user start walking, location must be updated even if the app is killed or terminated.. Is it possible ??

    opened by KrLikeblue 10
  • iOS 11 - Updating location in background stopped working

    iOS 11 - Updating location in background stopped working

    Hi,

    After update my iPhone to iOS 11 significantChanges stopped reporting location updates. From iOS 11, only two or three location updates fired after driving 30 km.

    I think that iOS 11 is more restrictive, but I tried with iOS 11.1 beta and problem still present. Any help?

    PS: on iOS 10 works fine

    opened by mhergon 8
  • Some way to control activityType

    Some way to control activityType

    My current application isn't achieving a good horizontalAccuracy...

    I know GPS accuracy is highly dependent on location and the environment

    but i was looking for ways to improve it. and from here

    they recommended to set the activity type to .fitness, and there isn't a way to control activityType from library

    hacktoberfest 
    opened by sameer4 7
  • Add framework for carthage

    Add framework for carthage

    I added a framework target and make all the headers in LocationManager group as public.

    With this framework, everyone can also use Carthage to install it in their apps.

    opened by charlyliu 7
  • Fixed issue - Not building on Carthage v0.34 #127

    Fixed issue - Not building on Carthage v0.34 #127

    Recreated schemes because INTULocationManager scheme had not been created as framework scheme that's why Carthage could not find and build the project and was throwing this error:

    Dependency "LocationManager" has no shared framework schemes for any of the platforms: iOS

    Issue link: https://github.com/intuit/LocationManager/issues/127

    opened by arnold-plakolli 0
  • iOS 14 compatibility fix.

    iOS 14 compatibility fix.

    Only minimum modifications on the code. Please don't merge those none *.m & *.h files modification. Add a accuracyAuthorization and a method similar to CLLocationManager provided.

    @property (nonatomic, assign) INTUAccuracyAuthorization accuracyAuthorization;

    • (void)requestTemporaryFullAccuracyAuthorizationWithPurposeKey:(nonnull NSString *)purposeKey completion:(void (^ _Nullable)(NSError * _Nullable))completion;
    opened by jjksam 0
  • Support for iOS 14

    Support for iOS 14

    There has been some changes to Location - the main one being the changes to geolocation and the ability for the user to change the precision from within the permissions dialogue.

    I can't see any branches / beta releases with any updates for this and wanted to find out if this is on your radar and what implications these changes have for the library?

    Currently when I select Precise:Off and geolocate with .block accuracy I get a timeOut status response rather than a more appropriate error.

    Screenshot 2020-09-09 at 14 43 14

    Linking docs for accuracyAuthorization

    opened by agroGandhi 4
  • Not building on Carthage v0.34

    Not building on Carthage v0.34

    Attempting to install/build via the latest release of Carthage (v0.34) results in the following error:

    Dependency "LocationManager" has no shared framework schemes for any of the platforms: iOS
    
    If you believe this to be an error, please file an issue with the maintainers at https://github.com/intuit/LocationManager/issues/new
    

    After some snooping online it would seem this is a problem with how the library is structured, seeing all resources I could find blame the absence of xcschemas as the cause of this error, when this repo definitely includes them.

    I'm wondering if anyone else has been able to repro + what could be causing this?

    For reference all I did was run: carthage update LocationManager --platform ios

    My Cartfile contains github "intuit/LocationManager" ~> 4.4.0

    opened by Nickersoft 2
Releases(v4.4.0)
  • v4.4.0(Oct 16, 2019)

    Thanks to @dcortright the library now has the ability to set the desiredActivityType. For more details see the pull request: #123 .

    We've also bumped the minimum iOS support to iOS 12 for this release, hence the larger version number increase.

    Source code(tar.gz)
    Source code(zip)
  • v4.3.2(Sep 15, 2018)

    Thanks to @skandakov for a fix around requesting the right type of location request popup based upon the different keys in your Info.plist file.

    Source code(tar.gz)
    Source code(zip)
  • v4.3.0(Feb 21, 2018)

  • v4.2.0(Mar 15, 2016)

  • v4.1.1(Oct 19, 2015)

    This release includes an updated framework version within Xcode.

    See previous release for details - https://github.com/intuit/LocationManager/releases/tag/v4.1.0

    Source code(tar.gz)
    Source code(zip)
  • v4.1.0(Oct 18, 2015)

    • Full compatibility with iOS 9 including support for background location updates (#57)
    • New API for subscribing to significant location changes (#45)
    • Add dynamic location services accuracy management for improved power efficiency (#47)
    • Location subscriptions are no longer canceled for intermittent errors (#60)
    Source code(tar.gz)
    Source code(zip)
  • v4.0.0(Aug 7, 2015)

    • Remove the API that was previously deprecated in v3.0.0.
    • Add backwards-compatible generics and nullability annotations. In particular, this improves how the API bridges into Swift.
    Source code(tar.gz)
    Source code(zip)
  • v3.0.3(Jun 5, 2015)

  • v3.0.2(Jun 5, 2015)

  • v3.0.1(Mar 28, 2015)

  • v3.0.0(Mar 19, 2015)

    • Expose a new API to get the current state of location services outside of the context of a location request. The previous locationServicesAvailable API has been deprecated, and will be removed in a future release.
    • Fix a bug where INTULocationManager would not correctly detect Disabled location services (device-wide), and instead would report them as Denied (even if the user had actually granted this app permission).
    Source code(tar.gz)
    Source code(zip)
  • v2.0.2(Feb 5, 2015)

    • Fix an issue where nil locations (e.g. after an error) would have an incorrect achieved accuracy
    • Prevent console log message when trying to cancel a request ID that doesn't exist
    Source code(tar.gz)
    Source code(zip)
  • v2.0.1(Jan 23, 2015)

  • v2.0.0(Jan 19, 2015)

    • Add a new API to subscribe to continuous location updates
    • Location request IDs are now of type INTULocationRequestID (typedef'ed to NSInteger)
    • Other minor internal enhancements
    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Jun 30, 2014)

    • Add support for iOS 8, maintaining backwards compatibility back to iOS 6.0
    • Fix an order of execution issue where a location request's completion block could execute before the location request ID was returned from requestLocationWithDesiredAccuracy:
    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(Apr 11, 2014)

    • Add a new method variant requestLocationWithDesiredAccuracy:timeout:delayUntilAuthorized:block: that allows you to delay the start of the timeout countdown until the user has responded to the system location services permissions prompt (if the user hasn't allowed or denied the app access yet).
    Source code(tar.gz)
    Source code(zip)
  • v1.0.1(Mar 31, 2014)

    • Remove logging to the console in Release build configuration
    • Logging can be forced on by defining INTU_LOGGING_ENABLED=1 (or off, using INTU_LOGGING_ENABLED=0) in the preprocessor
    Source code(tar.gz)
    Source code(zip)
Owner
Intuit
Powering prosperity around the world.
Intuit
Application that displays current weather at a random location. iOS 14.0 or newer. SwiftUI.

Elseweather App that displays current weather at a random location. Description Elseweather was created as a student/research project with no practica

Ярослав 11 Dec 15, 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
The most power-efficient and lightweight iOS location manager for Swift and ObjC

IngeoSDK for iOS Overview IngeoSDK is a power-efficient location manager for iOS (Swift and Objective-C), which extends and improves CoreLocation. It

IngeoSDK 99 Feb 28, 2022
CLI for setting location in the iOS simulator

set-simulator-location This is a simple CLI for easily setting the location of the currently running iOS Simulator. Usage Set a specific latitude and

Mobile Native Foundation 619 Jan 6, 2023
An iOS app to display quarantine classification information based on users location

ph covid19 Quarantine Classification Automatically check quarantine classification based on your location Tech: MVVM Observer Binding MapKit, CoreLoca

Carlos Rivas 0 Nov 15, 2021
A ready for use and fully customizable location picker for your app

LocationPicker A ready for use and fully customizable location picker for your app. Features Installation Cocoapods Carthage Swift Package Manager Qui

Zhuoran 397 Nov 16, 2022
Enumerate Location Services using CoreLocation API on macOS

SwiftLiverpool Description This tool leverages the CoreLocation API on macOS to enumerate Location Services data. You need to enable "Location Service

Justin Bui 4 Aug 20, 2022
Location Weather Demo With Swift

LocationWeatherDemo Здравствуйте! Для того что бы проект корректно работал установите pod's. О проекте: 1) На первой странице можно увидеть погоду в л

German Khodyrev 0 Dec 8, 2021
Simulate GPS location system-wide

locsim A tool to simulate GPS location system-wide. This tool simulates GPS location natively without any runtime injection, and it's how Apple do it.

udevs 47 Dec 29, 2022
A simple map with the location of the user and the control of permissions

Proposal The project is based on implementing a simple map with the location of

Raúl Pedraza León 0 Dec 26, 2021
Shows the ISS live location.

ISSLive Shows the ISS live location. Challenge tasks: Project structure Create repo. Setup project. Organize files following the MVVM pattern. Install

Alejandro Trejo Flores 0 Feb 2, 2022
An original project making use of custom UITableViewCells, date formatting, json parsing, and handling user location.

SunTimes An original project making use of custom UITableViewCells, date formatting, json parsing, date and time formatting based on the json data, an

David Chester 0 Feb 8, 2022
Simple library to detect motion type (walking, running, automotive) and count users steps. This library will make motion detection much more easily.

SOMotionDetector Simple library to detect motion for iOS by arturdev . Based on location updates and acceleration. ###Requierments iOS > 6.0 Compatibl

Artur  Mkrtchyan 1.1k Nov 25, 2022
iOS and  Watch app to find city bicycles to rent in your city

Bike-Compass Bike Compass is a full-featured city bicycle finder app for iOS. Using a bike is enjoyable, that is why our app is fast, beautiful, and d

Raul Riera 80 May 18, 2022
Open-source iOS application written to explore Swift in its early days

Cepp iOS application written in Swift. Icon by: Rodrigo Nascimento (tks :D) IMPORTANT: *This project uses CocoaPods as the dependency manager, make su

Filipe Alvarenga 14 Sep 12, 2022
Contains the swift rewrite of Find My Bus NJ iOS App

FIND MY BUS NJ 2 An app for tracking NJ Transit bus times. Dependancies Alamofire SwiftyJSON PKHUD Fabric Getting started Install fastlane and imagema

null 44 Dec 10, 2022
A native iOS client to map the Pokemon around you!

Pokemap client for iOS This is a client for the Pokemap server (https://github.com/RocketMap/RocketMap) iPokeGO is now officially available on the App

Dimitri Dessus 640 Oct 12, 2022
🗺️ MAPS.ME — Offline OpenStreetMap maps for iOS and Android

MAPS.ME MAPS.ME is an open source cross-platform offline maps application, built on top of crowd-sourced OpenStreetMap data. It was publicly released

MAPS.ME 4.5k Dec 23, 2022
iOS app which uses the Moves API to visualize which places you spent the most time at in the last seven days.

Places Places uses the Moves API to visualize which places you spent the most time at in the last seven days. It runs on iOS 7 only and you need to ob

Boris Bügling 43 Feb 9, 2022