Core Location — Foundations Skill
Purpose
Route Core Location implementation tasks to the minimum required Core Location Knowledge Contracts. v1 scope is obtaining location access and receiving location: authorization levels and their Information Property List keys, the two delivery mechanisms, requested versus granted accuracy, and running outside the foreground — not geocoding, not beacons, not heading or visits, and not drawing a location on a map.
Routing
Load only the contracts relevant to the task. All paths relative to knowledge/core-location/.
- Reading
authorizationStatus/CLAuthorizationStatus; callingrequestWhenInUseAuthorization()/requestAlwaysAuthorization(); handlinglocationManagerDidChangeAuthorization(_:); or declaringNSLocationWhenInUseUsageDescription/NSLocationAlwaysAndWhenInUseUsageDescription-> authorization-and-usage-strings.md - Iterating
CLLocationUpdate.liveUpdates(_:); callingstartUpdatingLocation()/stopUpdatingLocation(); implementinglocationManager(_:didUpdateLocations:)/locationManager(_:didFailWithError:); or reading a fix'stimestamp-> location-updates-and-delivery.md - Setting
desiredAccuracy; branching onaccuracyAuthorization/CLAccuracyAuthorization; or callingrequestTemporaryFullAccuracyAuthorization(withPurposeKey:)with itsNSLocationTemporaryUsageDescriptionDictionaryentry -> accuracy-and-precise-location.md - Setting
allowsBackgroundLocationUpdateswithUIBackgroundModes; callingstartMonitoringSignificantLocationChanges(); building a geofence withCLMonitor/CLCircularGeographicCondition; or handling a location-triggered relaunch -> background-monitoring-and-launches.md
Never load more than the contracts relevant to the specific question.
For how a usage-description string should be worded, route to
skill.app-store-review-guidelines.submission. For whether to show a
pre-permission screen and what it says, route to
skill.human-interface-guidelines.foundations.
Stop Conditions
Stop and report if the requested topic has no matching Knowledge
Contract in knowledge/core-location/ — do not guess or fall back to
general knowledge. CLGeocoder forward and reverse geocoding, beacon
ranging (CLBeacon, CLBeaconIdentityCondition), heading
(CLHeading), visit monitoring (CLVisit), and LocationButton are
out of scope entirely (see docs/architecture/domain-map.md). The
deprecated startMonitoring(for:) region API is not covered; condition
monitoring is CLMonitor's.
Displaying a location on a map belongs to a future map-rendering domain, not yet built — report that boundary explicitly rather than answering from general knowledge.
Where a photo was taken is not this domain's question, even though the
value it returns is a CLLocation. A task about a photo's recorded capture
place routes to photos; knowledge.photos.asset-fetching Rule 5 owns it,
including what authorization it does and does not require, and nothing here
applies to it.
Scheduling background work with BGTaskScheduler is backgroundtasks'
job. The one place the two meet — whether a movement-triggered feature
should use a scheduled task at all — is answered by
background-monitoring-and-launches.md here, which owns that decision;
everything else about BGTask belongs to that Skill.