您需要登录后才可以操作登录 | 立即注册
关闭
楼主
gym
  • TA的每日心情
    开心
    2018-8-14 16:43
  • 签到天数: 52 天

    连续签到: 2 天

    [LV.5]常住居民I

    [UI框架] IOS 沙盒目录 Snapshots 文件夹下的快照问题 [复制链接]

    133 1 发表于 2019-6-6 11:07:47

    /var/mobile/Containers/Data/Application/**xx-**-**-**-****/ Library/Caches/**.**.****x/Snapshots

    IOS 沙盒目录   Snapshots  文件夹下的快照可不可以禁止产生
    沙发
    gym
  • TA的每日心情
    开心
    2018-8-14 16:43
  • 签到天数: 52 天

    连续签到: 2 天

    [LV.5]常住居民I

    显示全部楼层 发表于 2019-6-8 23:17:26
    https://www.cnblogs.com/soloist007/p/3726516.html



    1. APP进入后台时自动截屏的应对方法




    2. 点击HOME键使应用进入后台时,iOS会自动对当前屏幕进行截屏处理,并保存成图片文件。

    3. 在Mac中可以看到,这些截屏文件会被保存在下述路径中:

    4. <Home>/Library/Caches/Snapshots/(Bundle identifier)/



    5. 且文件名以"UIApplicationAutomaticSnapshotDefault-"开头。



    6. 这些自动生成的截屏文件,对启用了密码保护功能的应用而言,在安全性方面会是个比较严重的问题。

    7. 经过各种试验,找到了3中解决方法。


    8. •方法一:

    9. 经过调试发现,在执行完applicationDidEnterBackground之后(也就是单击HOME键),才会发生截屏处理。
    10. 1、单击HOME键
    11. 会依次执行applicationWillResignActive -> applicationDidEnterBackground

    12. 2、双击HOME或者四指向上滑动
    13. 只执行applicationWillResignActive

    14. 根据上述调试结果,可以在AppDelegate中进行如下处理:

    15. - (void)applicationWillResignActive:(UIApplication *)application
    16. {
    17.     // 如果启用了密码保护,则添加临时的空白画面来遮挡当前显示内容
    18.     if (usePin)
    19.     {
    20.         if (self.lockView)
    21.         {
    22.             [self.lockView removeFromSuperview];
    23.             self.lockView = nil;
    24.         }

    25.         self.lockView = [[[UIView alloc] initWithFrame:self.window.bounds] autorelease];
    26.         self.lockView.backgroundColor = [UIColor grayColor];

    27.         [self.window addSubview:self.lockView];
    28.     }
    29. }

    30. - (void)applicationDidEnterBackground:(UIApplication *)application
    31. {
    32.     // 隐藏当前window,可以抑制截屏、或使生成的截屏文件为空白文件
    33.     self.window.hidden = YES;
    34. }

    35. - (void)applicationDidBecomeActive:(UIApplication *)application
    36. {
    37.     // 显示window
    38.     if ([self.window isHidden])
    39.     {
    40.         self.window.hidden = NO;
    41.     }

    42.     // 此处添加你的密码输入画面
    43.     if (usePin)
    44.     {
    45.         // TODO:设置密码输入画面
    46.     }

    47.     // 删除临时画面
    48.     if (self.lockView)
    49.     {
    50.         [self.lockView removeFromSuperview];
    51.         self.lockView = nil;
    52.     }
    53. }
    54. •方法二:

    55. 调用UIApplication的ignoreSnapshotOnNextApplicationLaunch。
    56. 鉴于该方法只在iOS SDK 7.0之后才出现,无法解决iOS6中的截屏问题,果断放弃。
    57. •方法三:

    58. 可以在info.plist中设置UIApplicationExitsOnSuspend属性。
    59. 缺点:进入后台即关闭应用,局限性比较大。
    复制代码
    主题:
    级别:游客
    发帖:
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表