三者に個人を特定できる情報を提供することはありません。個人情報の管理には細心の注意を払い、以下に掲げた通りに扱います。
 
バイスやアプリバージョンの使用率、特定の機能の使用率などを解析し、アプリの改善に役立てています。(例えば、より使われている機能の改善を優先的の行うなど)
 
※ご不明な点があれば、お気軽にお問い合わせください。  

環境


Swift 4.1
Xcode 9.3.1

下記のコードをどこか適当な.swiftファイルに書いておけば良い。
 
import Foundation

#if !DEBUG
func print(_ items: Any..., separator: String = " ", terminator: String = "\n") {
    // なにもしない
}
#endif

Edit Schemeから「Build Configuration」を"Debug"から"Release"に変更して実行してみるとログが出力されない事を確認できる。
スクリーンショット 2018-05-17 20.42.38





環境


Swift 4.0.2
iOS 11.1.2
Xcode 9.1




アプリ側でスクリーンショットは阻止できない


残念ながら、現状ではアプリ側でスクリーンショットを阻止する事はできない様です。
Androidだと出来る様ですが、iOSの場合スクリーンショットを撮った後の通知しか取得できない為、スクリーンショットの直前に画面を黒くする等の実装もできません。
何故なんだろう...


スクリーンショット撮影後の通知は受け取れる


下記の様にすればスクリーンショットが撮影された直後の通知が受け取れます。
正直使い道が分かりませんが...。
スクリーンショットを元に画像を加工したい時とかに使うんですかね。
 
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Observerとして登録
        NotificationCenter.default.addObserver(self,
                                               selector: #selector(self.didScreenshot),
                                               name: .UIApplicationUserDidTakeScreenshot,
                                               object: nil)
    }
    
    @objc func didScreenshot()
    {
        //スクリーンショットが取られた後に行いたい処理
    }

Observerとして登録する際の引数[name]にはNSNotificationName構造体に定義されているUIApplicationUserDidTakeScreenshotを指定しています。
Didとある様にスクリーンショットが取られた後の通知になります。
残念な事にUIApplicationUserWillTakeScreenshotなんてものはありません。

 
DRMで保護されたコンテンツはスクリーンショットを防げる



Hulu等の有料ストリーミング動画などを再生中にスクリーンショットで撮影しようとすると動画部分が真っ黒になります。
私はこれを見て、「なんだスクリーンショット防げるんじゃん!」と思って期待したのですが、これはDRMで保護されたストリーミング動画をOS側で上手い事処理しているだけでアプリ側で何かしらの対処をしている訳ではない様です。


動画キャプチャは防げる  

iOS11から動画キャプチャの機能が実装されました。
設定>コントロールセンター>コントロールをカスタマイズの中に「画面収録」というのがあるのでそれをコントロールセンターに追加すると、コントロールセンターから動画キャプチャを行える様になります。

アプリ側では「現在録画されているのか」という情報と「録画状態の切り替わり」の検知が行えます。
なので、「録画中は画面を黒くする」といった対応が可能です。
スクリーンショットと違い、しっかり録画前に画面更新等が行える様になっています。

下記のコードでは動画キャプチャ中だけ画面が赤くなる様にしています。
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if #available(iOS 11.0, *)
        {
            if UIScreen.main.isCaptured{//録画中なら画面を赤くする
                self.view.backgroundColor = UIColor.red
            }
            //Observerに登録
            NotificationCenter.default.addObserver(self,
                                                   selector: #selector(self.captureStatusDidChange),
                                                   name: .UIScreenCapturedDidChange,
                                                   object: nil)
        }
    }
    
    @objc func captureStatusDidChange()
    {
        if UIScreen.main.isCaptured{//録画中なら画面を赤くする
            self.view.backgroundColor = UIColor.red
        }
        else{
            self.view.backgroundColor = UIColor.white
        }
    }

↑このページのトップヘ