ShiftOne ScreenVeil Web

Integrate ScreenVeil into an iOS app

Focus on where protection belongs, how to keep the app usable, and how to roll out with predictable QA results.

Choose the right protection target

Best candidates

Use one stable container per sensitive region, such as an account summary panel, card details area, identity block, or a full-screen sensitive scene.

Use caution

Avoid starting with deeply nested leaf views, highly reused cell internals, or surfaces that are constantly reparented during interaction.

Why this matters

A clear container strategy keeps activation, validation, and degraded fallback behavior much easier to reason about across teams.

Recommended integration sequence

1. Assemble the sensitive view hierarchy

Wait until the screen structure is present and the intended sensitive container is known.

2. Apply licensing and protection together

Turn protection on only when the app can provide a valid license payload for that build and Bundle ID.

3. Keep failure behavior explicit

If activation does not succeed, show a degraded but understandable UX instead of pretending protection is active.

4. Disable or tear down cleanly

When the protected scene is intentionally removed, keep the cleanup path predictable and test it as part of screen lifecycle QA.

State coverage you should plan for

  • Normal foreground interaction on the protected screen.
  • App-switcher snapshots when the app becomes inactive or enters the background.
  • Capture-related states such as screen recording, mirroring, or other system-reported capture conditions that your app chooses to react to.
  • Rotation, presentation changes, and navigation flows that may affect the protected container.

Fallback and support guidance

  • Hide especially sensitive values if licensing or activation fails.
  • Keep internal QA builds able to surface meaningful failure reasons without exposing them in customer-facing UI.
  • Prepare a short support checklist: app version, Bundle ID, device model, OS version, protected screen, and the exact state where behavior differed.

Activation code example

Full activation pattern including license validation and protection style configuration.

#import <ShiftOneScreenVeil/ShiftOneScreenVeil.h>

SVActivationConfiguration *configuration =
    [SVActivationConfiguration defaultConfigurationForMainBundle];
configuration.inactiveProtectionStyle =
    [SVProtectionStyle blurStyleWithEffectStyle:UIBlurEffectStyleSystemChromeMaterialDark
                                      tintColor:UIColor.blackColor
                                      tintAlpha:0.2];
configuration.captureProtectionStyle =
    [SVProtectionStyle imageStyleWithImage:overlayImage
                               contentMode:UIViewContentModeScaleAspectFill];

NSError *error = nil;
BOOL enabled = [container sv_enableProtectionWithLicenseJSON:licenseJSON
                                               configuration:configuration
                                                       error:&error];
if (!enabled) {
    NSLog(@"ScreenVeil activation failed: %@", error);
    // Show degraded UX, hide sensitive content, or prompt for support.
}

Disable and cleanup

Remove protection when a screen is torn down, and clean up reusable cells before recycling.

Disable protection

[container sv_disableProtection];

Reusable cell cleanup

- (void)prepareForReuse {
    [super prepareForReuse];
    [self.contentView sv_disableProtection];
}

View lifecycle guidance

  • Enable protection after the view hierarchy is assembled and the sensitive container is known.
  • Disable protection when the protected view is intentionally torn down.
  • Prefer one stable protected container per screen.
  • In reusable cells, call sv_disableProtection in prepareForReuse before the cell is recycled.
  • Use caution with dynamic reparenting after protection is already enabled.
  • Use caution with layout constraints that reference views outside the protected container.

Related manuals

These manuals work best when read as part of the full rollout path, not in isolation.

Getting started

Start with the shortest evaluation path and prerequisites.

Open manual

License activation

Pair the integration with a clear licensing and renewal flow.

Open manual

Validation

Test the integrated surfaces across real devices and state changes.

Open manual