Deliver engaging mobile experiences

Fast, powerful mobile A/B testing and personalization for app development teams.

The leading mobile experimentation platform

Engage and retain your users

Experiment with onboarding, feature discovery, and re-engagement strategies to improve engagement and retention.

Launch with confidence

Reduce the risk of launching new features with phased rollouts. Live variables and simple traffic allocation enable you to test new features and quickly remove or improve the ones that don’t work.

Update your app in real time

Change your app’s behavior in real time without waiting for App Store or Google Play review.

Deliver personalized mobile experiences

Advanced targeting enables personalized experiences throughout your app. Our mobile SDKs also work seamlessly with all other Optimizely SDKs, enabling you to experiment and personalize across channels and devices, or at any level of your tech stack.

Iterate faster, with more control and less risk

Flexible configuration options

Run experiments in any part of your app. Easily configure networking, logging, exception handling, integrations, and much more to meet your production needs.

Focus on performance

Experiment in real time with minimal performance impact. Our lightweight, open source SDKs make no network requests, and enable instant updates to your app--no App Store or Google Play Review required.

A trusted solution

Optimize your app on the world’s leading Experimentation Platform that is already delivering billions of experiences globally. Powered by Optimizely’s industry-leading Stats Engine.

            
    #import <OptimizelySDKiOS/OptimizelySDKiOS.h>
    
    OPTLYManager *manager = [OPTLYManager init:^(OPTLYManagerBuilder * _Nullable builder) {
      builder.projectId = @"projectId";
    }];
    
    

// Asynchronously initialize the Optimizely client

[manager initializeWithCallback:^(NSError * _Nullable error, OPTLYClient * _Nullable client) {

// Activate an experiment

OPTLYVariation *variation = [client activate:@"my_experiment" userId:@"user_123"]; if ([variation.variationKey isEqualToString:@"variation_a"]) {

// Execute code for variation A

} else if ([variation.variationKey isEqualToString:@"variation_b"]) {

// Execute code for variation B

} else {

// Execute default code

}

// Track an event

[client track:@"purchase_completed" userId:@"user_123"]; }];
            
    import OptimizelySDKiOS
    
    let optimizelyManager = OPTLYManager.init {(builder) in
      builder!.projectId = "projectId"
    }
    
    

// Asynchronously initialize the Optimizely Client

manager?.initialize(callback: { [weak self] (error, client) in

// Activate an experiment

let variation = client?.activate("my_experiment", userId: "user_123") if (variation?.variationKey == "variation_a") {

// Execute code for variation A

} else if (variation?.variationKey == "variation_b") {

// Execute code for variation B

} else {

// Execute default code

}

// Track an Event

client?.track("purchase_completed", userId: "user_123") })
            
    import com.optimizely.ab.android.sdk.OptimizelyClient;
    
    OptimizelyClient optimizelyClient = optimizelyManager.getOptimizely();
    
    

// Activate an experiment

Variation variation = optimizelyClient.activate("my_experiment", "user_123"); if (variation != null) { if (variation.is("variation_a")) {

// Execute code for variation A

} else if (variation.is("variation_b")) {

// Execute code for variation B

} } else {

// Execute default code

}

// Track an event

optimizelyClient.track("purchase_completed", "user_123");

Experiment anywhere in your tech stack

Test pricing, search algorithms, and more. Optimizely X Full Stack enables you to experiment beyond the client and deep into your backend.

A complete solution for app experimentation, without the developer headaches

  • Open source SDKs

    Our Swift, Objective-C, and Android SDKs are transparent, so you know exactly how they work.
  • Event tracking

    Monitor all the conversion metrics and KPIs you care about, in your app or any other service.
  • Phased rollouts

    Reduce the risk of launching new features by rolling them out first to a small set of users, either random or targeted.
  • Custom configuration

    Easily swap out your own components for logging, error handling, event dispatching, integrations, and more.
  • Audiences

    Define custom attributes for fine-grained targeting and segmentation.
  • Multichannel experimentation

    Set your own user IDs to create consistent personalized experiences across all your customer channels.
  • Full stack experimentation

    Run experiments that span both frontend and backend code, in conjunction with any of Optimizely’s SDKs.
  • Optimizely Stats Engine

    See the impact of your experiments in real-time, with the world’s leading Experimentation Platform.
  • Instant updates

    Make updates to your experiments and variables in real-time without waiting for your next App Store release.
  • Raw event export

    Easily download the complete event data from Optimizely.
  • Traffic splitting

    Easily create randomized traffic switches anywhere in your app without affecting performance.
  • Enterprise-ready security

    Roles and permissions, 2-factor authentication, and single sign-on (SSO).

Get started with our developer documentation

At Trunk Club, mobile is at the forefront of their business. It’s where new customers first tend to interact with the brand and existing customers browse new collections. Because mobile users were often exploring rather than buying, the Trunk Club team experimented with different app mechanics to help separate the window shoppers from serious buyers.

Learn how Trunk Club increased lead quality and stylist efficiency by optimizing mobile app onboarding.

Read The Case Study

Start experimenting in your mobile app today

Recommended Content