在 iOS 7.0 之后,当 APP 进入后台后,会记录当前 APP 窗口的状态,并对窗口进行截图操作,这些截图会被保存在 APP 的 Sandbox 的 Library\Caches\Snapshots\xxxx.xxx.xxx 文件夹中,以下是增加的几个文件名:
UIApplicationAutomaticSnapshotDefault-LandscapeLeft.png
UIApplicationAutomaticSnapshotDefault-LandscapeRight.png
UIApplicationAutomaticSnapshotDefault-LandscapeLeft@2x.png
UIApplicationAutomaticSnapshotDefault-LandscapeRight@2x.png
这可能会导致用户敏感数据的泄露。
解决方法:
- 清空文件夹并将其设置为只读,这样文件就无法被写入。此方法需要在越狱情况下使用。
system("chmod 444 Library\Caches\Snapshots\xxxx.xxx.xxx\* -R");
- 重写 UIApplication 的_saveSnapshotWithName 方法。此方法需要在越狱情况下使用。
@interface UIApplication(NoSaveSnapshotWithName)
-(void) _saveSnapshotWithName:(NSString *)name;
@end
@implementation UIApplication
-(void) _saveSnapshotWithName:(NSString *)name
{
return;
}
@end
- 在 applicationDidEnterBackground 方法中,将窗口的 hidden 属性设置为 YES;在 applicationWillEnterForeground 方法中,将窗口的 hidden 属性设置为 NO。这样截图将会是一片黑色,什么也看不到。如果不喜欢黑色,可以在窗口中添加一个全屏的 Subview,然后设置自己想要的内容。
//- (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 键或者四指收起时也让画面全屏显示,可以添加以下代码: