Screenshot

요약
홈 버튼 누를 때 현재화면 스크린샷 남음
Tags
Screenshot

Screenshot

💡
앱을 다시 열었을 때 마치 계속 실행중이던 것 처럼 ← 이 느낌을 주려고 제공되는 기능
  • 홈버튼 클릭 시, 백그라운드로 보내기 직전에 스냅샷으로 현재 화면 저장.
  • 다른 스크린샷으로 덮어 씌울 때까지 남아있음.

Screenshot이 남는 경우

  • 앱 백그라운드 전환 시
  • 앱 실행 도중 전화 등에 응했을 시

보안 필요한 이유

  • 평문으로 작성한 중요정보 그대로 찍힘
  • 도구를 이용해 쉽게 접근 가능

예시)

  • 중요 정보 입력
  • 입력된 채로 홈버튼 클릭
  • 스크린샷 경로로 이동
  • 이미지 뷰어로 파일 열기
ContactDetails.ipa

대안

  • 앱이 수작업으로 스크린샷 제거 불가
💡
스크린샷을 남기기 전에 뭔가 해야한다!
  1. 스크린샷 내용 흐리기 (추천 : 쉽고 효과적)
    1. 몇 가지 로고 아트를 현재 뷰의 스플래시 스크린에 놓는 방식
  1. 해당 컨테이너 오브젝트의 hidden attribute 설정
    1. 시각적으로는 별로이나, 간단
  1. 자체 애니메이션 실행
  1. 스냅샷 찍는 것 자체를 방지

1) 스플래시 스크린 적용

로고 이미지 등으로 스크린샷 찍히기 전 이미지를 대체함.

1-1) 스플래시 스크린 적용 코드

백그라운드 전환 시 스플래시 화면 적용.
-(void)applicationDidEnterBackgroung:(UIApplication *)application { application = [UIApplication sharedApplication]; self.splash = [ [UIImageView alloc] initWithFrame:[ [UIScreen mainScreen] bounds] ]; [self.splash setImage:[UIImage imageNamed:@”myimage.png”]]; [self.splash setUserInteractionEnabled:NO]; [ [application keyWindow] addSubview:splash]; }

1-2) 스플래시 스크린 해제 코드

백그라운드에서 다시 앱으로 돌아올 때는 스플래시 화면을 풀어줘야지.
-(void)applicationWillEnterForeground:(UIApplication *)application { [self.splash removeFromSuperview]; self.splash = nil; }

2) Hidden 속성 적용

UIApplication *application; application = [UIApplication sharedApplication];[ [ [ [application] keyWindow] rootViewController] view] setHidden:YES];
  • 대부분의 개발자들이 UIView에 익숙해서 많이 하는 실수
  • 루트의 다른 서브 뷰들은 보이는 상태이며, 시간도 더 걸림
UIApplication *application; application = [UIApplication sharedApplication];[ [ [ [application] keyWindow] setHidden:YES];
  • 하지만 이 경우도 Alert 등에 의해 키 윈도우가 바뀌면 알람 창만 가릴 수도ㅋㅋㅋㅋ

3) 자체 애니메이션 적용

  • 투명하게 만드는 fade 애니메이션
-(void) fadeMe { [UIView animateWithDuration:0.2 animation:^{view.alpha = 0.0;} completion:^(BOOL finished){ [view removeFromSuperview];} ]; }

4) 스크린샷 자체를 찍지말자

  • 애플리케이션이 중단 이후 재기될 필요가 없다면
  • 즉, 매번 새롭게 재 실행돼도 상관없다면, 스크린샷 찍지말고 그냥 앱을 종료시키자.
  • Xcode로 Info.plist 파일을 열고
    • Application does not run in background 추가
      • 값 : YES
    • UIApplicationExitsOnSuspend (위와 동일한 것. 로우 키로 봤을 때임)
      • 값 : YES
  • applicationDidEnterBackground 이벤트에서 멈추지 않고
  • applicationWillTerminate 이벤트로 점프하게 됨

iOS 앱 생명주기 요약

notion image