Swift
基本 XCTest 画面操作をシミューレートして統合テストが出来ます。(単体テストはUIのついてない方のTestを使う) 新規ファイルの追加でUITestCaseを追加する。 testXXXXXでテスト項目を作る。 setUpWithErrorは各テストケースの実行前に呼ばれ、アプリ立ち…
通知を受信できるように設定する Set up a Firebase Cloud Messaging client app on iOS Identifierの設定 設定にてCapabilitiesのPushNotificationにチェックを入れる。 Certificateの作成 Apple Push Notification service SSL (Sandbox) を選択。 Identif…
アプリ申請には1024x1024のアイコンが必要です。 絵心がないのでフリーのアイコンをちょっと加工したら簡単にアイコンが作れそう。cacoo.comおなじみiconfinder www.iconfinder.comこのcacooという図形作成ツール。以前からあるけど使いやすそう。ワイヤーフ…
提出のための準備 DepeloperのAccountページへ行く。 https://developer.apple.com/account/Certificates, IDs, & Profiles のページへ行く。 Certificateの作成、Identifierの作成、Profileの作成を行う。 Certificateの作成 Macのキーチェーンアクセスのア…
Firebase用のモデルをstructで作成 必須のフィールドには初期値を設定しないことで初期化の時点で入力漏れを防ぐ。 nullを許容する場合Optional型にする。その場合分岐が必要。 nullの場合はNSNull()を入れる。RDBみたいにNullを格納するというよりNull型に…
ハマったこと とある画面でモーダルで開く let nextView = ViewController nextView.modalPresentationStyle = .fullScreen present(nextView, animated: true, completion: nil) 前の画面をpresentingViewControllerで取ろうとするがnilになる guard let pr…
QRコードリーダー AVFoundationを使います。 画像や音声を取得できるライブラリです。今回はmetadataを使ってバーコード認識のみ行います。metadataObjectTypesで認識するバーコードを指定します。 バーコードを読み取ったらdidOutput metadataObjectsが呼ば…
QRコード CIFilterを使います。 画像を加工したり生成するライブラリのようです。 private func generateQrCode(text: String) -> UIImage? { guard let data = text.data(using: .utf8) else { return nil } // 文字列データと誤り訂正レベル(LMQH)を指定…
UITapGestureRecognizer UITapGestureRecognizerを追加します。 isUserInteractionEnabled = trueにしないとRecognizerが機能しないようです。 @IBOutlet var userImageView: UIImageView! let tapGesture = UITapGestureRecognizer(target: self, action: #…
画像の選択 標準のピッカーを使います。 allowsEditing = true で簡易的な編集画面が開き、正方形に切り出せます。 private func openAlbum() { let sourceType: UIImagePickerController.SourceType = .photoLibrary if UIImagePickerController.isSourceTy…
画面の呼び出し 呼び出される画面 class NotificationDetaliViewController: UIViewController { var notification: UserNotification! var result: Bool // storyboardでidentirierを設定済み static func fromStoryboard() -> NotificationDetaliViewContr…
何か処理をして終了時にポップアップさせる DispatchQueue.global(qos: .userInitiated).async { // バックグラウンド処理を実行 doSomething() // メインスレッドで処理 DispatchQueue.main.async { let alert = UIAlertController(title: title, message: …