iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

Swift

Swift5.4 つまみ食い【SR-10069編】

ということで今回も Swift5.4 をちょろっと見てみます SR-10069 requested the ability to overload functions in local contexts, which in practice means nested functions can now be overloaded so that Swift chooses which one to run based on the t…

【Algolia】特定の属性のみを検索対象とした検索

今回は Algolia で、特定の属性のみをクエリの対象とした検索機能の実装を行ったので、その方法を簡単に紹介したいと思います‍♂️ それではやっていく ということで、Query の .restrictSearchableAttributes として属性を設定することで、特定の属性を対象と…

Swift5.4 つまみ食い【SE-0284編】

Xcode12.5 beta がリリースされ、これから Swift5.4 を使う機会もあると思うので少しづつ進化した部分を見ていきたいと思います 今回はこちらから。 This proposal seeks to remove the first restriction while leaving the second in place, allowing a fu…

【Swift】TableView のセクションごとに Separator を出しわけよう

今回は UITableView で、セクションごとに Separator を出し分ける方法を紹介したいと思います‍♀️ 結論 Separator を表示したくない Cell の場合、下記のように UITableViewCell の separatorInset プロパティの値をうまく調整することで非表示にすることが…

【Swift】iOS プッシュ通知の許可周り

久しぶりに通知の許可周りの実装をしたので、今回は初学者向けに通知の許可設定の実装方法を紹介していきたいと思います‍♀️ ユーザがアプリの許可をしているかどうか UNUserNotificationCenter.current().getNotificationSettings { settings in switch sett…

【RxSwift】TextField で .editingChanged の時だけ文字列を取得したい

RxSwift で TextField.text の変更をリッスンしたい時、下記のように書こうとした経験がある人は結構多いかと思います textField.rx.text .subscribe(onNext: { text in print(text) }) .disposed(by: disposeBag) あまり RxSwift に馴染みのない場合、これ…

【Swift】UITextField の text プロパティはなぜオプショナルなのか?

さっそくですがみなさん、下記のコードの出力はどうなると思いますか? let textField = UITextField() textField.text = nil print(textField.text) 結果は Optional("") になります。何故 nil にならないのか不思議ですよね 理由としては、Objective-C で…

【Swift】PresentingViewController と PresentedViewController の違い

時々使う UIViewController のプロパティ presentingViewController と presentedViewController において、どっちがどの ViewController を指しているのか分からなくなってしまうことがあるのでメモしておきます 結論 それぞれの対応関係は下記のようになり…

【Swift】UIRefreshControl をコードからリフレッシュさせる

本日は UITableView や UICollectionView に追加した UIRefreshControl をコードからリフレッシュさせる方法を紹介したいと思います 結論 基本的には UIRefreshControl の beginRefreshing() を呼び出すことで、リフレッシュの UI は表示されているのですが…

【Swift】TextView のカーソル位置を取得する

今回は、タイトルの通り TextView から Cursor 位置 (Frame) を取得する方法を紹介していきたいと思います‍♀️ 結論 結論下記のように Cursor の Frame を取得することができます。UITextInput のインスタンスプロパティ selectedTextRange でテキスト内で選…

【Swift】Algolia からデータを取得する

みなさんこんにちは。最近個人アプリ開発に熱中しすぎるあまりネタが切れている Yamato です‍♀️ というわけで、本日はタイトルの通り Algolia からデータを取得する方法を紹介したいと思います。 結論 というわけで、下記がデータを取得するサンプルになりま…

【Firestore】Swift で該当する月のデータを取得する

今回は、Firestore に保存されているデータで、該当する月のデータのみを取得してくる方法のサンプルを紹介していきたいと思います。 結論 サンプル実装は、Ballcap という Firestore のラッパーライブラリを使っていますが、基本的にやることは同じで isGre…

【Swift】現在から〇〇時間後のDateを取得する

本日も初学者向けの内容で、現在から〇〇時間後や〇〇日前の Date を取得する方法を紹介したいと思います。 結論 下記のように Calendar のインスタンスメソッド date(byAdding:to:options:) で DateComponents に .hour を、value に 1 を追加することで 1…

【Swift】MapView で Map を表示するだけの記事

本日もタイトルの通り短い内容になりますが、初学者向けに Swift の MapView で Map を表示する方法を紹介したいと思います‍♂️ それではやっていく 今回は下記のように、特定の地点で固定表示できるようにするサンプルを実装してみます。 MKMapView の実装は…

【Swift】Navigation に複数のアイテムを設置

本日も短い内容ですが、初学者向けに NavigationBar に複数のアイテムを設置する方法を紹介したいと思います。iOS標準のカレンダーなんかはアイテムが二つ設置されていますよね 結論 UIViewController のプロパティを navigationItem の navigationItem.righ…

【Swift】Date型で同じ年、月、週かどうかを取得できるようにする

今回はタイトルの通り Swift の Date 型で、2つの Date が同じ年、月、週かどうかを取得する方法を紹介したいと思います‍♂️ 方法 とりあえずコードは下記のようになります。今回は Date の Extension として定義しています。 extension Date { func isEqual(…

【Swift】YPImagePicker を使ってみた

iOS で Photo と Video のいい感じのピッカーライブラリを探していたところ、YPImagePicker というものを見つけたので使い方を紹介したいと思います‍♂️ github.com 使ってみる 今回は1~3枚の間で複数選択を有効にして、全て正方形の画像として取得できるよう…

【Swift】Realmでテストを行う

今日は、Swift ので単体テストを行う際に Realm のデータベースを入れ替えてテストする方法を紹介したいと思います それではやっていく まずは、テストのデータを格納するための .realm ファイルを作成し保存します。また、簡単なテストデータ作るときは Rea…

【Swift】iPad で UIActivityViewController の表示に気を付ける

iPhone で UIAlertController を表示させたことがある方なら馴染みがあると思いますが、UIAlertController や UIActivityViewController は iPad でそのまま表示処理を書いてしまうとランタイムエラーでクラッシュしてしまいます。 筆者も UIActivityViewCon…

【Swift】アプリのバージョンを比較する

個人で開発中のアプリで、バージョンに応じて強制アップデートをかける際に、現在のバージョンと必須バージョンの比較をすることがあったのでその方法をメモしておきます✍️ 結論 必須のバージョン(requiredVersion)と現在のバージョン(currentVersion)を比較…

【Swift】CropViewController を使ってみた

今日は、Swift や Objective-C で画像をトリミングする際に非常に有名なライブラリ、CropViewController を使ってみたいと思います github.com Swift 標準の UIImagePickerController クラスでもallowsEditing を true にすることで、画像選択後にトリミング…

【Swift】ローカルプッシュを送信する

今日はタイトルの通り、Swift でローカルプッシュを送信する方法を紹介したいと思います‍♀️ ちなみに、実装は Swift5.3 で動作確認は iOS14.1 で行っておりやす。 それではやっていく まずは、通知を送信できるようにするためにユーザに許可してもらう必要が…

Apple(iPhone, iOS, Mac, macOS)の歴史を振り返る

まえがき 本記事は、iOS Advent Calendar 2020 の16日目の記事です‍♀️ 詳細は Qiita の方で書いたので、よければそちらをご覧ください 年表 下記をご参照ください‍♂️ qiita.com あとがき 振り返って見るとAppleの技術進歩のスピードが恐ろしく早くて驚愕しま…

【Swift】Firebase Storage で JPEG ファイルをアップロードする

今日はタイトルの通り、Firebase Storage で JPEG ファイルを Swift でアップロードする方法を紹介したいと思います‍♀️ 使ったもの 今回の実装をする上で使用したものは下記になります。 Firebase/Storage 6.34.0 RxSwift 6.0.0-rc.1 Xcode12.0.1(Swift5.3) …

【Swift】Realm + RxSwift でデータの更新を通知する

今回は RxSwift で Realm のデータ(Object) の更新を通知する方法を簡単に紹介します‍♀️ それではやっていく データの変更を通知するための Observable を返すメソッドは下記のようになります。Realm Object のインスタンスメソッド observe でデータの変更…

【Swift】NavigationBarの戻るボタンをカスタマイズしよう

今回は初学者向けに、Swift で NavigationBar の戻るボタンをカスタマイズする際のベストプラクティスを紹介したいと思います‍ ちなみに今回のゴールは下記のようになります。 before after コード まず前提として覚えておく必要があるのは、戻るボタンは Im…

Stripe Connect について少し調べる

個人で開発しているアプリで、CtoC の決済を実現するために Stripe Connect について少しだけ調べたのでまとめておきます‍♀️ (実際に利用したらまた記事書きます) アカウントのタイプ Stripe Connect を導入するにあたり、アカウントタイプというものをビジ…

Firebase で Sign in with Apple 🔥

みなさん、おはようございます。今年も Qiita Advent Calendar に申し込みましたが、ネタが無い Yamato です‍ ということで、今回はタイトルの通り Firebase で Sign in with Apple を実装する手順を紹介していきたいと思います。 前提 iOS13 以上をアプリタ…

RxSwift の Subject での Error の取り扱いに注意する

PublishSubject に onError() でError を流した場合、次回以降同一の Subject オブジェクトをサブスクライブすると、初回時に Error が流れてくるようです🧑‍🔧 具体的には下記のような感じです。 let relay = PublishSubject<String>.init() let disposeBag = DisposeBa</string>…

UserDefault でカスタムクラスを保存しよう

今回は、Swift の UserDefault で簡単に自分が作成したクラスを保存する方法を紹介したいと思います‍ それではやっていく‍ やることは、簡単で Entity を Codable に準拠させることで、Data型への encode と decode を簡単にします。 struct FieldData: Coda…