For one of applications we were working, we had to build three targets using a single source code. And we struggled to get all the targets running. So finally, I just opted for this option of varying the functionalities dynamically (using  Macros)to get different binaries. Usually we would specify the App name,  App icon in the info-plist file. This time , I thought of doing it programmatically and searched if I can find any APIs for that. But to my dismay, nothing turned out. So after searching I got to know a fact  why this is not possible and I am sharing it here.

If we let the Application’s Icon or name to be set programmatically alterable, then a developer might change the app or name icon programmatically based on certain conditions this would confuse the user. For instance, lets take that a user opens an App with X image icon on it. During the execution the App icon gets changed to something else . And when user searches for the App with the Icon in mind, he would not be able to identify it easily.