Hello everyone,
I hope you’re all doing well. I have a question regarding the use of Apple's Find My network.
I’m in the early stages of developing an app that would track third-party Find My-compatible tags. Before proceeding further, I want to ensure that I am compliant with Apple’s guidelines and policies.
Can anyone provide insight into whether Apple allows developers to use the Find My crowd-sourced network for their own apps? Specifically, I'm interested in tracking third-party Find My tags through my app.
Any guidance or resources you can share would be greatly appreciated!
Thank you!
Maps & Location
RSS for tagLearn how to integrate MapKit and Core Location to unlock the power of location-based features in your app.
Post
Replies
Boosts
Views
Activity
Our app is a time reporting service with various functions around that. The user checks in at work, checks out when they go home.
We thought it'd be useful to provide a live activity to show how long they have worked for.
There is also a couple of other cool things we could do that users would love, but i couldn't find definitive answers to the questions below.
1.
We have a geofence-based function that checks the user in when they for example arrive at work, and check them out when they go home, so that they don't have to open the app.
However, this means that we will need to start and end the live activity from within a geofence trigger. Is this possible?
2.
It seems that the maximum time for a live activity is 8 hours? Sometimes people work for longer... How would we solve this? i would be fine with 12 since it would solve most cases.
Is it possible somehow to go beyond 8 hours up to 12?
If not, is there a callback that "8 hours are up!" so that i could do a final update on the live activity from a counter to "you started working at 09:04"
3.
I have seen that some live activities have buttons. It would be neat if the user can check out via a button on the live activity. However, since we take location and call our servers when checking out, we
need to be able to use both the locationmanager and make a network call from the live activity. Is this possible?
Thanks in advance, Cheers
Hello! I want to create an indoor mapping application in Swift, using the LiDAR scanner. I searched among frameworks and I found that ARKit, RealityKit and RoomPlan would be useful. Which is the proper way to create a 2D indoor mapping app? And which is the proper way to create a 3D indoor mapping app? Are there any modifications I have to make on my code in order to have both?
Users of my app are complaining about incorrect GPS location decoding. I found that the bug is in the reverseGeocode, because it returns nonsensical results.
Example:
The user is located in Oberhausen, Deutschland at coordinates 51.482015, 6.887064.
ReverseGeocode decodes the coordinates as "Oberhausen bei Kirn". It is mistaken 250 km!
ReverseGeocode works like this:
51.48, 6.88 - Oberhausen (OK)
51.482, 6.887 - Oberhausen bei Kirn (Error)
51.48, 6.89 - Oberhausen (OK)
Test result:
If the coordinate precision is greater than 2 decimal places, the reverseGeocode does not work properly.
From what the user told me, more apps behave like this. Probably all that work with precise coordinates.
Searching for nearby POIs using MKLocalPointsOfInterestRequest has been unsuccessful with error Error Domain=MKErrorDomain Code=5 "(null)" UserInfo={MKErrorGEOError=-10}. Is there any solution?
I consistently get an error that the Map initailizer I'm using is deprecated and I should use a MapContent builder instead. Various errors such as "'MapAnnotation' was deprecated in iOS 17.0: Use Annotation along with Map initializers that take a MapContentBuilder instead." or "'init(coordinateRegion:interactionModes:showsUserLocation:userTrackingMode:annotationItems:annotationContent:)' was deprecated in iOS 17.0: Use Map initializers that take a MapContentBuilder instead."
The problem in my code seems to be located here:
import SwiftUI
import MapKit
struct ContentView: View {
@State private var region = MKCoordinateRegion(
center: CLLocationCoordinate2D(latitude: 34.0522, longitude: -118.2437),
span: MKCoordinateSpan(latitudeDelta: 0.5, longitudeDelta: 0.5)
)
@State private var restaurants: [Restaurant] = []
var body: some View {
Map(coordinateRegion: $region, annotationItems: restaurants) { restaurant in
// This uses the updated Annotation API
MapAnnotation(coordinate: restaurant.coordinate) {
VStack {
Text(restaurant.restaurantName)
.bold()
.foregroundColor(.white)
.padding(5)
.background(Color.black.opacity(0.75))
.cornerRadius(10)
.fixedSize()
Image(systemName: "mappin.circle.fill")
.foregroundColor(.red)
.font(.title)
}
}
The errors persistently occur in the lines immediately below var body: some View {
I've been stuck on this for two days now. Any help would be greatly appreciated.
We have an app that has been using iBeacons and Geofences for 10+ years. While I cannot state when it started, we're seeing sporadic delays of hours to receive iBeacon "didExitRegion" event. I can prove this out on my iPhone running iOS 17.4.1 by setting up both a Geofence and an iBeacon in the same physical location.
Yesterday, I have a several hour gap with no iBeacon events, but successfully see Geofence events. Then, an hour+ after leaving the Geofence, I get multiple didExitRegions from the same iBeacon (all without touching the app). Then this morning, everything again is working great.
It "feels" like the phone stops delivering entry and exit events for the Bluetooth iBeacon for some period of time. Then, it resumes monitoring by first providing old event that were not delivered to us in real time. It's not atypical for me to see a didExitRegions event that should happen around 5pm that instead happens in the middle of the night.
So far, I have not noticed this behavior for our app running on iOS 16.4.1. We're currently testing other versions of iOS to see if we can pinpoint when it started. I have a full battery so we've ruled out power saving mode. Bluetooth is on with all permissions of course. We are still receiving Geofence updates so we must have available background time.
Is there any known issue in iOS 17+ that would explain this behavior? Or, is there any Feedback/Radar to explain it? Known issue?
My app is using iBeacons, and I am using func startMonitoring(for region: CLRegion). Then I am using func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) and func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion) to run logic when user enters / exits certain Beacon CLBeaconRegion. Everything worked fine until recently, iOS 17 update I guess.
Now after I call startMonitoring(for: region) the code works for couple hours, and then it seems my app is somehow suspended and no longer able to use CoreLocation, and my code does not work, entry and exit events to beacon regions are NOT detected.
Funny enough I have some Beacon managment apps that can scan for nearby beacons, when I run one of those apps, I see on top of iPhone screen “hollow arrow” sign that marks CoreLocation being used, and then my app works for few minutes, and then again my app is suspended, and no entry/exit events into beacon regions are detected. I could figure out how to engage CoreLocation but that would rely on user intentionally opening my app, and the sole purpose of my app is to remind user when he is near one of his Beacons, so expecting user to remember to open my app defeats my apps purpose.
I added Location Updates under Background Modes for my app , maybe my app has little bit more background time until it is suspended, but the problem still persists.
So for any Beacon based app to work it should be able to monitor for nearby beacons, and run logic once beacons are detected. Any suggestions on how I could solve this?
iOS 17 CLMonitor has BeaconIdentityCondition that can match UUID, major, minor but this is only to detect we are NEAR a Beacon (entry event), what about exit event? Should I monitor for a change in Condition from .satisfied to .unsatisfied and that transition is Exit event?
My questions:
Is there a way to use old code: startMonitoring(for: region) - how to fix my app so it DOES NOT get suspended, and so that this method can monitor for beacons in background with AlwaysAllow authorization?
If not and I must switch to CLMonitor how do I capture Exit event - when user exits Beacon region in iOS 17 using CLMonitor?
Thanks
Seeing the following, whether initializing Maps() in SwiftUI or using Apple's example Overlay Project since updating to Xcode 15.3:
Thread Performance Checker: Thread running at User-interactive quality-of-service class waiting on a thread without a QoS class specified (base priority 0). Investigate ways to avoid priority inversions
PID: 2148, TID: 42369
Backtrace
=================================================================
3 VectorKit 0x00007ff81658b145 ___ZN3geo9TaskQueue5applyEmNSt3__18functionIFvmEEE_block_invoke + 38
4 libdispatch.dylib 0x00000001036465c2 _dispatch_client_callout2 + 8
5 libdispatch.dylib 0x000000010365d79b _dispatch_apply_invoke3 + 527
6 libdispatch.dylib 0x000000010364658f _dispatch_client_callout + 8
7 libdispatch.dylib 0x0000000103647c6d _dispatch_once_callout + 66
8 libdispatch.dylib 0x000000010365c89b _dispatch_apply_redirect_invoke + 214
9 libdispatch.dylib 0x000000010364658f _dispatch_client_callout + 8
10 libdispatch.dylib 0x000000010365a67f _dispatch_root_queue_drain + 1047
11 libdispatch.dylib 0x000000010365af9d _dispatch_worker_thread2 + 277
12 libsystem_pthread.dylib 0x00000001036e2b43 _pthread_wqthread + 262
13 libsystem_pthread.dylib 0x00000001036e1acf start_wqthread + 15```
I am trying to load an auxiliary window from an AppKit bundle that loads a NSViewController from a storyboard. This NSViewController displays a MKMapView.
I want to avoid supporting multiple windows from my Catalyst app so I do not want to load this window via a SceneDelegate, and that is why I have chosen to go the AppKit bundle route.
If I load a similar view controller which contains a single label, then all works as expected.
However, if I try to load a view controller with the MKMapView, I get the following error after crashing:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MKMapView nsli_piercingToken]: unrecognized selector sent to instance 0x15410f600'
DropBox link to sample app with buttons on a view to select either the "Map View" (crashing) or the "Label View" (working):
https://www.dropbox.com/scl/fi/q9daurhzqvil9o2ry6k1t/CatalystMap.zip?rlkey=yjbqfn6uxfrfh1jgsdavagta7&dl=0
Good afternoon, I'd like to get detailed information about the price usage of the Apple Map in my app in IOS (Swiftui for Iphone and Ipad). I'd like to establish a future price for the app subscription and to do that I need to obtain the precise prices for opening the map, consulting Map items, creating routes, the price of each consulting, and any other price that is related to the map usage process.
I have been searching for this information and it has not been easy to find answers. I appreciate it if I could get the information.
Best regards,
Marcello Lima
Hey, I've developed a new audio-based navigation technology for my Master's project at Imperial College London. The main aim of it is to take away the need for an annoying voice based prompt to interrupt your music ("Turn left in 300 yards"). Instead I've created a more natural interaction where the listener's music is binaurally spatialised to provide less annoying directional information.
I've tested the product with many users and the feedback has been really positive! I just wondered whether anyone knew someone at Apple that I could have a chat with about this technology? I think it would work great if it was linked to Apple Maps, especially now with the integration of head-tracking into the Airpod Pro's.
Dear Community,
After logging into my Developer Account, I am unable to access MapKit JS link under Additional resources. Each time I try to access https://maps.developer.apple.com/ or specifically https://maps.developer.apple.com/token-maker the browser returns 403 forbidden error.
I have tried to use different browser an device and I get the same error.
My MapKit JS Authorization token has expired and I need to reissue fresh token ASAP.
Kindly advice.
Regards,
Swapneel Shah
Hi there,
I am trying to develop a country guessing game using MapKit and GeoJSON data. I have verified that my data creates the outline of the country properly using other methods, but I run into an error where the map clips and does not show portions of the countries or islands when zooming at certain levels of the map. I receive the warnings in the terminal "Mismatching number of indices, indexCount: 30, triangulatedIndexCount: 27" and "Triangulator failed to fully triangulate polygon: (0.1296, 0.303328), (0.108053, 0.296605), (0.0671644, 0.289883), (0.0586311, 0.281121), (0.0397156, 0.27289), (0.0323911, 0.262393), (0.0610489, 0.260732), (0.102507, 0.284671), (0.140053, 0.292602), (0.133511, 0.291167), (0.137707, 0.293659), (0.138489, 0.29872)" I am not sure what these tuple values are, or how to fix the errors, as I have adjusted my data (removing duplicate coordinates, refreshing the map, etc). How am I able to counteract these warnings, or at least get a sense of what they are asking?
Hello, I developed an application that uses iBeacons to create events, however when the app is in the terminated state I notice that part of my code is activated but the rest of the process is not activated ex : ranging beacon and notification. Is there a way to completely wake up my app when it is in terminated state or at least send a notification to the user to inform them that the app must be opened to put it back in background state so that the app working correctly?
I’m working on updating one of my apps to the asynchronous location updates API, but have been running into an unhelpful error.
Here's my code:
@Observable
class CurrentLocation: NSObject, CLLocationManagerDelegate {
private(set) var location: CLLocation?
private let locationManager = CLLocationManager()
override init() {
super.init()
self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyReduced
}
func requestLocation() async throws {
print("requesting location")
requestAccess()
for try await update in CLLocationUpdate.liveUpdates() {
self.location = update.location
if update.isStationary {
break
}
}
}
}
But after calling requestLocation(), I receive the following error in the console without any location updates:
{"msg":"#locationUpdater received unhandled message", "Message":kCLConnectionMessageCompensatedLocation, "self":"0x600002eaa600"}
Googling this error yields absolutely no matches. I’ve ensured that I have the necessary Info.plist entries (as the old, synchronous location update code I have is also working without issues). I’d be grateful for any assistance!
On iPhone 14 Pro running iOS 17.4.1, tapping on MKMapView triggers a dozen or more additional hitTest calls. At the moment, only one device has encountered this issue.Not sure if it's a hardware issue or a bug with MKMapView.
Adding MKMapView to the app could potentially cause multiple hitTest calls on views across other pages.
My MacBook Air M2 system version macOS Sonoma 14.5 Beta (23F5049f)
The error occurred: from the end of March 2024 to today (April 8, 24)
Problem: The system positioning information is seriously wrong, including but not limited to: time zone, Safari, map app, weather app, search app... (PS. The positioning is correct when using Google Chrome and Google Maps, but it is still wrong when using Google Maps on Safari)
Background:
I came to Germany from mainland China at the end of March.
The Apple ID region I use is Germany.
The location of my iPhone and Apple Watch can be refreshed to Germany normally, and several of my AirTags have been refreshed to Germany.
Tried but failed:
I searched for some bash commands to try to clear and clear the cache of the map app and system location information.
rm -rf ~/Library/Containers/com.apple.Maps
rm -rf ~/Library/Application\ Support/com.apple.findmy
sudo rm -rf /Library/Caches/com.apple.GeoServices
sudo rm -rf /Library/Caches/com.apple.locationd
defaults delete com.apple.locationd.plist
Turn off location services in System Settings > Privacy and Security, shut down and restart the phone, and then turn the service back on.
Turn my VPN on and off.
Clear my network information.
Since there are many files saved, the restore operation is not planned.
我的MacBook Air M2 系统版本macOS Sonoma 14.5 Beta版(23F5049f)
错误发生时间:2024年3月底到今天(24年4月8日)
问题:系统定位信息严重错误,包括但不限于:时区、Safari、地图app、天气app、查找app... (PS.使用Google Chrome浏览器与Google Maps时定位正确,Safari使用Google Maps仍然错误)
背景:
我从3月底从中国大陆来到欧洲德国。
我使用的Apple ID地区是德国的。
我的iPhone和Apple Watch定位能正常刷新到德国,且我几个AirTag已经刷新到德国。
尝试但都未成功:
我搜索了一些bash命令尝试清除、清空地图app和系统位置信息的缓存。
rm -rf ~/Library/Containers/com.apple.Maps
rm -rf ~/Library/Application\ Support/com.apple.findmy
sudo rm -rf /Library/Caches/com.apple.GeoServices
sudo rm -rf /Library/Caches/com.apple.locationd
defaults delete com.apple.locationd.plist
关闭系统设置>隐私与安全中的定位服务,关机重启,再重开这项服务。
开关我的VPN。
清除我的网路信息。
由于保存的文件较多,不打算进行还原操作。
"When an iBeacon is received, a BLE scan API is called within didEnterRegion. However, if executed while the screen is off, Core Bluetooth's didDiscover does not function. Yet, if the screen is turned on once and then turned off again, didDiscover functions. Is there a way to make Core Bluetooth's didDiscover work while the screen is off?"
Let me know if you need further assistance or clarification!
func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {
if let beaconRegion = region as? CLBeaconRegion {
startRanging(in: beaconRegion)
}
}
func startRanging(in beaconRegion: CLBeaconRegion) {
// バックグラウンドタスクを開始
bgTask = UIApplication.shared.beginBackgroundTask(expirationHandler: { [self] in
print("バックグラウンドタスクの有効期限が切れ")
// バックグラウンドタスクの有効期限が切れたときに、バックグラウンドタスクを終了
self.lm!.stopRangingBeacons(satisfying: beaconRegion.beaconIdentityConstraint)
UIApplication.shared.endBackgroundTask(bgTask)
// バックグラウンドタスクの識別子を無効
bgTask = .invalid
})
// レンジング開始
self.lm!.startRangingBeacons(satisfying: beaconRegion.beaconIdentityConstraint)
//サービス指定してCoreBluetoothを起動
self.centralManager.stopScan()
self.centralManager.scanForPeripherals(withServices: [self.kServiceUUID], options: nil)
// バックグラウンドタスク終了
let time = UIApplication.shared.backgroundTimeRemaining - 1.0
DispatchQueue.main.asyncAfter(deadline: .now() + time) {
self.stopRanging(in: beaconRegion)
}
}
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
print("---- didDiscover ----")
print("peripheral-->\(peripheral)")
print("advertisementData-->\(advertisementData)")
print("rssi-->\(RSSI)")
print("---------------------")
}
I'm currently working on an app that requires location-based notifications, particularly utilizing geofencing to trigger alerts when a user enters specific areas, such as when a student walks into a college campus. However, I'm curious about the behavior of such notifications when the app is fully terminated and not running in the background.
Does anyone have experience implementing geofencing and location-based notifications in apps that are fully terminated? Are these functionalities still active, or does the app need to be running in the background for them to work properly?
Any insights, experiences, or best practices regarding this matter would be greatly appreciated.
Thank you in advance for your help!