When you’re working with geofences, there are a few things you need to keep in mind.
There is a hard limit of twenty for the number of geofences an app can register because regions are shared resources that rely on specific hardware capabilities. If you need to monitor more regions, the documentation recommends registering only regions that are close to the user’s current location and updating that list when the user moves.
After crossing the boundary, the user has to travel a minimum distance and remain on the same side of the boundary for at least twenty seconds before the system calls the delegate methods. With this implementation, Apple reduces the number of spurious calls to the delegate.
When Background App Refresh is disabled, geofences won’t trigger the wake-up of your app. The user needs to explicitly launch the app to resume the delivery of location-related events.
Instead of circular regions, you can register iBeacon regions. Apart from the trigger, they work the same way.