After performing some tests, there are two types of settings for the Geocoder service:
- Autonavi (amap.com) for user located in Mainland China
- Apple Map for the rest of the world (I haven't tried all the countries)
Like you explained the Autonavi service can't use Geocode for locations outside of Mainland China.
You can see the two services by printing out the [CLPlacemark]
We can see the different version_domain:
For China:
"version_domain" = (
autonavi,
revgeo,
cn );
Outside of China (Japan):
"version_domain" = (
apple,
revgeo,
JP );
What to do?
Well, even if sometimes the Geocode might work we can't rely on it. We can't rely on Google either so you may have a look at Nokia Here Map. Otherwise you should change the way your app interacts with Chinese users. Perhaps you can publish a specific app only for the Chinese AppStore.
How to change the Geocoder during development?
In my case as soon as I am connected to a Chinese phone carrier (e.g.: China Mobile) the map will switch to Autonavi. Using a Wifi will also produce the same effect.
What I do is I use the flight mode, then I connect to a VPN outside of China and finally I kill and restart my app.
On the Simulator you need to simulate the location and then using a VPN on your Mac.
Conclusion
China doesn't make things easy for developers but I believe there is always a solution.