- 投稿日:2020-10-28T16:12:26+09:00
Alertを起動中1回のみ表示・二度と表示しない機能
ダイアログによくある選択肢
パターン①OK
--押下後、起動中はもう表示しない。次回起動したら、また表示するパターン②二度と表示しない
--押下後、もう表示しない再起動しても表示しなくなる。
アプリをアインインストール、再度インストールしたら、また表示するそれぞれを実装してみましたのでメモしておきます。
アプリ起動、ダイアログのOKの押下後、FlagをTrueにして起動中に表示させなくなるための準備
DialogHelperclass DialogHelper { static let shared = DialogHelper() var dialogDidSee = false func getDialogStatus()->Bool{ return dialogDidSee } func setDialogStatus(_ flag:Bool){ dialogDidSee = flag } }アンインストールするまで二度と表示させないため
アプリ終了後も消えさせないデータ、ユーザの設定のデータを保存するUser Defaultsの準備UserDefaultsKeyenum UserDefaultsKey: String { case dialogNoMore = "dialog_neverAgain" func initalValue<T>()-> T?{ switch self{ case .dialogNoMore: return false as? T default: return nil } } }ViewControllerでこのようにAlert作成
Alertを出すべきかどうかを判断、の二つのメソッドを作ります。ViewControllerfunc showDialogIfNeed(){ let didSee = DialogHelper.shared.getDialogStatus() let neverSee = UserDefaults.standard.bool(forKey: UserDefaultsKey.dialogNoMore.rawValue) if neverSee { return }else{ if didSee { return }else { createDialog() } } } func createDialog(){ let alert:UIAlertController = UIAlertController(title: "Here is a message for you!", message: "", preferredStyle: .alert) let okAction:UIAlertAction = UIAlertAction(title: "OK", style: .default, handler: { (action:UIAlertAction!) -> Void in DialogHelper.shared.setDialogStatus(true) }) let neverAgainAction:UIAlertAction = UIAlertAction(title: "Never remind me", style: .default, handler: { (action:UIAlertAction!) -> Void in UserDefaults.standard.set(true, forKey: UserDefaultsKey.dialogNoMore.rawValue) }) alert.addAction(okAction) alert.addAction(neverAgainAction) present(alert, animated: true, completion: nil) }ViewControlleroverride func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) showDialogIfNeed() }動いてみて試したら、OKボタンとNeverAgainボタンがちゃんと動作しました。
ちなみにこのようなLayoutを作りました。
viewDidLayoutSubviews()を忘れずに気をつけよう。ViewControllerlet label = UILabel() override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = UIColor.brown label.text = "Please see the Dialog" label.textAlignment = .center view.addSubview(label) } override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() label.frame = view.bounds } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) showDialogIfNeed() }
- 投稿日:2020-10-28T14:34:09+09:00
【iOS14】「からペースト」通知が出る外部ライブラリまとめ
最新版では修正されている可能性がありますが、以下のライブラリでは「からペースト」通知が出ることがあるようです。
コメントいただければ未検証ですが、情報を追記していきます。
- Firebase/DynamicLinks
https://github.com/firebase/firebase-ios-sdk/issues/5893- GoogleMobileAd.framework (このフレームワーク削除したら「からペースト」が出なくなった)
- 投稿日:2020-10-28T13:52:21+09:00
【Swift】Documentディレクトリのフルパスはビルドやアップデートの度に変更される罠
Documentディレクトリのフルパスはビルドやアップデートの度に変更される事を知らずにハマってしまったので誰かの助けになればと思います。
Documentディレクトリのフルパスを取得
let documentPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].absoluteStringprintしてみる
print(documentPath)
出力結果
file:///var/mobile/Containers/Data/Application/914B4E18-01A6-4538-9AD7-3B9887FE4B13/Documents次にビルドを再度行い、Documentディレクトリのフルパスをprintした結果
出力結果
file:///var/mobile/Containers/Data/Application/A5A17321-C158-4A5B-B8C7-5CF53F0C78EF/DocumentsパスのApplication下の数列を比べてみる
◆Application/914B4E18-01A6-4538-9AD7-3B9887FE4B13/Documents
◆Application/A5A17321-C158-4A5B-B8C7-5CF53F0C78EF/Documents
Application下の数列 914B4E18-01A6-4538-9AD7-3B9887FE4B13 A5A17321-C158-4A5B-B8C7-5CF53F0C78EF ビルド(アップデート後)にこの数列が変更されているのがわかります。
まとめ
Documentディレクトリのフルパスをそのまま保存してデータの呼び出しに使うと、ビルドする度にURL先が見つからないという問題が発生してしまいます。
なので、ファイル名だけ保存して、その都度Documentディレクトリのフルパスを取得して繋げるというやり方で対応しました。もし、他に何かいい対策があれば教えてください?♂️
- 投稿日:2020-10-28T00:27:19+09:00
Swift初心者 Xcodeでのデバッグ術メモ
概要
この記事はプログラミング初心者である筆者の備忘録です。
随時追記予定。Swiにおけるデバッグ方法まとめ
- Break pointとは
- LLDBコマンド
- ビューデバッガ
- 参考
Break pointとは
テスト中にbreake point を設定した行で処理を止めてくれる。
これを利用すると、1行ずつデバッグができる。
設定するには、下の画像のようにエディタ左端の数字をクリックするとチェックが付き設定できる。
このまま実行すると下の画像のようにBreak pointで処理が停止し、デバッグエリアが出てくる。
デバッグエリアでコマンドを利用したりして色々デバッグができる。
LLBDコマンド
LLBDとはソフトウェアデバッガの1つ(たぶん)。
デバッグエリアのコンソール画面でコマンドを打ち込んでデバッグを行う。poコマンド
おそらくprint objectの略だと思われる。
po <変数>expressionコマンド
expression <変数> = <値>で指定した変数に任意の値を代入できる。poコマンドと組み合わせれば、いちいちビルドし直すことなくprintデバッグが可能。うれしい。
ビューデバッガ
Xcode標準装備のView Hierarchy行う。直訳するとビューの階層。アプリ上のViewの階層構造を把握できる。
上の画像中の赤丸で囲ったボタンをクリックすると起動する。
実はまだ使ったことがないのでここからは追々追記することにする。参考