After so many years this problem still troubled me (and likely thousands of other programmers) for more than an hour.
Given that the link in the accepted answer above by Daij-Djan is already dead (Updated link is now at https://kb.applingua.com/2015/10/how-to-localize-app-names/), I'm writing yet another answer with my added cases.
Make sure you have done the following:
Info.plist is not ticked for your target
- Info.plist has "Application has localized display name" set to YES
- Info.plist has "Bundle name" (CFBundleName) and its value is "$(PRODUCT_NAME)" (Don't ask me why. If I set this to some other value, it doesn't work.)
- Info.plist has no entry of "Bundle display name" (CFBundleDisplayName)
- InfoPlist.strings is ticked for your target
- InfoPlist.strings is ticked for
all languages (in my case, Base and English only.) at least the Base language.
- InfoPlist.strings has
both "CFBundleDisplayName" and "CFBundleName" entries
The above worked for me. I was primarily missing the "$(PRODUCT_NAME)" value part for the past hour.
If that still doesn't work, you should try creating a brand new XCode project and try to name the app into something else by following the above guides. Then, compare the Info.plist and your real project's Info.plist and see what's the difference. That's exactly how I find out about the "$(PRODUCT_NAME)" requirement.