I got the same problem and found an solid solution, although I cannot pinpoint why my simulator works while my device don't.
Check all localized files
Just check if all your localized files are localized for the device's language. They changed on iOS11 the way Locale works, and since them the localization language will be set to the device's language only if all localized files are present, as commented here. Else, it will default to the Base language.
My Case
In my case, I was only using .strings
files to localize my framework, embed in my app. But the Main.storyboard
and LaunchScreen.storyboard
were Base localized by default.
I added the device's language to this storyboards localization lists and everything start to work ok on the device.
Investigation
After that, to investigate further, I
- Returned the localization of this files to the previous state;
- Removed all localization with this method;
Either way, after the solution, even with this changes everything kept working as expected. I suppose the first setup change something in project.pbxproj
stuff.
TL'DR
Any case, try to keep every localized file localizing all desired languages and everything should be fine. Nevertheless, it's a little bit mysterious how Locale settings are working these days.