We use the ant builds to rename the package depending on environment:
ex. using ant and xmltask. env is environment(dev, test,qa) we are updating the manifest package, and the application title.. ucFirst is a javascript task that uCases the first letter of the String
Android
<target name="updateAndroidPackage" depends="checkProd" unless="isProd">
<echo>In Update Android Package:${env}:</echo>
<xmltask source="${appPath}/${appName}/android/native/AndroidManifest.xml" dest="${appPath}/${appName}/android/native/AndroidManifest.xml">
<copy path="/manifest/@package" property="origPackageName"/>
</xmltask>
<echo>Existing Package:${origPackageName}</echo>
<xmltask source="${appPath}/${appName}/android/native/AndroidManifest.xml" dest="${appPath}/${appName}/android/native/AndroidManifest.xml">
<replace path="/manifest/@package" withText="${origPackageName}${env}"/>
</xmltask>
<ucfirst string="${env}" to="envFirst" />
<xmltask source="${appPath}/${appName}/android/native/res/values/strings.xml" dest="${appPath}/${appName}/android/native/res/values/strings.xml">
<replace path="/resources/string[@name='app_name']/text()" withText="${appName} ${envFirst}"/>
</xmltask>
</target>
IOS:
<target name="renamePackage" depends="checkProd" unless="isProd">
<ucfirst string="${env}" to="envFirst" />
<exec executable="/usr/libexec/PlistBuddy">
<arg value="-c" />
<arg value="Set :CFBundleIdentifier com.client.${env}.${appName}" />
<arg value="${appPath}/${appName}/${iosPath}/${appName}${appName}Iphone-Info.plist" />
</exec>
<exec executable="/usr/libexec/PlistBuddy">
<arg value="-c" />
<arg value="Set :CFBundleDisplayName ${appName} ${envFirst}" />
<arg value="${appPath}/${appName}/${iosPath}/${appName}${appName}Iphone-Info.plist" />
</exec>
</target>