掩盖用户的敏感数据-它是私有的。

作为应用程序开发人员,我使用Apple的iTunes Connect检查销售情况。 当您为应用程序提供背景信息时,它会模糊所有销售数据(非常酷!)

他们为什么这样做? 好吧,Apple建议您将其作为最佳实践,因为iOS会为您的应用创建快照并将其存储在文件系统的缓存中。

您可以通过下载iExplorer自己查看。

这仅适用于您在App Store以外(例如通过Xcode)安装的应用。 否则它将被隐藏,除非有人越狱了您的手机。

您可能会说,嘿,如果有人拥有我的手机并且知道如何越狱……他们可以访问我的应用程序的最新视觉状态在我要担心的事情上并不重要。 我明白了 但是另一方面,如果某些事情是可以预防的,那么防止它们仍然是一个好主意。 这就像决定是否要吃最后一个曲奇,即使您一次坐着吃完了盒子的其余部分。 您仍然可以选择不吃最后一个cookie,这样会更好。

实际上,安全公司建议在审计过程中从iOS的快照功能中隐藏敏感数据。 您会注意到所有银行应用程序都这样做。 (请参见顶部的gif。)他们的解决方案有些手。 无论您在应用程序中的什么位置,他们都用公司的初始屏幕覆盖了所有内容。

我不怪他们。 他们可能从Apple的示例中复制了该技术,该示例向您展示了如何使用Objective-C用纯黑视图控制器覆盖所有内容。 让我们做得更好。

 协议DisplaysSensitiveData {
     func hideSensitiveData()
     func showSensitiveData()//我们弄得一团糟,我们将其清理干净
 } 

将该协议扔到您要保护的任何视图控制器及其容器视图控制器上。 例如,UINavigationController:

 扩展UINavigationController:DisplaysSensitiveData {
     func hideSensitiveData(){
        如果让vc = topViewController为?  DisplaysSensitiveData {
             vc.hideSensitiveData()
         }
     } func showSensitiveData(){
        如果让vc = topViewController为?  DisplaysSensitiveData {
             vc.showSensitiveData()
         }
     }
 } 

最后,挂接到UIApplicationDelegate以便在应用程序后台运行或返回时进行适当的调用。

  func applicationDidEnterBackground(_ application:UIApplication){
  如果让vc = window?.rootViewController as?  DisplaysSensitiveData {
     vc.hideSensitiveData()
   }
 } func applicationWillEnterForeground(_ application:UIApplication){
  如果让vc = window?.rootViewController as?  DisplaysSensitiveData {
     vc.showSensitiveData()
   }
 } 

有关更复杂的示例,请查看我的自拍应用程序。 由于人脸现在是敏感数据,因此我决定在应用程序出现背景时遮住您的眼睛。

面部敏感度不是开玩笑! 苹果会在默认的相机应用程序中使用模糊技术,请自行检查。

肖恩在 Livefront 绘制矩形