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. 將文件夾清空後設置為只讀,文件將不能被寫入。本方法需要越獄情況下使用。
system("chmod 444 Library\Caches\Snapshots\xxxx.xxx.xxx\* -R");
2. 重寫 UIApplication 的_saveSnapshotWithName。本方法需要越獄情況下使用。
@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 就可以設置自己想要的內容。
//- (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 鍵或者四指收起時也讓畫面全屏顯示,可以在 info.plist 中添加 "UIRequiresFullScreen" 鍵,並設置為 YES。