I intend on releasing an app in the Apple store that contains an apostrophe in the title. I notice that XCode already has issues in building the code when the 'Target' name contains an apostrophe. I've managed to get around this problem (for now), by using the following character:
’
as opposed to:
'
This seems to build okay, but I'm a little concerned about what may happen later down the line, such as when I submit the final build to the store etc.
Does anyone happen to know if this little workaround is suitable, or am I just setting myself up for a world of problems?
For example, is using an abstract character like this going to mean no one can search for my app in the store?
The display name of the app as it will appear on the iOS spring board is set in the app's infoPlist and has nothing to do with build settings. The Xcode project, target and all other files can be named whatever you like.
You need to set the CFBundleDisplayName in your app's Info.plist. By default this is set to ${PRODUCT_NAME} which is the Xcode configuration variable of the target's name, but it can be what you like.
Going one step further you should use the InfoPlist.strings file to overload this value for different localisations. Setting the value in this file will make the other value in the Info.plist obsolete. These days Xcode comes with a blank one in new projects but it's easily added if it's not there.
The InfoPlist.strings file would look like this:
"CFBundleDisplayName" = "App's Name";
Note: If you've set up the app's name as above and the spring board isn't displaying the Apostrophe then it's probably taking it out deliberately.
It appears you're talking about the title of your application in The App Store, which is entered in iTunes Connect and has absolutely nothing to do with any code you write.
If you place an apostrophe in your app's name in iTunes connect it may have an effect on the users searching for your app as you suspect.but often apps have extended names that offer more context to the app's name and you should also use the keywords to your advantage.
You should check out the iTunes Connect Developer Guide
Edit your CFBundleDisplayName in info.plist to
<string>App's Name</string>
Works perfectly. I've used above in production app, with no issues.
Related
I am developing a Flutter app and submitting it to App Store Connect and instantly get an email that the App was rejected because of
ITMS-90683: Missing Purpose String in Info.plist
Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSContactsUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data are required to include a purpose string. If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).
Supposedly there are 5 purpose strings missing.
It's right that my App is using the APIs listed in the email but I have the keys in my Info.plist file and when running the app on my iPhone the purpose strings are shown when the app requests the corresponging permissions from the user. I even translated the strings using InfoPlist.strings files in the folders en.lproj etc. In the Info.plist I referenced the translated string like this
<key>NSContactsUsageDescription</key>
<string>$(NSContactsUsageDescription)</string>
I already tried unpacking the .xcarchive (in Mac Finder right click -> Show Package Contents) and the .ipa files. In those I found the Runner.app (I think Runner is a Flutter specific "name") and also showed package contents. I found the Info.plist and when I open it in a TextEditor or also XCode the Strings are gone but the InfoPlist.strings files are still there.
I think that something goes wrong when exporting so that the values are cleared?
I actually asked the question to answer it myself hoping that it might help somebody because it took me a hell lot of time to figure out the problem, even though the solution is so easy:
I don't know from which tutorial / Stackoverflow answer or wherever else I had the trick with referencing the translations as a variable as shown in the question.
<key>NSContactsUsageDescription</key>
<string>$(NSContactsUsageDescription)</string>
Just replace the variable with a real purpose string (your app's primary language maybe? I just copy pasted the values from the English string file.)
<key>NSContactsUsageDescription</key>
<string>The reason for access to contacts is…</string>
It seems that those variables are evaluated at build time and not (also) runtime. Because they don't exist, Xcode places an empty string in the Info.plist file. During runtime the InfoPlist.strings files are searched for values overwriting those in Info.plist and therefore the internationalisation did work even though it was actually implemented incorrectly. It seems that for submission to the AppStore it is not enough to have the values in .strings files but there must be a fallback purpose string in Info.plist
A reference from Apple about localising Info.plist can be found here.
I am trying to submit an App to the app store that annoying has the same name as another product. I have created an App in App Store Connect and the name of your app as it will appear on the App Store is unique.
The name that appears under the app however I believe does not need to be unique. As an example I have 2 chess apps on my device, both that display "Chess" under their icon, but have a different name on the app store.
I have set my CFBundleDisplayName as the name I would like to see under the icon, my CFBundleName is using a $(PRODUCT_NAME) variable.
When I try and validate a build in XCode however I get the error to tell me
The bundle uses a bundle name or display name that is already in use
I'd love some pointer on how to achieve this if possible please.
I suspect I'm missing something in my build settings or an additional prop in the info.plist
Ideally I'd like to not change the name below the icon as it is a new product in a suite that all follow a pattern of naming.
So I logged out these three values
CFBundleDisplayName
CFBundleName
CFBundleIdentifier
They are all unique, when I change CFBundleDisplayName however, validation fails.
Does your display name match an existing core iOS app name?
I don't believe you can name an app anything that matches core iOS apps, for example Home, Settings or Photos would all be off limits.
I am developing an iOS framework (say xyz.framework) , in that I am trying to build a feature to localize the bundle display name (CFBundleDisplayName) where I should localize the app name (name of the app which consumes my xyz.framework)
As per my understanding we have to mention name of the app in infoPlist.Strings file and we should localize,
My question is can we pick the app name dynamically with out hardcoding it ? if yes how can I do it ?
Please help me out!
Take the first answer to this question:
How to localise a string inside the iOS info.plist file?
Since the name of the app needs to be localised before the app is running, it is obviously not possible to change it dynamically. I might download your app and never, ever run it.
No, Info.plist values must be hardcoded and cannot be changed at runtime (this actually makes sense if you think about it).
The same applies to the localized version.
I've changed the product name in the building settings of my app. It is an existing app, that I want to submit an update for soon. Will this affect how I submit the app?
There is no "product name" in the build settings, so it's a little hard to know what you've changed. Did you change the name of the project?
In any case, the name of the product is merely the name of the .ipa file produced when you do a build. Apple doesn't know or care what that is. My product name often has nothing to do with the names that the public sees, which are:
The name at the App Store (this is not a part of the build process)
The display name in the springboard (this is an Info.plist setting)
For example, take my most recent app, "Diabelli's Theme". The product name, based on the original project name, is (for historical reasons) "MomApp2.app". When I make an archive build, for upload to the store, the archive's name is, for example, "Diabelli's Theme 4-23-13 10.09 AM", and inside it is an .ipa file called "MomApp2". Neither Apple nor the public knows or cares anything about any of that.
The only important piece that must never change is the bundle id. Anything else can change without worry.
Just keep things in general sync. Make sure the name shown under the icon roughly matches the name of the app shown in iTunes. Make sure your icons match, etc.
I have a strange problem with my application name: my project is called "something - somenumber" (with the dash).
For the submission, the App name I've chosen is without tje dash, infact, in the iTunes Store I can see the name without it.
But when I download my approved App, the name is with the dash..
Have you ever heard something similar???
Is this a problem with the new SDK and IOS version?
Now the name has to coincide with project name???
Thanks
By default, the Bundle display name in the Info.plist of iOS apps is ${PRODUCT_NAME}. ${PRODUCT_NAME}, by default, is the same as the project name, which in your case has a dash. The Bundle display name is the text that gets displayed under your app's icon in the device's home screen. This could be the reason why you can see the dash when you download the app.
You should change the CFBundleDisplayName in the apps Info plist file. This value is what the iOS spring board uses underneath each app. This can also be localised.
.bundle identifier is for the provisioning profile.