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.
Focus on where protection belongs, how to keep the app usable, and how to roll out with predictable QA results.
Use one stable container per sensitive region, such as an account summary panel, card details area, identity block, or a full-screen sensitive scene.
Avoid starting with deeply nested leaf views, highly reused cell internals, or surfaces that are constantly reparented during interaction.
A clear container strategy keeps activation, validation, and degraded fallback behavior much easier to reason about across teams.
Wait until the screen structure is present and the intended sensitive container is known.
Turn protection on only when the app can provide a valid license payload for that build and Bundle ID.
If activation does not succeed, show a degraded but understandable UX instead of pretending protection is active.
When the protected scene is intentionally removed, keep the cleanup path predictable and test it as part of screen lifecycle QA.
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.
}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];
}These manuals work best when read as part of the full rollout path, not in isolation.
Start with the shortest evaluation path and prerequisites.
Open manualPair the integration with a clear licensing and renewal flow.
Open manualTest the integrated surfaces across real devices and state changes.
Open manual