iOS JSON Config File

Defines the format of the iOS JSON configuration file

Uses http://json-schema.org/draft-04/schema#

Source: annotated_v4_schema.json

{
"properties":
"code_revision":
"id":

code_revision

"type":

integer

"title":

Code Revision

"description":

The version number of this data file. This should be incremented every time the file is edited and uploaded to the CDN

"segments":
"id":

segments

"type":

array

"items":
"id":

segment

"type":

object

"properties":
"api_name":
"id":

api_name

"type":

string

"description":

Name of the device or app API to query. This instructs the SDK to find information and attach the resulting value to conversion events. Example: optimizely_ios_device_model

"title":

API Name

"segment_id":
"id":

segment_id

"type":

string

"description":

Backend ID for querying.

"title":

Backend ID

"title":

Segment

"description":

A segment consists of a key value pair. The SDK must offer support for collecting the necessary information.

"title":

Segments

"description":

Segments are used to slice and dice result information. Segmenting information includes device type, manufacturer, and version. Any segments declared will be sent along with all conversion events.

"experiments":
"id":

experiments

"type":

array

"items":
"id":

experiment

"type":

object

"properties":
"description":
"id":

description

"type":

string

"title":

Experiment Name

"description":

This is the human readable name for the experiment as shown in the dashboard.

"percentage_included":
"id":

percentage_included

"type":

integer

"title":

Traffic Allocation

"description":

This defines the global inclusion percentage. Inclusion goes from 0 to 10000 (basis points). For example, if set to 5000, 50% of all users will be included in the experiment

"minimum":
0
"maximum":
10000
"variations":
"id":

variations

"type":

array

"items":
"id":

variation

"type":

object

"properties":
"description":
"id":

description

"type":

string

"title":

Variation Name

"description":

This is the human readable description of the variation (appears as the title of the variation in the editor tab)

"views":
"id":

views

"type":

object

"properties":
"StoryboardViewController>UIView>UIImageView[4]":
"id":

viewId

"type":

object

"properties":
"image":
"id":

propertyKey

"type":

object

"properties":
"type":
"id":

type

"type":

string

"title":

Value Type

"description":

Type of the Value payload. Example: NSString

"value":
"id":

value

"type":
[ object, string, boolean, number ]
"properties":
"title":

Value Payload

"description":

Payload value for the visual change. The property defined by they Key will be set to this value. This is a polymorphic value whose type is defined by the accompanying Value Type field.

"title":

Property Key

"description":

The name of the property on the UI element to edit. If the UI element specified by the View Identifier has a corresponding property, it will be set to the payload in Value below

"title":

View Identifier

"description":

This selector uniquely identifies an element to which this visual edit will be applied. Example: StoryboardViewController>UIView>UIImageView[4]

"title":

Views

"description":

This section defines the visual changes made through the mobile editor to various UI elements. May be empty.

"variables":
"id":

variables

"type":

object

"properties":
"randomVariable":
"id":

variableKey

"type":

object

"properties":
"subType":
"id":

subType

"type":

string

"title":

Sub Type

"description":

Used when the Type is not specific enough. For example, the type Number has subtypes i and f for integer and floating point numbers respectively.

"type":
"id":

type

"type":

string

"title":

Type

"description":

Defines the type of this variable. Example: string, rect

"key":
"id":

key

"type":

string

"title":

Variable Key

"description":

The name of the Live Variable

"value":
"id":

value

"type":
[ object, string, boolean, number ]
"title":

Value

"description":

The value to assign to the Live Variable. This is a polymorphic value, whose type is fixed by the Variable Type and Sub Type fields.

"title":

Variable Key

"description":

Binds a Live Variable to a specific value for users who are bucketed into this variation.

"title":

Variables

"description":

Value assignments for the live variables which are used in this variation. May be empty

"variation_id":
"id":

variation_id

"type":

string

"title":

Variation ID

"description":

Uniquely identifies this variation. Used for backend analytics and datastore lookup.

"code_tests":
"id":

code_tests

"type":

object

"properties":
"foo":
"id":

blockName

"type":

object

"properties":
"blockKey":
"id":

blockKey

"type":

string

"description":

The name of the individual block to execute. (Selected from the dropdown in the editor)

"title":

Key

"title":

Name

"description":

The title of the code block which is evaluated. (Displays as the label for the dropdown in the editor)

"description":

Defines the code blocks used by this variation. May be empty.

"title":

Code Blocks

"traffic":
"id":

traffic

"type":

integer

"title":

Traffic Allocation

"description":

Within users bucketed into the experiment, this parameter defines the percentage of users that should be bucketed into this variation. Defined in basis points from 0 to 10000 so a value of 3300 will bucket 1/3 of the experiment uniques into this variation.

"minimum":
0
"maximum":
10000
"id":
"id":

id

"type":

integer

"title":

NOT USED

"description":

This is no longer used and has no semantic meaning. Use Variation ID for a unique identifier

"is_paused":
"id":

is_paused

"type":

boolean

"title":

DEPRECATED use Traffic instead

"description":

This is no longer used. To pause a variation, set its traffic allocation to 0 instead.

"assets":
"id":

assets

"type":

object

"properties":
"title":

NOT USED

"description":

No longer in use

"type":
"id":

type

"type":

string

"title":

Platform Type

"description":

Specifies the target platform of this variation. Example: android, ios

"constraints":
"id":

constraints

"type":

object

"properties":
"title":

NOT USED

"description":

No longer used

"title":

Variation

"description":

A variation is a grouping of changes which define the user experience. For example, if the test is around a call to action button, this change might involve a live variable for the button text and a visual change for the button color. Each variation in the test will contain different values for those changes.

"title":

Variations

"description":

This array contains the variations for this experiment. An experiment must have at least one variation

"universal_analytics":
"id":

universal_analytics

"type":

boolean

"title":

Universal Analytics Enabled

"description":

If set to true, Universal Analytics integration will be enabled

"universal_analytics_tracker":
"id":

universal_analytics_tracker

"type":

string

"title":

NOT USED

"description":

No longer used on mobile

"last_modified":
"id":

last_modified

"type":

string

"title":

Last Modified Date

"description":

Contains the last time this experiment was modified. Example: Wed, 04 Mar 2015 19:15:07 GMT

"experiment_id":
"id":

experiment_id

"type":

string

"title":

Experiment ID

"description":

Numerical ID which uniquely identifies this experiment. Used to identify this experiment in to the backend

"active":
"id":

active

"type":

boolean

"title":

Active/Paused

"description":

When set to true, the experiment is currently running and will be evaluated.

"universal_analytics_slot":
"id":

universal_analytics_slot

"type":

integer

"title":

UA: Custom Dimension Assignment

"description":

The dimension number that Optimizely data will be assigned to in Universal Analytics

"minimum":
1
"maximum":
20
"conditions":
"id":

conditions

"type":

array

"items":
"id":

1

"type":
[ object, string ]
"properties":
"not":
"id":

not

"type":

boolean

"title":

Not

"description":

Allows this condition to be negated.

"key":
"id":

key

"type":

string

"title":

Key

"description":

The id of the device property to examine. For example: device_model

"match":
"id":

match

"type":

string

"title":

Match Type

"description":

The operator to use for comparison. Valid values are <, <=, =, !=, >=, >. Not all values are valid for all keys.

"value":
"id":

value

"type":
[ object, string, boolean, number ]
"title":

Value

"description":

This value will be compared against the device value using the Match Type

"title":

Condition

"description":

A condition is a recursively defined structure that can consist of a list of conditions which are ANDed together, or a match condition which compares a defined value to the state of the user's device. For example: device_model=iPad

"description":

These targeting conditions are evaluated on a per-client basis to allow experiments to be shown only to people who match this set of conditions. The structure is a set of conditions which are ANDed together.

"title":

Targeting Conditions

"title":

Experiment

"description":

An experiment is a collection of Variations paired with traffic allocation and targeting conditions. Experiments may be marked as active or paused.

"title":

Experiments

"description":

May be empty. Contains all experiments from the project that are in the running or paused state.

"account_id":
"id":

account_id

"type":

integer

"title":

Account ID

"description":

The numerical project ID

"goals":
"id":

goals

"type":

array

"items":
"id":

goal

"type":

object

"properties":
"revenue_tracking":
"id":

revenue_tracking

"type":

boolean

"title":

NOT USED

"description":

Not in use. Use type: REVENUE instead

"experiment_ids":
"id":

experiment_ids

"type":

array

"items":
"id":

experiment_id

"type":

string

"title":

Experiment ID

"description":

the ID of the experiment that references this goal

"title":

Linked Experiments

"minItems":
1
"description":

Goals can be re-used by multiple experiments. This array defines all the experiments that this goal is bound to.

"event":
"id":

event

"type":
[ string, null ]
"description":

This name identifies the goal to the SDK

"title":

Event Name

"element_id":
"id":

element_id

"type":

string

"description":

If this goal tracks whether the user sees or touches a UI element, this selector will specify the UI element that should have listeners attached.

"title":

UI Element Identifier

"type":
"id":

type

"type":

string

"title":

Goal Type

"description":

This parameter defines the trigger condition for the event. Valid values include REVENUE, MOBILE_TAP, MOBILE_VIEW, and CUSTOM

"id":
"id":

id

"type":

integer

"description":

This is the ID of the goal as used for reporting to the backend

"title":

Backend ID

"title":

Goal

"description":

A goal is a tracked event. This event may be programmatic or behavioral. Currently we support programmatic events through the trackEvent() API and view and tap behavioral events which track user interaction with a specific UI element.

"description":

Goals (or conversion events) are the way the relative success of a given variation is tracked. Each experiment must have at least one goal in order to be valid

"title":

Goals

"required":
[ code_revision, segments, experiments, account_id, goals ]
}