The applicationWillTerminate method is called by the system when the app is about to terminate. However, it's important to note that this method is not called in all cases when the app is terminated. For example, if the app is terminated by the user by swiping it from the App Switcher, or if the system terminates the app due to low memory or other system events, the applicationWillTerminate method will not be called.
In your case, it's possible that the app is being terminated in a way that doesn't trigger the applicationWillTerminate method on the first launch. This could be due to the way the app is installed or due to other system events happening at the same time.
To address this issue, you could consider using other app lifecycle methods such as applicationDidEnterBackground or applicationWillResignActive to create the region when the app is first launched. These methods are called when the app is sent to the background or when the device receives a phone call or other interruption.
Alternatively, you could consider using a different approach to monitor the user's location, such as using a background location service or a push notification triggered by the server to wake up the app when the user's location changes.
It's also worth noting that constantly monitoring the user's location can have a significant impact on battery life, so it's important to implement this functionality carefully and consider the user's privacy and battery concerns.