banner
李大仁博客

李大仁博客

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

iOS開発において、アプリがバックグラウンドに入った際に自動的にスクリーンショットを禁止する。

iOS 7.0 以降、アプリがバックグラウンドに入ると、現在のアプリのウィンドウの状態が記録され、ウィンドウにスクリーンショットが作成されます。これにより、以下のフォルダにいくつかのファイルが追加されます: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 時に、ウィンドウの 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;
//}

追加情報:ホームボタンを 2 回押すか、4 本指で画面を閉じる場合にも、画面を全体的にするためには % E

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。