ScreenshotScreenshot이 남는 경우보안 필요한 이유예시)대안1) 스플래시 스크린 적용1-1) 스플래시 스크린 적용 코드1-2) 스플래시 스크린 해제 코드2) Hidden 속성 적용3) 자체 애니메이션 적용4) 스크린샷 자체를 찍지말자iOS 앱 생명주기 요약
Screenshot
앱을 다시 열었을 때 마치 계속 실행중이던 것 처럼 ← 이 느낌을 주려고 제공되는 기능
- 홈버튼 클릭 시, 백그라운드로 보내기 직전에 스냅샷으로 현재 화면 저장.
- 다른 스크린샷으로 덮어 씌울 때까지 남아있음.
Screenshot이 남는 경우
- 앱 백그라운드 전환 시
- 앱 실행 도중 전화 등에 응했을 시
보안 필요한 이유
- 평문으로 작성한 중요정보 그대로 찍힘
- 도구를 이용해 쉽게 접근 가능
예시)
- 중요 정보 입력
- 입력된 채로 홈버튼 클릭
- 스크린샷 경로로 이동
- 이미지 뷰어로 파일 열기

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