Different icons and title for same iPad application - ios

I'm developing an iPad application that will be distributed "in-house" ie only inside enterprise. They asked me if i can produce 2 different releases of the same application to be installed on the same iPad.
The first one will communicate with a production server while the second will use a sandbox server and will be used by user to learn the system. Server url will be changed in app settings.
They told me to differentiate these releases by icon and title (and also, of course, by title in navigation bar). What's the best way to get this goal avoiding duplication of the project?

It sounds like you have 3 variables:
API address
Name
Icon
One idea might be to add a separate build configuration, call it something like "Sandbox". Here's an example of how to create a new build configuration. Then, have two separate Info.plist files specifying the "Bundle display name" and "Icon files". Copy your existing Info.plist and name it something like "Sandbox-Info.plist".
Then, in your project's settings, select the target (on the left) and the "Build Settings" tab. Search for "Info.plist File", and expand it. For the Sandbox entry (the name of build configuration you set earlier), change this entry to the Sandbox-Info.plist file you created.
This covers the name and icon settings. For the API address, search for "Other C Flags" in the "Build Settings" tab. Expand it. For each row, add a value like:
-DAPI_URI=#\"http://api.example.com\"
Vary this for the Sandbox entry to whatever your sandbox URI is.
Lastly, in your code, refer to API_URI as the string to your API address.
Hope this helps!

Related

Xcode: How to use multiple "Display Name" values, different per each configuration?

In Xcode we use multiple configurations to compile several different apps, with different Bundle IDs and Display Names.
While the "Identity -> Bundle Identifier" correctly shows a greyed-out "" read-only value, this is not the same with the "Identity->Display Name", resulting to a common name for all configurations.
Note that we have added different values on the "Build Settings -> Product Name" property for each configuration, since our Info.plist entry for CFBundleDisplayName is $(PRODUCT_NAME).
We tried to have a blank "Identity->Display Name" and initially this worked (the Name was eventually the one provided by the configuration's "Build Settings -> Product Name").
However, at some point (when switching Schemes we think) the "Identity->Display Name" took again a generic name (the one used for the .app filename) and this caused all the different "Build Settings -> Product Name" values to be replaced by this same generic name.
Is this a bug? What should we do to NOT have the "Identity->Display Name" editable and rather get its value from the configuration values (like the Bundle ID does)?
Note: We also tried all suggestions provided here: Xcode scheme change display name
They did not work, see some comments below the answers there.
Update for Xcode 14 and up: you can click the + icon behind the text input of Display Name (under Identity in the General tab) and set a value for each build configuration.
For older versions of Xcode:
After you have created different build configurations, you can use a user defined setting per build configuration that sets the display name.
In order to do this you need to click on the Build Settings tab, and in the build settings tab you need to click on the + icon in the left upper corner and then select Add User-Defined Setting. A new entry in the user defined settings (at the bottom of the Build Settings tab) will be created with the name NEW_SETTING. Rename this to whatever you want, e.g. APP_DISPLAY_NAME. If you expand this setting (by clicking on the chevron icon to the left of it) you can set a value for each build configuration.
Now go back to the General tab and for the Display Name, fill in your user defined setting like so: ${APP_DISPLAY_NAME} (replace APP_DISPLAY_NAME with whatever you named your setting) and press enter. Each build config will use the value from the user defined setting as the display name now.
When using a user defined setting as the display name, it is not shown as <Multiple values>, however it does take its value from the user defined setting. You can see it changing by switching the scheme, cleaning and then switching from the General tab, and then switching back to the General tab.

Can i change my project name in Xcode while Apple reject me coz my app's name is not available

I have done all things with my old name , but Apple ask me to change it , but can I change it? I am afraid that everything will messed up after I change my name , coz all related to this project name , so what can I do , actually I do not know if I can change , I am just afraid , Can anyone tell me if I can change my app name in Xcode and if there will be something messed up ?
You can change the name of the app without affecting the name of the project or the code.
I am making the assumption you just want the app display name different, so here is how to do it:
Go to your Project Settings and Select Target
Next you can move across and select Info
Right click anywhere in the table and select add row. It will come up with some options - type "Bundle" and it will display the option Bundle display name. You need to select that.
On that line,click the right of the row and add your new name.
This will not affect your code and will only change the display name of the app. Now you have a new display name without effecting the main bundle.
If you don't change the name Apple won't publish it on the App Store. I think it's an easy choice.
You don't need to change your project name. You don't need to change the bundle name. Just the external name of the app. It's a really small change.
From the Navigator click the XCode project
Click "Build settings"
Click the search field and type product_name
Change the Product name to a new one
Repeat for every target you have.

What is the best way to have multiple variations of a product in Xcode?

I have a project that I maintain for a client; let's call it MyDataAssistant. When the project goes into beta, the client likes to have a "separate app" built for them, which I create using a different provisioning profile and a modified bundle identifier (MyDataAssistant-BETA). It's a pain to always be going back and forth and changing the bundle identifier, code signature settings, and especially the icon. I understand that you can have multiple targets and multiple build settings (within each target?) in a project, but I'm not clear on what the difference is, or how to use them appropriately.
Additionally, the client would like a third version with read-only capabilities. I can accomplish this by just making a flag return from a certain part of my code, but I would like it if that flag could be toggled in the build (target?) settings.
Please advise on how to manage this kind of project with multiple "variations" of the build.
Add a new configuration to your project by duplicating the release one for example.
Give it a name "Beta"
Add a User-defined build setting
Call it MY_DATA_ASSISTANT_BUNDLE_ID_SUFFIX for example and set the value to be -BETA only for the Beta configuration.
Edit the MyDataAssistant-info.plist file by setting the bundle identifier to com.YOURCOMPANYNAME.MyDataAssistant$(MY_DATA_ASSISTANT_BUNDLE_ID_SUFFIX)
This will make it have different values for the different configurations.
You can also set the display name to have a different value by setting it to $(PRODUCT_NAME)$(MY_DATA_ASSISTANT_BUNDLE_ID_SUFFIX)
Set the right provisioning profile for each configuration. (Of course after creating the beta one in the provisioning portal as if it was for a new app with the bundle identifier having the suffix "-BETA")
Create a new scheme!
Give it a name: MyDataAssistant-BETA
Change its build configuration to "Beta" for all the actions and you should be ready to go.
If you want to have different icons for the beta version you can use the $(MY_DATA_ASSISTANT_BUNDLE_ID_SUFFIX) in the MyDataAssistant-info.plist file for the icons names and of course add them to the target.
I would recommend creating two targets. This will allow you to share what files you want between variations, as well as have custom source, or config files in each. The simplest implementation of this would be to have an identical target except for the info.plist file.
Simply right click on your current app target in project settings, and hit duplicate.

BlackBerry - change the application name for an existing project

I have a BlackBerry project named "A". This means the build produces artifacts named A.alx, A.cod and all that.
Now I want to change the application name to "B". I tried changing the output file name to "B" and built the project. I get the output B.COD, B.alx etc. But when I try to install B.alx onto the BlackBerry device with the Desktop manager, it does not install, saying "this is not compatible application". This happens even though I can install A.alx successfully.
I made sure I am using 4.7 JDE to install on 4.7 device. I know I am doing something wrong when renaming the application in the project files. What is the problem?
You can't use a dash or space character in an application output filename. Make sure your "B" name does not include one.
edit
If you want to use those characters, edit the application title in the app descriptor. That is what the user sees when your app is installed.
I have encountered the same problem. I think you need to rename your whole project to B so that its output would be B.cod.
Here's some steps for changing project settings within the JDE:
Right click on the project and choose "Properties". A properties dialog will open.
In the "General" tab, you can edit the title of the project (This is what will be displayed on the ribbon), the version and some other stuff.
In the "Build" tab you can change the name of the output files.
Hope this helps.

How can I change the name of an iOS app in Xcode?

I began an iPhone project the other day with a silly development code name, and now I want to change the name of the project since it's nearly finished. How can I do this?
Go to Targets in Xcode.
Build Settings on your project's target (your current development name).
Search for Product Name under Packaging. Change its value to what you want your new project name to be.
In new versions of Xcode (Xcode 5 too), to change the name of the project, follow these simple (detailed as possible) steps:
Note: In this example I'll change a hypothetical "Sample" name to a "Test" one.
Click twice slowly on the project root in the project navigator and then it becomes editable.
Rename the project.
After pressing Enter the assistant will suggest you to automatically change all project-name-related entries and will allow you to de-select some of them, if you want.
Press 'RENAME' and Xcode will do the rest. In the meanwhile Xcode may ask you about the option of making a snapshot of the project (it is very recommendable to do so).
In addition to renaming the project, you may want to rename the scheme so that it matches your new project name.
Repeat similar steps like 1 and 2, and press OK.
That's it.
Another scenario...
The previous explanation was related to changing the project name, but chances are that you only need to change the display name that appears below the app icon in the home screen. These are the steps:
In the "Supporting Files" group locate the info.plist (or related) file
Locate the "Bundle display name" key and change the value to the new name.
Delete the "old" app from the simulator or any other testing device.
Clean and rebuild your app again.
That's it. You will now see the new app name in your home screen.
You change the bundle display name in the info.plist file. It's as simple as that.
Changing the 'bundle display name' (as opposed to 'bundle name') is the only way to include characters like '+' in your applications name. Including special characters in the project name will cause an error when uploading to App Store!
In Xcode 4 search for "Product Name" under "Build Settings" tab of the target.
Select Target
Select Info
Insert Bundle Display Name and set App Title
If you want to change the display name only then you can directly change it in the property file (plist) of the app.
You can add a new row with the following key: Bundle display name
Here is an example for this:
When you use this the app name, which you have given with this key, it will be displayed.
So you can do this simply.
This is how I changed it in Xcode 4:
Click on your target file (the first main file of the application).
Go to Build Settings.
Scroll down you will find a bar called "Packaging".
Under Packaging you will see Product Name, and you can change the project name.
In Xcode 3.2, just select the Project entry in the Groups & Files panel, and select the menu item Project → Rename… It worked for me.
Xcode 7/8? It's in the plist that your target uses
For Xcode 10.2:
Although this question has many answers but I wanted to explain the whole concept in detail so that everyone can apply this knowledge to further or previous versions of Xcode too.
Every Xcode project consists of one or more targets. According to apple, A target specifies a product to build and contains the instructions for building the product from a set of files in a project or workspace. So every target is a product (app) on its own.
Steps to change the name:
Step 1: Go to the Targets and open the Info tab of the target whose name you want to change.
Step 2: View the Bundle name key under the Custom iOS Target Properties that is set to the default property of $(PRODUCT_NAME).
Step 3: You can either change the Bundle name directly (not recommended) or if you open the Build Settings tab then on searching for Product Name under Setting you will see that Product Name is set to $(TARGET_NAME).
Step 3A: You can change the Product Name or you can also change the Target Name by double clicking on the target.
So changing the Product Name (App Name) or Target Name both will result into similar results. But if you only want to change the App Name and want to keep using the same Target Name then only change the Product Name.
From Xcode 4.2 and onwards, you can use one more option.
Just click once on the .proj file name at the top in left navigation pane and it will be available for renaming. Rename it and the whole project will get renamed and not only the target.
For Xcode 11, if you want to change the App Display Name then simply go to plist and simply replace the value of CFBundleDisplayName:
<key>CFBundleDisplayName</key>
<string>Your App Name</string>
The best way I like in Xcode 5 is to change product name in building settings. Search "product name" in "building settings", and change it.
If you need to change the name of the application as it appears on the iPhone's home screen, you need to do it in the Target configuration, not the project configuration.
Expand the Targets group in Xcode, and then single-click the item under that. It should share the name of your project, which is also the default name of the application that gets generated.
Press Command + I to bring up the Info window, and then navigate to the Build tag.
Set the Configuration drop-down to read All Configurations.
Look for a setting called Product Name under the Packaging heading.
Change that value to the name you want for your compiled applications and, in the immortal words of Bugs Bunny: Voilà! Do a clean and a build. Your application will take on the new name.
If you want to change the name, that will be displayed on your screen, right under your icon, in Xcode 4, go to Targets → Info → Bundle Display Name and change it to whatever you want.
In Xcode 4 click on project name to start renaming.
It's very easy to change in Xcode 8. enter the app name in the "Display Name" field in Project Target → General Identity section.
Also: your target name may be the same as your app name - note that changing the target name does not change the app name - only the change in the target properties described below - will change the app name.
A note on the bundle display name -- this is the right way to change the name in your app menu, but you'll likely have to reset content and settings in your iOS simulator before you see the change actually take effect.
You can modify the Product Name without changing your Project Name (especially the directory).
Build Settings > search the keyword "product name" > update values
For the sake of gathering all relevant information in one place, here is the official answer to this question - and it is the only one that worked for me on Xcode 5.1.1
Just use the Identity and Type pane in Xcode.
Select the top-most line to the left (with your project name, number of targets, etc.).
Select the target you wish to rename.
Click on the name of the target again.
Type the new name.
Press Enter.
For changing the application name only (that will display along with the app icon) in Xcode 4 or later:
Click on your project file icon from Groups & Files panel, choose Target → Build Settings → Packaging → Product Name. Click on the row. A pop-up will come. Type your new app name here.
For changing the project name only (that will display along with project icon) in Xcode 4 or later:
Click on your project file icon from the Groups & Files panel, choose Project (above targets) from the right pane. Just see at the far right pane (it will be visible only if you have enabled "Hide or show utilities"). Look for the project name. Edit it to a new name you want to give your project.
Delete your app from simulator/device, clean and run. Changes should reflect.
That's it.
I saw many ways to change your app name on the home screen, and I don't think the necessity of edit your .plist file or changing Build Settings of target is justified.
By default in Xcode 7.2 you even don't have 'bundle display name' in your plist file.
And by default, your 'Product name' in 'Build settings' tab of your target is equal to $(TARGET_NAME). IMHO, it's convenient and didn't mean to change.
So you can simply change your Target name like hallski said in his comment for accepted answer. I made picture for it:
I think there is a bit of confusion:
Do you want to change the project name or
do you want to change the App name on the iOS dashboard?
Usually it is enough to change the latter, adding/modifying the BUNDLE DISPLAY NAME key in plist.
It is better to leave the project name untouched, but it may be changed.
Note that Bundle display Name can contain spaces and special characters, but project not. Doing so some cmd line tools will fail due to filename path rules.
And even more Bundle Display names can be localized.
So unless you are in early stage and need to change the internal project name, go on using the Bundle Display Name key.
Project Navigator → General → Display Name
There are
Product name ($(PRODUCT_NAME)): defaults to Target name. This is useful for scheme to select the right target
Bundle display name (CFBundleDisplayName): defaults to Product name. This is what is displayed to your iOS user
Follow these four steps maintaining serial no. And in step 4 give your desired name..
The easiest way: select the TARGET name, double click on it, and rename.
You'll see your app's new name underneath the icon on your device or simulator.
Using Javier's approach to rename my app works perfectly. There is just one small bit missing in the end that I wanted to add.
I still ended up getting a Mach-O Linker Error after a clean and rebuild. To resolve this; select yourProject (in the Project Navigator). Under Targets, select yourProjectTests (the test target) → under the General tab, update the Host Application's value to the newly renamed project.

Resources