Rollout.io Support Site

Welcome to the Rollout.io Support. You'll find comprehensive guides and documentation to help you start working with Rollout.io as quickly as possible, as well as support if you get stuck. Let's jump right in!

Support    

Frequently Asked Questions


How does it work?

For Objective-C apps Rollout leverages Objective-C's dynamic runtime capabilities. We use various techniques to influence the runtime, one technique we use, which is widely used, is called - "Method Swizzling".

For Swift apps, we use a technique we call Pre-SIL instrumentation that automatically adds hooks to Swift methods so you can override them at runtime. Rollout modifies your code in a way does not impact your debugging experience (it looks as if Rollout did not modify any code). More details on Swift support.

We then allow the mobile developer to remotely manipulate their runtime in our dashboard to fix bug or make changes to any method.

Read more on How Rollout Works, and check out our CTO's blog post Rollout.io Under the Hood.


Does Rollout use code injection?

No. Code injection for native code is not allowed. Rollout does not violate any of Apple's guidelines for app development and App Store publishing. For JavaScript Rollout use JavaScriptCore which is allowed to be downloaded at runtime.


Do I need to tag or modify any of my existing code?

No. Rollout allows you to modify any method in your app without setting up anything besides installing our SDK.


Does Rollout comply with Apple's App Store Guidelines?

Yes. Rollout does not alter binaries and does not "inject" native code. It does not violate Apple's development and App Store's guidelines.


Are there any performance penalties?

We built Rollout.io with performance in mind, we took extra cautions to make sure there are no performance penalties for using our SDK.

  • Rollout.io SDK is asynchronous - there is no impact on startup performance.
  • Runtime - when you apply a hot-patch to a certain function, only the runtime (swizzle) of that function is changed.
  • Rollout.io SDK footprint - the overall app size increase shouldn't be more than 1-2MB.

How secure is Rollout?

Security is one of our top priorities when designing Rollout.io. When the app launches, it communicates with Rollout.io servers to receive any hot-patches that may have been created. Rollout.io signs encrypted data with a 2048 bit RSA key and verifies on the end user. There are other precautions in place for increased security. Read more


How do you protect yourself against man-in-the-middle (MITM) attacks?

The connection between the mobile device and Rollout storage service is secure against MITM attacks because the patching configuration includes a signature signed by Rollout server using its own private key. The corresponding public key is hard-coded into the SDK and upon getting the patching configuration, the SDK verifies that it was correctly signed by Rollout servers. Developer can choose to use of their own private public key pair for security. When enabled, a developer creates his own private key and embed his public in his app when initializing the SDK, when any hot patch is created the system request signing of patches via from the developer via webhooks (more info here)


Is CocoaPods supported?

Yes. Just select CocoaPods when adding a new app at Rollout.io. If you previously used our installer app, you can switch to CocoaPods by following the instruction that appear in the App Settings in the Rollout.io dashboard. You can also follow the step by step How to install the SDK - Cocoapods guide or watch the VIDEO: How to Install - CocoaPods video.


Is Swift supported?

Yes. Swift support details here.


Which platforms are supported?

See http://support.rollout.io/docs/whats-supported


Can Rollout fix bugs which occur during application startup? (sync/async loading)

The short answer: Make sure that in the application:didfinishlaunchingwithoptions: method Rollout setup call appears right after the initialization of your crash reporter and that there's nothing else before.

The longer answer:
Rollout starts by fetching your current configuration from our servers. This is done asynchronously to not delay the app loading. Any hot-patches you configured are applied immediately after the configuration arrives to the device.

A hot-patch cannot be applied before the configuration is fetched by the device. However, if the app crashed before the configuration has finished downloading, then the next time the app starts it will fetch the configuration synchronously. Thus, if there’s a fix configured, the issue will be fixed on the second startup.

And what if there’s no network at that moment? Don’t panic: the loading request fails immediately if there’s no network available and the app launches as usual.

How to disable sync mode fallback

The above sync mode failover behavior can be disabled using the following code on startup

RolloutOptions* options = [[RolloutOptions alloc]init];
options.disableSyncLoadingFallback = YES;
[Rollout setupWithKey:@"<your app key here>" options:options];


What happens when I add analytics events using the analytics via Rollout dashboard?

If you have Mixpanel or Google analytics setup in your application, Rollout.io SDK will automatically trace it and send the event configured in the dashboard directly to these providers.

Most developers have a facade for their analytics event sending, you can choose to activate it instead by using this setup:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  RolloutOptions *rolloutOptions = [[RolloutOptions alloc] init];
  rolloutOptions.tracker = ^(NSDictionary *data){// data is configured on dashbaord
    [[MyAnalytics sharedInstance] send:data];//send data to your own Analytics singleton 
  };
[Rollout setupWithKey:@"<your app key here>" options:rolloutOptions];

  // other initializations and Misc //
  return YES;
}

I already installed the SDK, how can I try Rollout.io out?

You can generate an application crash using this simple objective-C function and plug it into a button click event via Xcode/InterfaceBuilder. (notice you want to be able to trigger the exception by a click and not on application startup)

- (IBAction)simpleCrash:(id)sender
{
    @[][42];// will raise NSRangeException 
}

Once the simpleCrash function is invoked your application will crash.
Now just hot-patch simpleCrash by surrounding it with try catch with Rollout.io dashboard and make click the button to make sure Rollout.io works as expected.


Will Rollout.io affect my app's normal networking requests?

While your app is in production, Rollout.io only makes one request every time your application goes into foreground. The data that is retrieved is small, averaging at merely 1KB.

How to run something at the app start?

Since Rollout is initialized from the application:didFinishLaunchingWithOptions method, it can't be hot-patched (it's too late, Rollout would swizzle it after it was already). However, there's a special Rollout method "onApplicationStart" (in RolloutClient class) which is executed just after Rollout configuration is applied. So any hot-patch configured for this method will be executed right after the configuration is applied.
Note: this method will also be executed when the app goes from background to foreground (we fetch the configuration at this point).

Frequently Asked Questions