banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

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

在 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

这可能会导致用户敏感数据的泄露。

解决方法:

  1. 清空文件夹并将其设置为只读,这样文件就无法被写入。此方法需要在越狱情况下使用。

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

  1. 重写 UIApplication 的_saveSnapshotWithName 方法。此方法需要在越狱情况下使用。

@interface UIApplication(NoSaveSnapshotWithName)

-(void) _saveSnapshotWithName:(NSString *)name;

@end

@implementation UIApplication
-(void) _saveSnapshotWithName:(NSString *)name
{
return;
}

@end

  1. 在 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 键或者四指收起时也让画面全屏显示,可以添加以下代码:

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。