ShiftOne ScreenVeil 웹

iOS 앱에 ScreenVeil 붙이기

어디에 적용해야 하는지, 앱 사용성을 어떻게 유지할지, QA가 예측 가능하도록 어떻게 롤아웃할지에 집중합니다.

보호 대상을 잘 고르는 것이 먼저입니다

좋은 시작점

계정 요약 패널, 카드 상세 영역, 본인확인 블록, 전체 화면 민감 씬처럼 안정된 컨테이너 단위가 좋습니다.

주의할 대상

깊게 중첩된 말단 뷰(leaf view), 재사용이 많은 셀 내부, 상호작용 중 부모가 자주 바뀌는 UI는 처음 적용 대상으로 좋지 않습니다.

이유

컨테이너 전략이 분명해야 활성화·검증·대체 동작을 팀 단위로 설명하고 유지하기 쉬워집니다.

권장 통합 순서

1. 민감 화면 구조를 먼저 완성

화면 구조가 잡히고 보호할 컨테이너가 분명해진 시점에 통합을 시작합니다.

2. 라이센스와 보호 적용을 함께 처리

해당 빌드와 Bundle ID에 맞는 유효한 라이센스가 준비된 상태에서만 보호를 켭니다.

3. 실패 동작을 명시적으로 유지

활성화에 실패했는데도 보호가 된 것처럼 보이게 두지 말고, 사용자가 이해 가능한 저하된(degraded) UX를 보여줍니다.

4. 해제(teardown) 경로도 검증

보호 화면이 내려가는 경로도 예측 가능해야 하므로, 화면 종료나 이동 흐름까지 QA에 포함합니다.

함께 검토해야 할 상태 범위

  • 보호 화면의 일반 포그라운드 사용
  • 앱이 inactive 또는 background로 갈 때의 앱 전환기 노출
  • 화면 녹화·미러링 등 앱이 반응하기로 한 캡처 관련 상태
  • 회전, 모달 전환, 네비게이션 이동처럼 보호 컨테이너에 영향을 줄 수 있는 화면 변화

실패 대응과 지원 운영

  • 활성화 실패 시 특히 민감한 값은 숨기거나 대체 표현으로 전환합니다.
  • 내부 QA 빌드에서는 원인 확인에 필요한 실패 정보를 볼 수 있게 하되, 고객용 UI에는 그대로 노출하지 않습니다.
  • 지원 체크리스트에는 앱 버전, Bundle ID, 기기 모델, OS 버전, 문제 화면, 문제가 발생한 상태를 포함해 두는 것이 좋습니다.

활성화 코드 예제

라이센스 검증과 보호 스타일 설정을 포함한 전체 활성화 패턴입니다.

#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.
}

비활성화 및 정리

화면이 해제될 때 보호를 제거하고, 재사용 셀은 재활용 전에 정리합니다.

보호 비활성화

[container sv_disableProtection];

재사용 셀 정리

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

뷰 생명주기 가이드

  • 화면 구조가 완성되고 보호할 컨테이너가 결정된 다음에 보호를 활성화합니다.
  • 보호된 뷰가 의도적으로 사라질 때 보호를 비활성화합니다.
  • 화면당 하나의 안정된 컨테이너를 보호 대상으로 유지하는 편이 좋습니다.
  • 재사용 셀에서는 셀이 재활용되기 전에 prepareForReuse에서 sv_disableProtection을 호출합니다.
  • 보호가 활성화된 상태에서 뷰를 동적으로 재배치하는 것은 주의가 필요합니다.
  • 보호 컨테이너 바깥에 걸린 Auto Layout 제약이 있으면 주의가 필요합니다.

함께 읽으면 좋은 문서

이 문서만 따로 보지 말고, 도입 흐름에 맞는 인접 문서를 함께 확인하는 편이 좋습니다.

시작 가이드

평가 시작부터 첫 빌드 검증까지의 전체 순서입니다.

문서 열기

라이센스 활성화

통합과 함께 관리해야 할 라이센스 적용 흐름입니다.

문서 열기

검증

실기기와 상태 변화 기준 테스트 항목을 정리합니다.

문서 열기