# Titanium.App.Properties

> The App Properties module is used for storing application-related data in property/value pairs that persist beyond application sessions and device power cycles.

- Source: https://titaniumsdk.com/docs/sdk/12.6.3/Titanium.App.Properties
- Titanium SDK version: 12.6.3
- Kind: module
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 0.5
- Extends: Titanium.Module
- Inheritance: Titanium.Module > Titanium.Proxy

#### App Properties in the tiapp.xml file

App properties defined in the `tiapp.xml` file may be accessed using these APIs.  An app
property is defined inside the root-level `<ti:app>` element with the `<property>` element.
Use the `name` attribute to define your property name and place the value inline with the
`<property>` element. For example, to define an app property called `foo` with the value `42`:

``` xml
<?xml version="1.0" encoding="UTF-8"?>
<ti:app xmlns:ti="http://ti.titaniumsdk.com">
    <property name="foo" type="string">42</property>
</ti:app>
```

Then, you can retrieve the property during runtime with the following API call:

``` js
const foo = Ti.App.Properties.getString('foo');
```

Any application properties defined in the `tiapp.xml` file are stored in the
device's secure storage, making them read-only.  Additionally, external access to these
properties is now restricted.  Other iOS applications cannot access these properties and
native Android modules must use the Titanium module API TiApplication.getAppProperties()
method to access these properties.

If you need to change the values during runtime, initially create the property with these APIs
rather than defining them in the `tiapp.xml` file.

**Important**: Using this API in the Apple ecosystem requires the `NSPrivacyAccessedAPICategoryUserDefaults`
property set in the privacy manifest that was introduced in iOS 17. You can learn more about it [here](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api).

## Example: Store a property

Store a string property.

``` js
Ti.App.Properties.setString('givenName', 'Paul');
Ti.API.info('The value of the givenName property is: ' + Ti.App.Properties.getString('givenName'));
```

## Example: Enumerate over saved properties

Output all saved properties to the console.

``` js
var props = Ti.App.Properties.listProperties();

for (var i = 0, ilen = props.length; i < ilen; i++){
    var value = Ti.App.Properties.getString(props[i]);
    Ti.API.info(props[i] + ' = ' + value);
}
```

## Methods

### getBool

- Platforms: Android, iPhone, iPad, macOS

Returns the value of a property as a boolean data type.

Parameters:

- `property` (String): Name of property.
- `default` (Boolean, optional): Default value to return if property does not exist.

Returns: Boolean

### getDouble

- Platforms: Android, iPhone, iPad, macOS

Returns the value of a property as a double (double-precision, floating point) data type.

This method must only be used to retrieve properties created with 
[setDouble](https://titaniumsdk.com/docs/sdk/Titanium.App.Properties.md#setDouble).

Parameters:

- `property` (String): Name of property.
- `default` (Number, optional): Default value to return if property does not exist.

Returns: Number

### getInt

- Platforms: Android, iPhone, iPad, macOS

Returns the value of a property as an integer data type.

This method must only be used to retrieve properties created with 
[setInt](https://titaniumsdk.com/docs/sdk/Titanium.App.Properties.md#setInt).  

Use [getDouble](https://titaniumsdk.com/docs/sdk/Titanium.App.Properties.md#getDouble) and [setDouble](https://titaniumsdk.com/docs/sdk/Titanium.App.Properties.md#setDouble) 
to store values outside the integer data type range of `-2,147,483,648` to `2,147,483,647`.

Parameters:

- `property` (String): Name of property.
- `default` (Number, optional): Default value to return if property does not exist.

Returns: Number

### getList

- Platforms: Android, iPhone, iPad, macOS

Returns the value of a property as an array data type.

Parameters:

- `property` (String): Name of property.
- `default` (Array<Object>, optional): Default value to return if property does not exist.

Returns: Array<Object>

### getObject

- Platforms: Android, iPhone, iPad, macOS

Returns the value of a property as an object.

Parameters:

- `property` (String): Name of property.
- `default` (Object, optional): Default value to return if property does not exist.

Returns: Object

### getString

- Platforms: Android, iPhone, iPad, macOS

Returns the value of a property as a string data type.

Parameters:

- `property` (String): Name of property.
- `default` (String, optional): Default value to return if property does not exist.

Returns: String

### hasProperty

- Platforms: Android, iPhone, iPad, macOS

Indicates whether a property exists.

Parameters:

- `property` (String): Name of property.

Returns: Boolean

### listProperties

- Platforms: Android, iPhone, iPad, macOS

Returns an array of property names.

Returns: Array<Object>

### removeAllProperties

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 6.0.0

Removes all properties that have been set by the user on runtime, or does nothing otherwise.

### removeProperty

- Platforms: Android, iPhone, iPad, macOS

Removes a property if it exists, or does nothing otherwise.

Parameters:

- `property` (String): Name of property.

### setBool

- Platforms: Android, iPhone, iPad, macOS

Sets the value of a property as a boolean data type. The property will be created if it 
does not exist.

Parameters:

- `property` (String): Name of property.
- `value` (Boolean): Property value.

### setDouble

- Platforms: Android, iPhone, iPad, macOS

Sets the value of a property as a double (double-precision, floating point) data type. The 
property will be created if it does not exist.

Parameters:

- `property` (String): Name of property.
- `value` (Number): Property value.

### setInt

- Platforms: Android, iPhone, iPad, macOS

Sets the value of a property as an integer data type. The property will be created if it 
does not exist.

Use [getDouble](https://titaniumsdk.com/docs/sdk/Titanium.App.Properties.md#getDouble) and [setDouble](https://titaniumsdk.com/docs/sdk/Titanium.App.Properties.md#setDouble) 
to store values outside the integer data type range of `-2,147,483,648` to `2,147,483,647`.

Parameters:

- `property` (String): Name of property.
- `value` (Number): Property value, within the range `-2,147,483,648` to `2,147,483,647`.

### setList

- Platforms: Android, iPhone, iPad, macOS

Sets the value of a property as an array data type. The property will be created if it 
does not exist.

Parameters:

- `property` (String): Name of property.
- `value` (Array<Object>): Property value.

### setObject

- Platforms: Android, iPhone, iPad, macOS

Sets the value of a property as an object data type. The property will be created if it 
does not exist.

Parameters:

- `property` (String): Name of property.
- `value` (Object): Property value.

### setString

- Platforms: Android, iPhone, iPad, macOS

Sets the value of a property as a string data type. The property will be created if it 
does not exist.

Parameters:

- `property` (String): Name of property.
- `value` (String): Property value.

## Events

### change

- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 3.0.0

Fired when a property is changed.

On iOS, the event is fired when the user re-enters the application after 
making a change using the Settings application.

The event is also fired when the application changes a property directly using one of the 
`Ti.App.iOS.UserDefaults` or `Ti.App.Properties` methods.

## Inherited members

7 members are inherited. Each is documented on the type that declares it.

- [Titanium.Proxy](https://titaniumsdk.com/docs/sdk/12.6.3/Titanium.Proxy.md): `addEventListener`, `apiName`, `applyProperties`, `bubbleParent`, `fireEvent`, `lifecycleContainer`, `removeEventListener`

---

- This corpus documents Titanium SDK 13.4.1. Anything here that does not name a version describes 13.4.1.
- Titanium is maintained by TiDev. The Appcelerator toolchain is retired: there is no `appc` CLI, no Appcelerator Studio and no hosted build service. The supported CLI is `titanium` on npm, invoked as `ti`.

