Giter Site home page Giter Site logo

ios-indoor-sdk's Introduction

Estimote Indoor Location SDK

Estimote Indoor Location SDK allows real-time beacon-based mapping and indoor location.

We know that building the next generation of context-aware mobile apps requires more than just iBeacon™ hardware. That's why we've built smarter software that abstracts away the difficulty of understanding proximity and position within a given space.

Estimote Indoor Location is a sophisticated software solution that makes it incredibly easy and quick to map any location. Once done, you can use our SDK to visualize your approximate position within that space in real-time, in your own app.

Indoor Location creates a rich canvas upon which to build powerful new mobile experiences, from in-venue analytics and proximity marketing to frictionless payments and personalized shopping.

Estimote Indoor Location works exclusively with Estimote Beacons.

Learn more:

Table of Contents

How does Indoor Location work?

Indoor Location SDK enables creating location through builder and obtaining position updates from the location. Besides location builder there is also possibility of mapping location through Estimote Indoor Location App.

The mapping process is simple. First, you'll need to map the shape. Start by walking around a location and stick as close to the perimeter as possible. Remember to hold the phone in front of you for the location to be mapped properly. The app will now suggest the number and placement of beacons. Affix them on the walls at chest height. To finalize the process walk around the location once more (again with the phone in front of you). Stop at each beacon along the way, to complete this one-time configuration process.

There is a nice video tutorial by @phillydev716 on YouTube on how to use Indoor Location in your app. Please note, that video tutorial uses older version of our SDK (v.1.6).

Video describing Estimote Indoor Location

Installation

SDK is available as EstimoteIndoorSDK in CocoaPods. Installation is just a matter of putting following line in your Podfile.

pod 'EstimoteIndoorSDK'

Alternatively you can add SDK manually:

  1. Drag-and-drop the EstimoteIndooLocationSDK directory (containing libEstimoteIndoorLocationSDK.a, Headers and Resources) into your project in Xcode. Make sure the "copy items if needed" checkbox is selected.

  2. If you are not already using EstimoteSDK in your project, add EstimoteSDK framework to your project. This is what your catalogue structure should look like:

    ScreenShot LinkWithBinaryLibraries

  3. Open your project settings and go to the "Build Phases" tab. In the "Link library with binaries" section click the "+" button and add the following frameworks that are required by EstimoteIndoorLocationSDK:

    • CoreMotion.framework
    • AudioToolbox.framework
    • MediaPlayer.framework
    • MessageUI.framework
    • libz.tbd

    While you're on this tab already, double-check if libEstimoteIndoorSDK.a is included in the "Link library with binaries" list. This should've happened automatically when you were copying the EstimoteIndooLocationSDK directory into the project during step 1. If for some reason it didn't, drag-and-drop the libEstimoteIndoorSDK.a file from the Project navigator onto the list.

  4. Go to "Build Settings", find "Other Linker Flags" and add -lc++. Additionally, set Enable Bitcode to NO.

  5. That's it! By this point, your project should compile successfully and you should be able to start using EstimoteIndoorLocationSDK.

  6. If you're coding in Swift, there's one more extra step necessary: to add a Bridging header file to expose Objective-C headers to Swift.

    To do that first add a new file to the project - make it a Header file and call it YourProjectName-Bridging-Header.h. In this file you need to import the following EstimoteIndoorLocationSDK and EstimoteSDK headers:

    #import "EILIndoorLocationManager.h"
    #import "EILLocation.h"
    #import "EILIndoorLocationView.h"
    #import "EILLocationBuilder.h"
    

    After all that, your Bridging header could look like this:

    ScreenShot BridgingHeader

    Finally, click on your project root item in the Project navigator and go to Build Settings tab. Make sure that All is selected, then look for Objective-C Bridging Header and set it to $(PROJECT_DIR)/YourProjectName/YourProjectName-Bridging-Header.h. Now you're good to go!

Key concepts

Note that Estimote Indoor Location uses Cartesian coordinate system, which is different than iOS coordinate system.

Location represents a physical location. It is a simple polygon constructed out of points.

Location has a property orientation which denotes angle between magnetic north and vector [0, 1] counted clockwise. See following image for graphic description:

What is orientation?

On a location’s boundary segments can be placed doors, windows which are called linear objects.

Usage

Setting up a new location

There are two ways of setting up a new location. You can use for this purpose ESTIndoorLocationBuilder, as manual tool, or Estimote App and fetch location from cloud.

Manually, using EILLocationBuilder

You have the option to create an EILLocation manually. For that use the EILLocationBuilder class.

In order to construct a new location you need to:

  • set the shape of the location and its orientation
  • add details such as beacons, walls, doors on boundary segments

The shape of the location is defined by its boundary points. For example, consider a square defined by points (0,0), (0,5), (5,5), (5,0) along with its orientation with respect to magnetic north.

EILLocationBuilder *locationBuilder = [EILLocationBuilder new];
[locationBuilder setLocationBoundaryPoints:@[
[EILPoint pointWithX:0 y:0],
[EILPoint pointWithX:0 y:5],
[EILPoint pointWithX:5 y:5],
[EILPoint pointWithX:5 y:0]]];

[locationBuilder setLocationOrientation:0];

Points that define the shape of location also define its boundary segments. They are indexed in the same order as the points. In this example there would be the following 4 segments: [(0,0), (0,5)], [(0,5), (5,5)], [(5,5), (5,0)], [(5,0), (0,0)].

The next step is to place beacons and doors in the location:

[locationBuilder addBeaconIdentifiedByIdentifier:@"aabbccddeeff"
atBoundarySegmentIndex:0
inDistance:2
fromSide:EILLocationBuilderLeftSide];

Using ESTIndoorLocationBuilder you can also place beacons inside the location (addBeaconWithIdentifier:withPosition:, addBeaconWithIdentifier:withPosition:andColor:), which is not possible with mapping tool in Indoor Location App.

Note that methods used for adding beacons that are identified by their mac addresses are now depracated. Please use methods using identification by identifier instead.

Via Estimote Indoor Location App

Using Estimote App the procedure consists of the following steps:

  • configuring beacons
  • placing beacons
  • mapping the physical location to an instance of EILLocation

If you mapped a location it was automatically uploaded to your Estimote Cloud account. You can fetch it from Estimote Cloud in your own app (see section: Managing locations in the cloud).

Obtaining position update inside the location

Once you have instance of EILLocation you can start monitoring and obtaining position updates for that location.

Monitoring location is simply determining if the user is currently inside or outside the location. In order to monitor location, first you need to create instance of EILIndoorLocationManager and start monitoring for that location.

EILIndoorLocationManager *indoorLocationManager = [EILIndoorLocationManager new];
[indoorLocationManager startMonitoringForLocation:yourLocation];

To obtain position updates, you need to set a delegate which will be receiving the updates.

indoorLocationManager.delegate = yourDelegate;
[indoorLocationManager startPositionUpdatesForLocation:yourLocation];

In addition to position, updates provide also information about accuracy of determined position which can be visualized via EILPositionView or EILPositionNode as avatar with a circle of given radius within which the real position is expected to be.

Note, that you need only one Indoor Location Manager to monitor multiple locations. However, position updates are available for only one location at the same time. If you need to enable position updates for new location, first you need to stop position updates:

[indoorLocationManager stopPositionUpdates];

In order to have Indoor Location status change and position updates without delay, you should start Indoor Location Manager and monitioring for Indoor Location early.

EILIndoorLocationManager position updates can be delivered in three different modes.

  • EILIndoorLocationManagerModeStandard - provides stable and responsive position updates. This mode is compatible with all devices. This is the default mode of EILIndoorLocationManager.
  • EILIndoorLocationManagerModeExperimentalWithInertia - provides more responsive position updates thanks to using inertial sensors. Requires device to be in portrait mode. This mode is not supported by iPad & iPod device families.
  • EILIndoorLocationManagerModeExperimentalWithARKit - provides hyper precise and responsive position updates thanks to using ARKit. If you are designing a mixed-reality experience this is the suggested mode. Requires iOS 11 device compatible with ARKit World Tracking. You need to add NSCameraUsageDescription key to the Info.plist file, explaining how your app is going to use this privilege. For example, "We use Augmented Reality to give you a virtual tour around the museum." Note: Augmented Reality Kit relies on access to the camera to work correctly. You need to add NSCameraUsageDescription key to the Info.plist file, explaining how your app is going to use this privilege. For example, "We use Augmented Reality to give you a virtual tour around the museum."

In order to change mode simply change mode property of EILIndoorLocationManager object.

indoorLocationManager.mode = EILIndoorLocationManagerModeNormal;

If the position updates delivery is in progress it will effectively restart position updates with new mode.

Obtaining position updates in background

If you want your Indoor Location enabled app to also work, when the app is running in the background, you have to use EILBackgroundIndoorLocationManager. It works in a very similar way to the EILIndoorLocationManager. You just need to add the following code to the AppDelegate.m:

EILBackgroundIndoorLocationManager *backgroundIndoorLocationManager = [EILBackgroundIndoorLocationManager new];
self.backgroundIndoorLocationManager = backgroundIndoorLocationManager;

In order to work properly your app needs access to bluetooth also when it is in background. To set that you need to go to the project settings, find "Capabilities" tab, set "Background modes" to On and check "Uses Bluetooth LE accessories".

In order to relaunch the application (if it is killed by operating system or user) as the user enters the location "Always in use" Location Services authorization is required:

[self.backgroundIndoorLocationManager requestAlwaysAuthorization];

For best UX patterns for requesting permission please refer to the following blog post. Also you need to go to the project settings, find "Capabilities" tab, set "Background modes" to On and check "Uses Bluetooth LE accessories".

To obtain position updates, you need to set a delegate which will be receiving the updates:

backgroundIndoorLocationManager.delegate = yourDelegate;
[backgroundIndoorLocationManager startPositionUpdatesForLocation:yourLocation];

To stop updating position:

[backgroundIndoorLocationManager stopPositionUpdates];

Important notes:

  • There is no need for calling startMonitoringForLocation.
  • This code should be in AppDelegate.m - this way iOS can revive the app when you enter location, even if it was killed earlier.
  • In background only the light mode is available, so there is no need of setting it.
  • Foreground and background location managers are seperate. If you want to use both modes in your app, you have to use both managers.

Managing locations in the Estimote Cloud

To manage your locations, you can use requests that allows communication with Estimote Cloud.

Provided requests are as follows:

  • EILRequestAddLocation - request for saving a new location to Estimote Cloud
  • EILRequestRemoveLocation - request for removing a new location from Estimote Cloud
  • EILRequestFetchLocation - request for fetching location identified by its identifier. Location has to be public or belong to currently authorized user
  • EILRequestFetchPublicLocations - request for fetching public nearby locations
  • EILRequestFetchLocations - request for fetching locations from Estimote Cloud for currently authorized user
  • EILRequestModifyLocation - request for modifying already existing location in Estimote Cloud

Each location saved in Estimote Cloud is given a unique string identifier that corresponds to the identifier property of EILLocation. You can find it on cloud.estimote.com, on the "Locations" screen, and use it with the Indoor SDK to, among other things, fetch your stored location from Estimote Cloud. Example of fetching location by identifier can be seen below:

EILRequestFetchLocation *request = [[EILRequestFetchLocation alloc] initWithLocationIdentifier:yourLocationIdentifier];
[request sendRequestWithCompletion:^(EILLocation *location, NSError *error) {

if (!error)
{
self.myLocation = location;
}
}];

Please note that in order to have these methods working you need to be authenticated in Estimote Cloud. To do that you have to call -[ESTConfig setupAppID:andAppToken:] first.

#import "EILIndoorLocationManager.h"
#import "ESTConfig.h"

[ESTConfig setupAppID:@"yourAppID" andAppToken:@"yourAppToken"];

You can find your API App ID and API App Token in the Apps section of the Estimote Cloud.

You can check the authorization status using the following method that will return a BOOL value:

[ESTConfig isAuthorized]

Changelog

To see what has changed in recent versions of Estimote Indoor Location SDK, see the CHANGELOG.

ios-indoor-sdk's People

Contributors

greggs avatar heypiotr avatar ljdk avatar mareksyldatk avatar masa-beheim avatar mstechly avatar msznajder avatar mycek avatar wiktor avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ios-indoor-sdk's Issues

No way to change ELILocation object orientation without rebuilding

It is not a bug, but rather cumbersome problem. The issue is that iPhones do not have stable magnetic sensors and so their North is different in every initialisation - ranging from -90 to +90 degrees! So Id love to change the location orientation value to update to this new "North".

I can get the orientation before initialisating the view, but I cant change it in the fetched location (and rebuilding it every time is not really good solution I believe). If we simply could update the orientation vector, this would hugely befit the rotation accuracy the app provides.

I could be fine with rebuilding fetched location with the new parameters but this is impossible as well, because there is no SDK documented way of converting fetched ELILocation into ELIBuilder object.

EILRequestFetchPublicLocations NSInvalidArgumentException

When trying to request all public locations I get an NSInvalidArgumentException. Code is as follows:

EILRequestFetchPublicLocations *fetchLocationsRequest = [[EILRequestFetchPublicLocations alloc] init];
[fetchLocationsRequest sendRequestWithCompletion:^(NSArray<EILLocation *> * _Nullable locations, NSError * _Nullable error) {
        if(!error) {
            
        }
        else {
            
        }
}];

Impossible to use EILPoint

I properly installed "EstimoteIndoorLocationSDK" and "EstimoteSDK" without Cocoapods and followed the steps for adding a bridging header, building settings, etc...

I can use "EILLocationBuilder" but I have Use of unresolved identifier 'EILPoint' when I try to use "EILPoint". What can I do ? I'm trying to follow your example on https://developer.estimote.com/indoor/map-your-location/

capture d ecran 2018-09-06 a 11 56 55

Direction to particular location

is it possible to get direction to particular location on my properties layout plan . i want indoor navigation with direction indication like google map direction feature .

Don't we need to 'NSLocationAlwaysUsageDescription' in Example project

Hi,

Don't we need to add 'NSLocationAlwaysUsageDescription' (or at least 'NSLocationWhenInUseUsageDescription') to info.plist to get the location permissions to monitor and range the beacons on iOS8.

Have a look at the attached images. I have downloaded this project and tried to test the 'Indoor Navigation' app. In Settings, I don't have any location access.

When I wants to configure my beacons, its giving an error 'No beacons were detected'. Its valid because we are trying to monitor the beacons without location access. It should not work as expected.

Let me know am I correct or not.


I have added 'NSLocationAlwaysUsageDescription' tag to info.plist to try and test the app. No where its asking for location access. ideally, iOS8 will show an alert for location access to allow the user to get the access. Since its not showing alert even after I add 'NSLocationAlwaysUsageDescription' tag. So, Still the settings are same.

Seems, something is missing in the code.

Can you please check this issue. Thank you.

img_0079
img_0080
img_0081

Not working out of the box with Cocoapods 0.36.4 and use_frameworks

I have to use a project that's mixed with Swift (such as Alamofire) and Objective C libraries (such as this). But Xcode can't find EstimoteIndoorSDK files after installing with Cocoapods 0.36.4 with use_frameworks. Supposedly we don't need the bridging header files now with the use_frameworks setting. I did end up getting it to work but had to do some finagling to do so. I had to use import EstimoteIndoorSDK at the tops of my ViewControllers and then had to change

#import "ESTBeacon.h"
#import "ESTDefinitions.h"

in ESTPositionedBeacon.h (https://github.com/Estimote/iOS-Indoor-SDK/blob/master/EstimoteIndoorLocationSDK/Headers/ESTPositionedBeacon.h#L4-L5) to

#import <EstimoteSDK/ESTBeacon.h>
#import <EstimoteSDK/ESTDefinitions.h>

That allowed me to at least build and use the example files.

Remote location mapping system with Estimote?

Hi,

I read about Estimote beacon and location location mapping system. It is really awesome!

I want to use Estimote beacon and integrate in my app using Estimote SDK. I read about indoor location mapping system and I want to use that effectively in my app. I have a question based on my requirement, I want to place beacons across 2 countries and detect beacon signalling thru some centralised service and provide location mapping path. Is this possible with Estimote beacons and sdk? For ex: I have 10 beacons here in location 1 (country 1), I have another 10 beacons in location 2 (in another country 2). Can I use Estimote and maintain some server to connect all the beacons with some software program and get location mapping system?

Please advise.

Can not run

hello friends,
i am a developer in shanghai china. several days early i have downloaded your demo created by swift.but i can not run it in my iPhone 5s.the error is that

"dyld: Library not loaded: @rpath/libswiftCore.dylib
Referenced from: /private/var/mobile/Containers/Bundle/Application/428E6679-7FDC-4589-8DFE-BBE0C723B42C/IndoorMap.app/IndoorMap
Reason: no suitable image found. Did find:
/private/var/mobile/Containers/Bundle/Application/428E6679-7FDC-4589-8DFE-BBE0C723B42C/IndoorMap.app/Frameworks/libswiftCore.dylib: mmap() error 1 at address=0x100524000, size=0x00220000 segment=__TEXT in Segment::map() mapping /private/var/mobile/Containers/Bundle/Application/428E6679-7FDC-4589-8DFE-BBE0C723B42C/IndoorMap.app/Frameworks/libswiftCore.dylib "

2016-07-01 11 57 40

i have tried many solutions to solve this problem,but all of them dose not worked.so i come here to look for your help .
lookforward to your reply.
thanks!

Can't create correct location using ESTLocationBuilder

Hi, guys, I can't create correct location manually and have some questions about it. I draw picture to explain what location I want to build. I was looking for answers on my question in your manual and in comments for SDK code but I still can't understand some moments:

  1. What is ESTLocationBuilderSide? How can I implement correctly these values for my location?
  2. How to implement setLocationOrientation:? Is it value in degrees of my deflection from North when I stay face to my location top? (see my picture)

screenshot 2015-05-21 12 11 52

    ESTLocationBuilder *locationBuilder = [ESTLocationBuilder new];
    [locationBuilder setLocationBoundaryPoints:@[
                                                 [ESTPoint pointWithX:0 y:0],
                                                 [ESTPoint pointWithX:0 y:7.46],
                                                 [ESTPoint pointWithX:7.6 y:7.46],
                                                 [ESTPoint pointWithX:7.6 y:0]
                                                 ]];

    [locationBuilder setLocationOrientation:275];

    [locationBuilder addBeaconIdentifiedByMac:kBeaconMac1
                       atBoundarySegmentIndex:0
                                   inDistance:0
                                     fromSide:ESTLocationBuilderLeftSide];

    [locationBuilder addBeaconIdentifiedByMac:kBeaconMac2
                       atBoundarySegmentIndex:1
                                   inDistance:0
                                     fromSide:ESTLocationBuilderLeftSide];

    [locationBuilder addBeaconIdentifiedByMac:kBeaconMac3
                       atBoundarySegmentIndex:2
                                   inDistance:0
                                     fromSide:ESTLocationBuilderRightSide];

    [locationBuilder addBeaconIdentifiedByMac:kBeaconMac4
                       atBoundarySegmentIndex:3
                                   inDistance:0
                                     fromSide:ESTLocationBuilderRightSide];

    self.location = [locationBuilder build];

This is my code, please, tell me what am I doing wrong. Thanks :-)

SSZipArchive Conflict

I'm using the Estimote SDK along with another vendor SDK for augmented reality management, and it seems you are both using SSZipArchive and I'm getting a linker error for duplicate symbols.

Can you rename the SSZipArchive in your code to EST_ SSZipArchive or something to avoid any conflicts?

XCode Compile Errors

Just completed the build oncemore, got the following errors
xcode errors

Using Xcode 7
Enable Bitcode: No

Poorly documented required beacon's MAC address format

The location built using [ESTLocationBuilder addBeaconIdentifiedByMac:....]is saved only when beacon's MAC addresses are lowercase, unseparated such as d49e81631d6a. Otherwise the API returns vague error 400 : Beacon not found. This required MAC address format is not documented.

The comments in the examples suggest uppercase: MAC1. On the other hand cloud panel suggests colon-separated strings like d4:9e:81:63:1d:6a.

I'd suggest either documenting expected MAC address format in method's doc or introduce the formatter which would tranform various input formats to the one expected by your API.

Crashing

compiled and stored on my iPad but it keeps crashing after making a map. Basically mapping out works, but it crashed directly after that. Also loading a Json mapped with the Estimote app causes a crash. Any thoughts?

Setting the delegate of ESTIndoorLocationManager isn't working

The image below describes the problem:
screen shot 2014-12-09 at 18 58 28
I set the delegate and afterwards it isn't set in the object but I can't imagine why.
The location afterwards is set in the manager object.
The Object which is set as delegate implements the ESTIndoorLocationManagerDelegate (obviously).

Sticker beacon locations are incorrect in Indoor Location App

From this article, we understand the location of sticker beacon is updated every 3 minutes. https://blog.estimote.com/post/165720366660/estimote-introducing-low-power-asset-tracking-api

However, Indoor App is not showing the correct locations of the sticker beacons even after 3 minutes. Can you please help? We want Indoor App to show proper location (I am using the native App and not any SDK).

Just to be clear, the phone and the sticker beacons are moving together in the Indoor Location app. Even when the sticker beacon is in one corner, if the phone moves to the other corner, both sticker beacon and indoor location are showing at the same place.

We are trying to implement asset tracking and would like to use mesh network to update location of all stickers. However, the calls to detect location of sticker is not returning proper location. Upon investigation, we see the above mentioned behavior in Indoor app as well. Can you please explain how to fix in Indoor app so we can test our custom app? Thanks in advance for your help.

Estimote Fetch Location Issues in Objective C

Below is an issue I recently encountered, at the moment this error is paralyzing my progress to actually test the application
estimotefetcherrors

Note: My App ID and Taken were entered, along with my Location Identifier
Using Xcode 7

Import error

I followed the steps as it is(manual addition of SDK) in the tutorial bur when I try to build the application it is showing error as its not able to import the EILIndoorSDK.h file. I am using Xcode version 8.1 with Swift 3 +
screen shot 2016-12-22 at 7 19 38 pm
.
screen shot 2016-12-22 at 7 06 47 pm

CocoaPods and SDK v2.0.1

Regarding #13 :

The CocoaPod podspec is not updated to use the latest version of the SDK. I tried to update it, but that did not work.

I tried the following scenario's:

  • CocoaPods (SDK v1.6.0) + additional setup steps => working fine
  • CocoaPods SDK updated to v2.0.1 + additional setup steps => fails to build:
Undefined symbols for architecture x86_64:
  "_ESTBulkUpdaterFailNotification", referenced from:
      -[d2G3rnRv3eOl3OskIgf4GD j0xmiYDeetjApYp] in libEstimoteIndoorSDK.a(libEstimoteIndoorSDK.a-x86_64-master.o)
  "_OBJC_CLASS_$_ESTCloudAuthorization", referenced from:
      objc-class-ref in libEstimoteIndoorSDK.a(libEstimoteIndoorSDK.a-x86_64-master.o)
  "_OBJC_CLASS_$_ESTCloudManager", referenced from:
      objc-class-ref in libEstimoteIndoorSDK.a(libEstimoteIndoorSDK.a-x86_64-master.o)
  "_OBJC_CLASS_$_ESTCloudMapper", referenced from:
      objc-class-ref in libEstimoteIndoorSDK.a(libEstimoteIndoorSDK.a-x86_64-master.o)
  "_OBJC_CLASS_$_ESTEstimoteAccount", referenced from:
      objc-class-ref in libEstimoteIndoorSDK.a(libEstimoteIndoorSDK.a-x86_64-master.o)
  "_OBJC_CLASS_$_ESTRequestGetBeaconsPublicDetails", referenced from:
      objc-class-ref in libEstimoteIndoorSDK.a(libEstimoteIndoorSDK.a-x86_64-master.o)
  "_OBJC_CLASS_$_ESTRequestPostFormData", referenced from:
      _OBJC_CLASS_$_s0WkzU8ypb35yVLaFcS9zUSGNEdh0n4 in libEstimoteIndoorSDK.a(libEstimoteIndoorSDK.a-x86_64-master.o)
  "_OBJC_CLASS_$_ESTUtilityManager", referenced from:
      objc-class-ref in libEstimoteIndoorSDK.a(libEstimoteIndoorSDK.a-x86_64-master.o)
  "_OBJC_METACLASS_$_ESTRequestPostFormData", referenced from:
      _OBJC_METACLASS_$_s0WkzU8ypb35yVLaFcS9zUSGNEdh0n4 in libEstimoteIndoorSDK.a(libEstimoteIndoorSDK.a-x86_64-master.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
  • CocoaPods SDK updated to v2.0.1 + EstimoteSDK updated to v3.7.1 (dependency) + additional setup steps => fails to build:
Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_ESTRequestPostFormData", referenced from:
      _OBJC_CLASS_$_s0WkzU8ypb35yVLaFcS9zUSGNEdh0n4 in libEstimoteIndoorSDK.a(libEstimoteIndoorSDK.a-x86_64-master.o)
  "_OBJC_METACLASS_$_ESTRequestPostFormData", referenced from:
      _OBJC_METACLASS_$_s0WkzU8ypb35yVLaFcS9zUSGNEdh0n4 in libEstimoteIndoorSDK.a(libEstimoteIndoorSDK.a-x86_64-master.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
  • EstimoteSDK + EstimoteIndoorSDK manual install + additional setup steps => working fine

So there is no problem with the SDK itself I think, but something with the podspec

"can't fetch location" is it because SDK works only with Beacons?

Thank you for the amazing technology.

I am using the 10 stickers dev kit.
I copied and pasted the app id and Token.
Then pasted some of the sticker's identifier in here:
let fetchLocationRequest = EILRequestFetchLocation(locationIdentifier: "identiferID")

I was prompted by this error message "can't fetch location".
I think it had to do with JOSN location file and location connection.
can't fetch location: Optional(Error Domain=ESTRequestGetJSONErrorDomain Code=2 "You have no access to requested resource or it doesn't exist." UserInfo={NSLocalizedRecoverySuggestion=Verify if requested resource exists and belong to you., NSLocalizedDescription=You have no access to requested resource or it doesn't exist.})

By the way when I browser the cloud.estimote.com under my nearables
All of their locations is set to: unkown.
If that was the issue, then how do I fix it?

You can only turn left

I just tried to make this work with my apartment and when I went around my living room making right hand turns, the application could never map my room. When I tried reversing my path and making left hand turns, it figure out the room on it's first try. I'm not sure if I was doing something wrong or if it was the shape of my room, but some suggestion to users that maybe they should try walking the other way around the room would be very helpful.

Convert CGPoint to ESTPoint

Hi, guys, could someone tell me, is it possible to convert simple CGPoint to ESTPoint? For example, I have ESTPoint (2.5, 2.5), and for my instance of ESTIndoorLocationView it is the center of location (if its size is 5m X 5m). Also I have another object on screen but with coordinates relative to whole device's screen (self.view), for example, with CGPoint (170, 200). How can I translate point in context of screen to point in context of my location?

arKitPoint method return value

I think there is a problem with your arKitPoint(fromIndoorLocationPoint:) method in 3.0.0.alpha.1 version. Documentation says that it returns position in ARKit coordinate system, but when I print it using this method, and I haven't move, it says I'm e.g. at (3.470437, -6.539561) point. Shouldn't it show something near (0, 0) since ARKit origin will be in the place I'm right at that moment?

This is how my code snippet looks like:

func indoorLocationManager(_ manager: EILIndoorLocationManager,
                               didUpdatePosition position: EILOrientedPoint,
                               with positionAccuracy: EILPositionAccuracy,
                               in location: EILLocation) {
    print(manager.arKitPoint(fromIndoorLocationPoint: position))
}

Bug on your Estimote Indoor Location app

Please fix ASAP, as it crashes app and keeps crashing even if deleted and reinstalled.

Steps to reproduce:

  1. Create location
  2. Open location
  3. Close app
  4. Delete location on another phone/web
  5. Try to open Indoor app

Estimote + Arkit

Hi, I have a problem when I try to use update location with estimote via SDK, I always get an interrupted session in arkit, it is a bug or I need do something else to integrate with Arkit?

Issues with Indoor Location App

When creating floor map using the Indoor Location App, I went through all the steps and before it generates the floor map, it gives me this error - "couldnt confirm settings with all beacons". The beacons seem to be setup right and I am able to connect to beacons just fine and make changes to any of the beacon settings.

Note: I am using iOS Indoor Location App and not using the SDK. Can you help how to fix this? See image attachment.

1523682758665

Using ARKit location together with custom ARSCNView

I would like to use experimental ARKit location method, but it seems that it takes camera resource and I can't create custom scene with ARSCNView. Is there a way to use the same session to improve indoor location accuracy and e.g. draw objects etc.?

AppStore App Rejected due ARKit used in the framework but not used

I have integrated Estimote indoor location sdk and one of the framework used in the estimote sdk's file named "EILIndoorLocationManager.h" contains ARSession which is the reason my app got rejected saying the reason 'Apps using ARKit should provide rich and integrated augmented reality experiences. We encourage you to review your app concept and incorporate more robust AR features and functionality. Note that merely dropping a model into an AR view or replaying animation is not enough.'

Is there any update coming for this kind of issue.
Please suggest something for this issue

My sad experience with Estimote Location UWB Beacon.

I am a mobile app developer and my customer wanted to use an indoor navigation. Estimote Location UWB Beacon were chosen because of the many repositories on their github, which should help to customize these devices to your needs.

I tested 4 repositories: Unity3D-Indoor-Example, Android-Indoor-SDK, iOS-Indoor-SDK, Robotics-Indoor-SDK.

  1. To begin with, I had to register these devices manually by chatting off with "estimote" support.

  2. The official indoor map creation app estimote doesn't work.
    2020-02-07 6 51 19 PM

  3. Robot navigation can work only 30 minutes!
    2020-02-07 6 51 27 PM

  4. Repositories contain many errors. They have not been updated for 2-3 years yet. I cannot remember them all, screenshots with descriptions are below.
    Screenshot 2020-02-07 at 6 54 43 PM

Screenshot 2020-02-07 at 6 57 09 PM

  1. Support doesn't work on the forum. My post is still unanswered: https://forums.estimote.com/t/error-in-building-add-indoor-location-to-an-ios-app-example/10774. By mail I got answer: "We can assist with software development. The cost of such a service is around $15,000.”

I hope this note will help you choose beacons from a more responsible manufacturer!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.