ARKit + CoreLocation: Combines the high accuracy of AR with the scale of GPS data.

Overview

ARKit + CoreLocation

CI Status MIT License Pods Version Carthage Compatible

ARKit: Uses camera and motion data to map out the local world as you move around.

CoreLocation: Uses wifi and GPS data to determine your global location, with a low degree of accuracy.

ARKit + CoreLocation: Combines the high accuracy of AR with the scale of GPS data.

Points of interest demo Navigation demo

The potential for combining these technologies is huge, with so many potential applications across many different areas. This library comes with two major features:

  • Allow items to be placed within the AR world using real-world coordinates.
  • Dramatically improved location accuracy, using recent location data points combined with knowledge about movement through the AR world.

The improved location accuracy is currently in an “experimental” phase, but could be the most important component.

Because there’s still work to be done there, and in other areas, this project will best be served by an open community, more than what GitHub Issues would allow us. So I’m opening up a Slack group that anyone can join, to discuss the library, improvements to it, and their own work.

Join the Slack community

Requirements

ARKit requires iOS 11, and supports the following devices:

  • iPhone 6S and upwards
  • iPhone SE
  • iPad (2017)
  • All iPad Pro models

iOS 11 can be downloaded from Apple’s Developer website.

Usage

This library contains the ARKit + CoreLocation framework, as well as a demo application similar to Demo 1.

Be sure to read the section on True North calibration.

Building with Swift:

swift build \
        -Xswiftc "-sdk" -Xswiftc "`xcrun --sdk iphonesimulator --show-sdk-path`" \
        -Xswiftc "-target" -Xswiftc "x86_64-apple-ios12.1-simulator"

Setting up using Swift Package Manager

Setting up using CocoaPods

  1. Add to your podfile:

pod 'ARCL'

  1. In Terminal, navigate to your project folder, then:

pod update

pod install

  1. Add NSCameraUsageDescription and NSLocationWhenInUseUsageDescription to plist with a brief explanation (see demo project for an example)

Setting up manually

  1. Add all files from the ARKit+CoreLocation/Source directory to your project.
  2. Import ARKit, SceneKit, CoreLocation and MapKit.
  3. Add NSCameraUsageDescription and NSLocationWhenInUseUsageDescription to plist with a brief explanation (see demo project for an example)

Quick start guide

To place a pin over a building, for example Canary Wharf in London, we’ll use the main class that ARCL is built around - SceneLocationView.

First, import ARCL and CoreLocation, then declare SceneLocationView as a property:

import ARCL
import CoreLocation

class ViewController: UIViewController {
  var sceneLocationView = SceneLocationView()
}

You should call sceneLocationView.run() whenever it’s in focus, and sceneLocationView.pause() if it’s interrupted, such as by moving to a different view or by leaving the app.

override func viewDidLoad() {
  super.viewDidLoad()

  sceneLocationView.run()
  view.addSubview(sceneLocationView)
}

override func viewDidLayoutSubviews() {
  super.viewDidLayoutSubviews()

  sceneLocationView.frame = view.bounds
}

After we’ve called run(), we can add our coordinate. ARCL comes with a class called LocationNode - an object within the 3D scene which has a real-world location along with a few other properties which allow it to be displayed appropriately within the world. LocationNode is a subclass of SceneKit’s SCNNode, and can also be subclassed further. For this example we’re going to use a subclass called LocationAnnotationNode, which we use to display a 2D image within the world, which always faces us:

let coordinate = CLLocationCoordinate2D(latitude: 51.504571, longitude: -0.019717)
let location = CLLocation(coordinate: coordinate, altitude: 300)
let image = UIImage(named: "pin")!

let annotationNode = LocationAnnotationNode(location: location, image: image)

LocationAnnotationNode can also be initialized using a UIView. Internally, the UIView is converted into UIImage, so you cannot update the content dynamically. However, this methods allows you to easily show complex layout as POI.

let coordinate = CLLocationCoordinate2D(latitude: 51.504571, longitude: -0.019717)
let location = CLLocation(coordinate: coordinate, altitude: 300)
let view = UIView() // or a custom UIView subclass

let annotationNode = LocationAnnotationNode(location: location, view: view)

It can also be initialized with CALayer. You can use this when you want to update the contents live.

let coordinate = CLLocationCoordinate2D(latitude: 51.504571, longitude: -0.019717)
let location = CLLocation(coordinate: coordinate, altitude: 300)
let layer = CALayer() // or a custom CALayer subclass

let annotationNode = LocationAnnotationNode(location: location, layer: layer)

By default, the image you set should always appear at the size it was given, for example if you give a 100x100 image, it would appear at 100x100 on the screen. This means distant annotation nodes can always be seen at the same size as nearby ones. If you’d rather they scale relative to their distance, you can set LocationAnnotationNode’s scaleRelativeToDistance to true.

sceneLocationView.addLocationNodeWithConfirmedLocation(locationNode: annotationNode)

There are two ways to add a location node to a scene - using addLocationNodeWithConfirmedLocation, or addLocationNodeForCurrentPosition, which positions it to be in the same position as the device, within the world, and then gives it a coordinate.

So that’s it. If you set the frame of your sceneLocationView, you should now see the pin hovering above Canary Wharf.

In order to get a notification when a node is touched in the sceneLocationView, you need to conform to LNTouchDelegate in the ViewController class.

The annotationNodeTouched(node: AnnotationNode) gives you access to node that was touched on the screen. AnnotationNode is a subclass of SCNNode with two extra properties: image: UIImage? and view: UIView?. Either of these properties will be filled in based on how the LocationAnnotationNode was initialized (using the constructor that takes UIImage or UIView).

The locationNodeTouched(node: LocationNode) gives you instead access to the nodes created from a PolyNode (e.g. the rendered directions of a MKRoute).

class ViewController: UIViewController, LNTouchDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        //...
        self.sceneLocationView.locationNodeTouchDelegate = self
        //...
    }

    func annotationNodeTouched(node: AnnotationNode) {
        // Do stuffs with the node instance

        // node could have either node.view or node.image
        if let nodeView = node.view{
            // Do stuffs with the nodeView
            // ...
        }
        if let nodeImage = node.image{
            // Do stuffs with the nodeImage
            // ...
        }
    }

    func locationNodeTouched(node: LocationNode) {
        guard let name = node.tag else { return }
        guard let selectedNode = node.childNodes.first(where: { $0.geometry is SCNBox }) else { return }

        // Interact with the selected node
    }

}

Additional features

The library and demo come with a bunch of additional features for configuration. It’s all fully documented to be sure to have a look around.

SceneLocationView is a subclass of ARSCNView. Note that while this gives you full access to ARSCNView to use it in other ways, you should not set the delegate to another class. If you need to use delegate features then you should subclass SceneLocationView.

True North calibration

One issue which I haven’t personally been able to overcome is that the iPhone’s True North calibration currently has an accuracy of 15º at best. This is fine for maps navigation, but when placing things on top of the AR world, it starts to become a problem.

I’m confident that this issue can be overcome by using various AR techniques - it’s one area I think can really benefit from a shared effort.

To improve this currently, I’ve added some functions to the library that allow adjusting the north point:

  • sceneLocationView.moveSceneHeadingClockwise
  • sceneLocationView.moveSceneHeadingAntiClockwise
  • sceneLocationView.resetSceneHeading

You should use these by setting sceneLocationView.useTrueNorth to false, and then pointing the device in the general direction of north before beginning, so it’s reasonably close. With useTrueNorth set to true (default), it would continually adjust as it gets a better sense of north.

Within the demo app, there’s a disabled property called adjustNorthByTappingSidesOfScreen, which accesses these functions, and, once enabled, allows tapping on the left and right of the screen to adjust the scene heading.

My recommendation would be to fine a nearby landmark which is directly True North from your location, place an object there using a coordinate, and then use the moveSceneHeading functions to adjust the scene until it lines up.

Improved Location Accuracy

CoreLocation can deliver location updates anywhere from every 1-15 seconds, with accuracies which vary from 150m down to 4m. Occasionally, you’ll receive a far more accurate reading, like 4m or 8m, before returning to more inaccurate readings. At the same time, AR uses motion and camera data to create a map of the local world.

A user may receive a location reading accurate to 4m, then they walk 10m north and receive another location reading accurate to 65m. This 65m-accurate reading is the best that CoreLocation can offer, but knowing the user’s position within the AR scene when they got that 4m reading, and the fact that they’ve walked 10m north through the scene since then, we can translate that data to give them a new coordinate with about 4m of accuracy. This is accurate up to about 100m.

There is more detail on this on the wiki.

Issues

I mentioned this was experimental - currently, ARKit occasionally gets confused as the user is walking through a scene, and may change their position inaccurately. This issue also seems to affect the “euler angles”, or directional information about the device, so after a short distance it may think you’re walking in a different direction.

While Apple can improve ARKit over time, I think there are improvements we can make to avoid those issues, such as recognising when it happens and working to correct it, and by comparing location data with our supposed location to determine if we’ve moved outside a possible bounds.

Location Algorithm Improvements

There are further optimisations to determining a user’s location which can be made.

For example, one technique could be to look at recent location data, translate each data point using the user’s travel since then, and use the overlap between the data points to more narrowly determine the user’s possible location.

There is more detail on this on the wiki.

Going Forward

We have some Milestones and Issues related to them - anyone is welcome to discuss and contribute to them. Pull requests are welcomed. You can discuss new features/enhancements/bugs either by adding a new Issue or via the Slack community.

Thanks

Library created by @AndrewProjDent, but a community effort from here on.

Available as open source under the terms of the MIT License.

Comments
  • May we inquire when the source code will be made available(for those that can't take a joke)

    May we inquire when the source code will be made available(for those that can't take a joke)

    As some obviously have no sense of humor, let me clarify: I'm NOT actually demanding to have the code right now, or I'll go home screaming. It was a joke. I wasn't being rude, or disrespectful. It was a JOKE.

    opened by manofsteel9740 16
  • Value of type 'SceneLocationView' has no member 'locationNodeTouchDelegate

    Value of type 'SceneLocationView' has no member 'locationNodeTouchDelegate

    Hi,

    I want to use the locationNodeTouchDelegate but when I add it on the SceneLocationView it gives me this error:

    Value of type 'SceneLocationView' has no member 'locationNodeTouchDelegate

    I also don't find another delegate?

    opened by donpironet 13
  • Inconsistent LocationNode position

    Inconsistent LocationNode position

    Hi, I'd like to say thank you for such a great lib. I'm having a problem:

    • Device used: iPhone 6S - iOS 11 beta 5

    I added a SceneLocationView into my view controller's ViewDidLoad like this:

    sceneLocationView = SceneLocationView()
    sceneLocationView.showAxesNode = true
    view.insertSubview(sceneLocationView, at: 0)
    sceneLocationView.translatesAutoresizingMaskIntoConstraints = false
    sceneLocationView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
    sceneLocationView.leftAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leftAnchor).isActive = true
    sceneLocationView.rightAnchor.constraint(equalTo: view.safeAreaLayoutGuide.rightAnchor).isActive = true
    sceneLocationView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
    sceneLocationView.locationDelegate = self
    

    After user tapped on a button, I added a new LocationNode whose coordinate is the same to current location's, but altitude is 0.5m lower:

    if let currentLocation = sceneLocationView.currentLocation() {
    	let location = CLLocation(coordinate: currentLocation.coordinate, altitude: currentLocation.altitude - 0.5)
    	let annotationNode = LocationAnnotationNode(location: location, image: #imageLiteral(resourceName: "pin"))
    	sceneLocationView.addLocationNodeWithConfirmedLocation(locationNode: locationNode)
    }
    

    The node displayed correctly at first. However, when I moved the device around, the node also moved, sometimes its vertical position even jumps to about the same to the axes node's, even though its y-axis was about from -0.7 to -0.5

    I wonder if I did something wrong.

    opened by fleuverouge 10
  • Click event on annotation node

    Click event on annotation node

    I am using following code to render annotations node -

        public init(location: CLLocation?, view: UIView) {
    
        UIGraphicsBeginImageContextWithOptions(view.frame.size, false, UIScreen.main.scale);
        view.layer.render(in: UIGraphicsGetCurrentContext()!)
        let screenShot = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        
        let plane = SCNPlane(width: view.frame.size.width / 100, height: view.frame.size.height/100)
        plane.firstMaterial!.diffuse.contents = screenShot
        plane.firstMaterial!.lightingModel = .constant
        
        annotationNode = AnnotationNode(view: view, image: nil)
        annotationNode.geometry = plane
        super.init(location: location)
        let billboardConstraint = SCNBillboardConstraint()
        billboardConstraint.freeAxes = SCNBillboardAxis.Y
        constraints = [billboardConstraint]
        addChildNode(annotationNode)
    }
    

    But the problem is its rendering image as annotation and I want some click events for particular portion on image. (My requirement is something like I am rendering a view and view contains buttons. I can tap on buttons to get the event) But in this case 'plane.firstMaterial!.diffuse.contents' does not accept the view so I have to convert a view into image. Now when a view converts into image then I loose the button events as its an image now.

    Example:

    I want to like this and how we can get button events methods

    screenshot 2019-02-21 at 7 48 11 pm

    opened by yogendragirase55 9
  • Performance drops dramatically changing tracking state from limited to normal

    Performance drops dramatically changing tracking state from limited to normal

    I pulled the last commits from develop and now I always experience really poor performance when the tracking state change from normal to limited, insufficient feature to normal again. Everything becomes extremely laggy and I have to restart my application.

    Here the log that it prompts every time

    camera did change tracking state: limited, initializing
    camera did change tracking state: limited, relocalizing
    camera did change tracking state: normal
    camera did change tracking state: limited, insufficient features
    camera did change tracking state: normal
    [Technique] World tracking performance is being affected by resource constraints [1]
    [Technique] VIO error callback: 26859.984836, 1, Frame processing rate has fallen below pre-set threshold
    [Technique] VIO error callback: 26860.484814, 1, Frame processing rate has fallen below pre-set threshold
    [Technique] World tracking performance is being affected by resource constraints [1]
    [Technique] VIO error callback: 26861.251447, 1, Frame processing rate has fallen below pre-set threshold
    [Technique] VIO error callback: 26861.534768, 1, Frame processing rate has fallen below pre-set threshold
    [Technique] VIO error callback: 26861.634764, 1, Frame processing rate has fallen below pre-set threshold
    [Technique] World tracking performance is being affected by resource constraints [1]
    ...
    
    opened by jacogasp 7
  • Interact with location nodes

    Interact with location nodes

    Background

    This PR enables the interaction with the direction boxes added to the scene.

    Breaking Changes

    The LNToucheDelegate interfaces has been modified to notify the touch event of both an AnnotationNode and a LocationNode, that's represented by the parent of the SCNBox rendered. The PolylineNode class is enriched with a tag attribute that can be used to identify the touched element.

    Meta

    • Tied to Version Release(s):

    Checklist

    • [ ] Appropriate label has been added to this PR (i.e., Bug, Enhancement, etc.).
    • [ ] Documentation has been added to all open, and public scoped methods and properties.
    • [ ] Changelog has been updated
    • [ ] Tests have have been added to all new features. (not a requirement, but helpful)
    • [ ] Image/GIFs have been added for all UI related changed.

    Screenshots

    opened by matsoftware 7
  • Polyline nodes not being added to sceneLocationView

    Polyline nodes not being added to sceneLocationView

    Hi, when working on my own project, and even testing an unmodified version of the latest code, the 3D polyline is not added to the AR scene, and I'm having a hard time debugging this. I have added several print statements to ensure that the addRoutes/addPolylines functions are reached successfully, and the print statements fire every time.

    The problem I'm facing is that the 3D line doesnt appear.

    I've added the following print statements in the addPolylines function: print("added polyline node at \($0.location.coordinate)") print($0.position) right after the node supposedly gets added to sceneNode in this line: sceneNode?.addChildNode($0)

    The latlong and xyz coordinates are printed into the console and they look like values I'm expecting.

    I tried using print(sceneNode?.childNodes) and print(sceneNode) to view the nodes that were supposed to be added to the scene, but these both come back as nil. Several functions say they will silently fail if sceneNode is nil, but I cant seem to figure out why the nodes arent getting added. Has anyone seen this bug before?

    opened by Un1xG0d 6
  • Update `coordinateWithBearing` to use Google's API

    Update `coordinateWithBearing` to use Google's API

    I've found this extension to be much more accurate than what you currently have here: https://github.com/ProjectDent/ARKit-CoreLocation/blob/f22f51bfc6b98d5b2ef54737ae242b40ae6f087e/Sources/ARKit-CoreLocation/Extensions/CLLocation%2BExtensions.swift#L107

    extension CLLocationCoordinate2D {
    func coordinateWithBearing(bearing: CLLocationDegrees, distanceMeters: CLLocationDistance) -> CLLocationCoordinate2D {
            return GMSGeometryOffset(self, distance, heading)
        }
    }
    
    opened by furzik 6
  • Created version 1.1.0

    Created version 1.1.0

    Background

    Create a new version of the library: 1.1.0 After this PR is merged in, We'll need to tag master and then push the pod to cocoapods (I can tackle that).

    Breaking Changes

    N/A

    Meta

    • Tied to Version Release(s): 1.1.0

    Checklist

    • [x] Appropriate label has been added to this PR (i.e., Bug, Enhancement, etc.).
    • [x] Changelog has been updated
    enhancement 
    opened by intere 6
  • LocationNode is traveling with you.

    LocationNode is traveling with you.

    I have downloaded the project from the master branch but having the following issues

    1- I have placed a node on some lat-long but as I move in any direction, nodes updates and travel with me. How to fix that node on given lat-long?

    2- Default altitude value is 236 if I decrease the value to 0, 50 or 100 the node never appear on that lat-long at all.

    I haven't changed anything in the code its the same which I have downloaded from the project only the Location (lat-long) is changed.

    opened by ArbabR 6
  •  sceneLocationView drastically slows down after a while (after about 30 sec)

    sceneLocationView drastically slows down after a while (after about 30 sec)

    I have an application which adds about 10 pins/location nodes in the scene location view.

    When the application first starts, the responsiveness is good, at about 60 FPS. When the user started moving and after about 30 sec, the FPS steadily drops to about 5 fps and won't restore.

    opened by gp-wang 6
  • Problem iOS 16.1 Bug

    Problem iOS 16.1 Bug

    Hey guys, the problem of markers on ios 16.1 sometimes all the points displayed on the AR camere glued to the camera and move relative to the rotation of the camera! Has anyone encountered this problem?

    Regards Alex

    opened by greatspoke 0
  • Bump addressable from 2.6.0 to 2.8.1

    Bump addressable from 2.6.0 to 2.8.1

    Bumps addressable from 2.6.0 to 2.8.1.

    Changelog

    Sourced from addressable's changelog.

    Addressable 2.8.1

    • refactor Addressable::URI.normalize_path to address linter offenses (#430)
    • remove redundant colon in Addressable::URI::CharacterClasses::AUTHORITY regex (#438)
    • update gemspec to reflect supported Ruby versions (#466, #464, #463)
    • compatibility w/ public_suffix 5.x (#466, #465, #460)
    • fixes "invalid byte sequence in UTF-8" exception when unencoding URLs containing non UTF-8 characters (#459)
    • Ractor compatibility (#449)
    • use the whole string instead of a single line for template match (#431)
    • force UTF-8 encoding only if needed (#341)

    #460: sporkmonger/addressable#460 #463: sporkmonger/addressable#463 #464: sporkmonger/addressable#464 #465: sporkmonger/addressable#465 #466: sporkmonger/addressable#466

    Addressable 2.8.0

    • fixes ReDoS vulnerability in Addressable::Template#match
    • no longer replaces + with spaces in queries for non-http(s) schemes
    • fixed encoding ipv6 literals
    • the :compacted flag for normalized_query now dedupes parameters
    • fix broken escape_component alias
    • dropping support for Ruby 2.0 and 2.1
    • adding Ruby 3.0 compatibility for development tasks
    • drop support for rack-mount and remove Addressable::Template#generate
    • performance improvements
    • switch CI/CD to GitHub Actions

    Addressable 2.7.0

    • added :compacted flag to normalized_query
    • heuristic_parse handles mailto: more intuitively
    • dropped explicit support for JRuby 9.0.5.0
    • compatibility w/ public_suffix 4.x
    • performance improvements
    Commits
    • 8657465 Update version, gemspec, and CHANGELOG for 2.8.1 (#474)
    • 4fc5bb6 CI: remove Ubuntu 18.04 job (#473)
    • 860fede Force UTF-8 encoding only if needed (#341)
    • 99810af Merge pull request #431 from ojab/ct-_do_not_parse_multiline_strings
    • 7ce0f48 Merge branch 'main' into ct-_do_not_parse_multiline_strings
    • 7ecf751 Merge pull request #449 from okeeblow/freeze_concatenated_strings
    • 41f12dd Merge branch 'main' into freeze_concatenated_strings
    • 068f673 Merge pull request #459 from jarthod/iso-encoding-problem
    • b4c9882 Merge branch 'main' into iso-encoding-problem
    • 08d27e8 Merge pull request #471 from sporkmonger/sporkmonger-enable-codeql
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Check if parent node is LocationNode

    Check if parent node is LocationNode

    Background

    When user clicks on a node, the function locationNodeTouched(node:) is not triggered, since a sub-node is registered as the firstHitTest node and the casting of that node to a LocationNode is failing.

    Breaking Changes

    The idea is to check if one of the parents of the selected node is a LocationNode and in that case we trigger locationNodeTouched(node:)

    PR Checklist

    • [x] CI runs clean?
    • [x] Appropriate label has been added to this PR (i.e., Bug, Enhancement, etc.).
    • [x] Documentation has been added to all open, and public scoped methods and properties.
    • [x] Changelog has been updated
    • [x] Tests have have been added to all new features. (not a requirement, but helpful)
    • [x] Image/GIFs have been added for all UI related changed.
    opened by houcem-soued 0
  • Problem with position after .pause() state

    Problem with position after .pause() state

    Hey guys!

    Does anyone know how to update SceneLocationView after a pause? The thing is, if the phone is turned to the other side during the pause and then return to .run(), all the markers change their geolocation relative to the side where you turned the phone! How to reload SceneLocationView and give it new coordinates relative to itself?

    Thank you! Regards Alex

    opened by greatspoke 1
  • Bump tzinfo from 1.2.5 to 1.2.10

    Bump tzinfo from 1.2.5 to 1.2.10

    Bumps tzinfo from 1.2.5 to 1.2.10.

    Release notes

    Sourced from tzinfo's releases.

    v1.2.10

    TZInfo v1.2.10 on RubyGems.org

    v1.2.9

    • Fixed an incorrect InvalidTimezoneIdentifier exception raised when loading a zoneinfo file that includes rules specifying an additional transition to the final defined offset (for example, Africa/Casablanca in version 2018e of the Time Zone Database). #123.

    TZInfo v1.2.9 on RubyGems.org

    v1.2.8

    • Added support for handling "slim" format zoneinfo files that are produced by default by zic version 2020b and later. The POSIX-style TZ string is now used calculate DST transition times after the final defined transition in the file. The 64-bit section is now always used regardless of whether Time has support for 64-bit times. #120.
    • Rubinius is no longer supported.

    TZInfo v1.2.8 on RubyGems.org

    v1.2.7

    • Fixed 'wrong number of arguments' errors when running on JRuby 9.0. #114.
    • Fixed warnings when running on Ruby 2.8. #112.

    TZInfo v1.2.7 on RubyGems.org

    v1.2.6

    • Timezone#strftime('%s', time) will now return the correct number of seconds since the epoch. #91.
    • Removed the unused TZInfo::RubyDataSource::REQUIRE_PATH constant.
    • Fixed "SecurityError: Insecure operation - require" exceptions when loading data with recent Ruby releases in safe mode.
    • Fixed warnings when running on Ruby 2.7. #106 and #111.

    TZInfo v1.2.6 on RubyGems.org

    Changelog

    Sourced from tzinfo's changelog.

    Version 1.2.10 - 19-Jul-2022

    Version 1.2.9 - 16-Dec-2020

    • Fixed an incorrect InvalidTimezoneIdentifier exception raised when loading a zoneinfo file that includes rules specifying an additional transition to the final defined offset (for example, Africa/Casablanca in version 2018e of the Time Zone Database). #123.

    Version 1.2.8 - 8-Nov-2020

    • Added support for handling "slim" format zoneinfo files that are produced by default by zic version 2020b and later. The POSIX-style TZ string is now used calculate DST transition times after the final defined transition in the file. The 64-bit section is now always used regardless of whether Time has support for 64-bit times. #120.
    • Rubinius is no longer supported.

    Version 1.2.7 - 2-Apr-2020

    • Fixed 'wrong number of arguments' errors when running on JRuby 9.0. #114.
    • Fixed warnings when running on Ruby 2.8. #112.

    Version 1.2.6 - 24-Dec-2019

    • Timezone#strftime('%s', time) will now return the correct number of seconds since the epoch. #91.
    • Removed the unused TZInfo::RubyDataSource::REQUIRE_PATH constant.
    • Fixed "SecurityError: Insecure operation - require" exceptions when loading data with recent Ruby releases in safe mode.
    • Fixed warnings when running on Ruby 2.7. #106 and #111.
    Commits
    • 0814dcd Fix the release date.
    • fd05e2a Preparing v1.2.10.
    • b98c32e Merge branch 'fix-directory-traversal-1.2' into 1.2
    • ac3ee68 Remove unnecessary escaping of + within regex character classes.
    • 9d49bf9 Fix relative path loading tests.
    • 394c381 Remove private_constant for consistency and compatibility.
    • 5e9f990 Exclude Arch Linux's SECURITY file from the time zone index.
    • 17fc9e1 Workaround for 'Permission denied - NUL' errors with JRuby on Windows.
    • 6bd7a51 Update copyright years.
    • 9905ca9 Fix directory traversal in Timezone.get when using Ruby data source
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
Releases(1.2.1)
Owner
Andrew Hart
Andrew Hart
ARKit Demo Application

ARKitNavigationDemo Work in progress. In Progress Region — For one, we could render far fewer nodes. In fact, it’s a bit distracting that the entire t

Christopher Webb 296 Dec 16, 2022
An iOS Framework Capture & record ARKit videos 📹, photos 🌄, Live Photos 🎇, and GIFs 🎆.

An iOS Framework that enables developers to capture videos ?? , photos ?? , Live Photos ?? , and GIFs ?? with ARKit content.

Ahmed Bekhit 1.5k Dec 24, 2022
IOS example app to generate point clouds in ARKit using scenedepth

Visualizing a Point Cloud Using Scene Depth Place points in the real-world using the scene's depth data to visualize the shape of the physical environ

Isak Diaz 20 Oct 31, 2022
ARKit Base Project. Place virtual objects based on WWDC example project

ARKit - Placing Virtual Objects in Augmented Reality Learn best practices for visual feedback, gesture interactions, and realistic rendering in AR exp

Ignacio Chiazzo Cardarello 338 Jan 5, 2023
A library that allows you to generate and update environment maps in real-time using the camera feed and ARKit's tracking capabilities.

ARKitEnvironmentMapper Example To run the example project, clone the repo, and run pod install from the Example directory first. Installation ARKitEnv

SV Hawks 91 Dec 4, 2022
This library uses ARKit Face Tracking in order to catch user's smile.

SmileToUnlock Make your users smile before opening the app :) Gif with the demonstration Installation Cocoapods The most preferable way to use this li

Ruslan Serebriakov 628 Oct 22, 2022
PlacenoteSDK Sample app in native iOS using ARKit, written primarily in Swift

Placenote SDK for iOS Placenote SDK lets you easily build cloud-based Augmented Reality (AR) apps that pin digital content to locations in the real wo

Placenote 93 Nov 15, 2022
Power! Unlimited power for ARKit 2.0!

A long time ago in a galaxy, far, far away... It is a period when iPhone SE and iPhone X were destroyed from the apple store, the AR market was under

KBOY (Kei Fujikawa) 516 Dec 1, 2022
A library that allows you to generate and update environment maps in real-time using the camera feed and ARKit's tracking capabilities.

ARKitEnvironmentMapper Example To run the example project, clone the repo, and run pod install from the Example directory first. Installation ARKitEnv

SV Hawks 91 Dec 4, 2022
Augmented Reality image tracking with SwiftUI, RealityKit and ARKit 4.

ARImageTracking This is an Augmented Reality Xcode project that uses Apple's newest RealityKit framework and ARKit 4 features, to dynamically track a

Richard Qi 198 Dec 7, 2022
A simple application created for educational purposes for mastering ARKit

ARDrawing AR Drawing is a simple application created for educational purposes for mastering ARKit. The basis of the project is copied from the project

NIKOLAY NIKITIN 0 Oct 20, 2022
Trying TDD with ARKit

ARPlacer BDD Spec As a user I want to place a random object in real world. I also want to see the distance between AR object and my phone. Use Cases

null 0 Dec 21, 2021
Draw VR content over live camera feed with ARKit

funny-ar Exercise with ARKit: draw VR content over live camera feed: work is in

pavel 3 Dec 18, 2021
ARKit: Projecting 3D mesh to 2D coordinate

ARKitDemo ARKit: Projecting 3D mesh to 2D coordinate A simple utility to project 3D face mesh in 2D coordinate on device screen. Sources: https://deve

Tushar Chitnavis 0 Dec 28, 2021
Furniture E-Commerce Augmented Reality(AR) app in iOS powered by ARKit

HomeMax-iOS Furniture E-Commerce Augmented Reality(AR) app in iOS powered by ARKit and SceneKit. Inspired by IKEA place app. Description Experience on

Ikmal Azman 5 Oct 14, 2022
ARID - Augmented Reality app using Apple’s ARKit framework which can recognise faces of famous scientists

ARID Augmented Reality app using Apple’s ARKit framework which can recognise fac

Hemanth 0 Jan 12, 2022
ARDicee - Simple augmented reality app using SceneKit and ARKit

ARDicee Simple augmented reality app using SceneKit and ARKit Requirements Xcode

donggyu 3 Feb 4, 2022
Reality-iOS - NFT Augmented Reality(AR) app that demonstrate application of ARImageTracking in iOS powered by ARKit 2

Reality-iOS NFT Augmented Reality(AR) app that demonstrate application of ARImag

Ikmal Azman 6 Nov 28, 2022
AR Ruler - A simple iOS app made using ARKit and SceneKit

A simple iOS app made using ARKit and SceneKit.Which can try to simplify little things in your life such as measuring stuff.

Dishant Nagpal 5 Aug 31, 2022