Home > 语言编程, 零敲碎打 > iOS开发之APP进入后台禁止自动截图

iOS开发之APP进入后台禁止自动截图

August 26th, 2014

iOS在7.0以后,APP进入后台后会把当前APP的Window状态记录,并对Window进行截图操作,会在APP的Sandbox的Library\Caches\Snapshots\xxxx.xxx.xxx文件夹中增加以下几个文件。这有可能会造成用户敏感数据的泄密。
UIApplicationAutomaticSnapshotDefault-LandscapeLeft.png
UIApplicationAutomaticSnapshotDefault-LandscapeRight.png
UIApplicationAutomaticSnapshotDefault-LandscapeLeft@2x.png
UIApplicationAutomaticSnapshotDefault-LandscapeRight@2x.png

解决办法:
1.将文件夹清空后设置为只读,文件将不能被写入。本方法需要越狱情况下使用。

1
system("chmod 444 Library\Caches\Snapshots\xxxx.xxx.xxx\* -R");

2.重写UIApplication的_saveSnapshotWithName。本方法需要越狱情况下使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
@interface UIApplication(NoSaveSnapshotWithName)
 
-(void) _saveSnapshotWithName:(NSString *)name;
 
@end
 
@implementation UIApplication
-(void) _saveSnapshotWithName:(NSString *)name
{
    return;
}
 
@end

3.在applicationDidEnterBackground时,将window的hidden属性设置为YES,
在applicationWillEnterForeground时,将window的hidden属性设置为NO。
此时的截图将会是一片黑色,什么也看不到。如果不喜欢黑色,在window中添加一个全屏的Subview就可以设置自己想要的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//- (void)applicationWillResignActive:(UIApplication *)application
//{
//    self.window.hidden = YES;
//}
 
- (void)applicationDidEnterBackground:(UIApplication *)application
{
    self.window.hidden = YES;
}
 
- (void)applicationWillEnterForeground:(UIApplication *)application
{
    self.window.hidden = NO;
}
 
//- (void)applicationDidBecomeActive:(UIApplication *)application
//{
//    self.window.hidden = NO;
//}

补充,如果要在两次点击HOME键或者四指收起时也让画面全%E

Comments are closed.