androidtitaniumappceleratortitanium-mobileappcelerator-mobile

Using an exclamation mark in an Android app name in Appcelerator Titanium


I'm trying to add an exclamation mark into the App name of an Appcelerator Titanium project (Just Android at the moment) and it is not having it. It underlines it red in the tiapp.xml file and says The value 'App!' of element 'name' is not valid (App! is not the actual name of my app, but you get the idea).

It happily works if I remove the exclamation mark. I've even tried using the ASCII code (!) and the Unicode character (\u0021) with no luck. Is there anything special I need to do to make this work, or is this something you can not do in Appcelerator Titanium?

Here is my tiapp.xml file (with large swathes cut out for brevity)

<?xml version="1.0" encoding="UTF-8"?>
<ti:app xmlns:ti="http://ti.appcelerator.org">
    <property name="acs-oauth-secret-production" type="string">somenumbers</property>
    <property name="acs-oauth-key-production" type="string">somenumbers</property>
    <property name="acs-api-key-production" type="string">somenumbers</property>
    <property name="acs-oauth-secret-development" type="string">somenumbers</property>
    <property name="acs-oauth-key-development" type="string">somenumbers</property>
    <property name="acs-api-key-development" type="string">somenumbers</property>
    <id>com.myurl.app</id>
    <name>App!</name> <-- Heres my error!
    <version>1.0</version>
    <publisher>robquincey</publisher>
    <url>http://myurl.com</url>
    <description>not specified</description>
    <copyright>2013 by robquincey</copyright>
    <icon>appicon.png</icon>
    <persistent-wifi>false</persistent-wifi>
    <prerendered-icon>false</prerendered-icon>
    <statusbar-style>default</statusbar-style>
    <statusbar-hidden>false</statusbar-hidden>
    <fullscreen>false</fullscreen>
    <navbar-hidden>false</navbar-hidden>
    <analytics>true</analytics>
    <guid>theguid</guid>
    <property name="ti.ui.defaultunit" type="string">system</property>
    <iphone>
        <orientations device="iphone">
            <orientation>Ti.UI.PORTRAIT</orientation>
        </orientations>
        <orientations device="ipad">
            <orientation>Ti.UI.PORTRAIT</orientation>
            <orientation>Ti.UI.UPSIDE_PORTRAIT</orientation>
            <orientation>Ti.UI.LANDSCAPE_LEFT</orientation>
            <orientation>Ti.UI.LANDSCAPE_RIGHT</orientation>
        </orientations>
    </iphone>
    <android xmlns:android="http://schemas.android.com/apk/res/android"/>
    <mobileweb>
        <precache/>
        <splash>
            <enabled>true</enabled>
            <inline-css-images>true</inline-css-images>
        </splash>
        <theme>default</theme>
    </mobileweb>
    <modules>
        <module platform="commonjs">ti.cloud</module>
    </modules>
    <deployment-targets>
        <target device="blackberry">false</target>
        <target device="android">true</target>
        <target device="ipad">false</target>
        <target device="iphone">false</target>
        <target device="mobileweb">false</target>
        <target device="tizen">false</target>
    </deployment-targets>
    <sdk-version>3.1.0.GA</sdk-version>
</ti:app>

Solution

  • I believe the correct way to do it is through Internationalization:

    http://docs.appcelerator.com/titanium/latest/#!/guide/Internationalization-section-29004892_Internationalization-Internationalizingtheapp%27sname

    the easy way is to go to platform/android/androidmanifest.xml and edit it there. I found it in 2 locations and changed it in both and deploying to emulator worked. don't copy/pasta the code below its just reference for what you're looking for.

    <application android:icon="@drawable/appicon"
        android:label="APPNAME!" android:name="CrmlsApplication"
        android:debuggable="false">
    
        <!-- TI_APPLICATION -->
    
        <activity android:name=".myappActivity"
            android:label="APPNAME!" android:theme="@style/Theme.Titanium"
            android:configChanges="keyboardHidden|orientation">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>