iOSエンジニアのつぶやき

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

iOS

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

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

【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】現在から〇〇時間後の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枚の間で複数選択を有効にして、全て正方形の画像として取得できるよう…

【iOS】Fastlane で iOS の Build Number をインクリメント

今日はタイトルの通り Fastlane で、Xcode プロジェクトの build number をインクリメントする方法を紹介したいと思います。 それではやっていきましょ 結論 まずは、build number をインクリメントするためのレーンを Fastfile に追記します。ensure_git_st…

【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 で行っておりやす。 それではやっていく まずは、通知を送信できるようにするためにユーザに許可してもらう必要が…

【iOS】Fastlane で Version と Build Number を取得して使えるようにする

今回は、Fastlane でアプリの Version や Build Number を取得したい時の Tips を紹介します‍ Version の取得 PlistBuddy を使用することで、Info.plist の値を操作しやすくすることができます。CFBundleShortVersionString はアプリのバージョンを指してい…

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…

Firebase で Sign in with Apple 🔥

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

CollectionView でページスクロールを作ろう

みなさん、最近 CollectionView は使っていますでしょうか?CollectionView っレイアウトの方法がいっぱいあってどれを使うべきか結構迷いますよね〜‍♀️ 今回はそんな CollectionView を使って、ページをめくるようにスクロールすることのできる UI を作って…

Swift で正規表現

みなさん Swift で正規表現使ったことありますか?僕は、iOSアプリ開発はじめたての頃、よく分からずググりまくっていました 今回は、そんな少しとっつきづらい正規表現を改めてまとめることで、再理解しちゃおうぜ!という記事です 正規表現とは? 文字列の…

Xcode11.x(12未満) で iOS14.x の実機インストールができない

あるプロジェクトで、Xcode11.4.1 を使用していて iOS14.1 にバージョンアップした iPhone で実機インストールができないという問題が発生していました。 Failed to start remote service on device. Please check your connection to your device. 以前紹介…

Fastlane match で Provisioning Profile を更新する

今回は新しいデバイスの追加により、fastlane で管理している provisioning profile を更新する必要があったため、その作業メモを残しておきます 作業していくっ‍ とりあえず、オプションの付与などを更新毎に設定するのは面倒なので、Fastfile に、Provisio…

iOS14 の PhotoLibrary アクセス API を更新する

今回は iOS14 での PhotoLibrary 周りの更新を簡単にまとめます。主なアップデートは Limited Photos Library と、Photos Library access level の二つです。 Limited Photos Library Limited Photos Library はその名の通り、アプリにアクセスを許可する写…

Xcode のバージョンを上げる前に、実機の iOS バージョンを上げてしまった時の対処法

iOS アプリ開発をしていると、Xcode が対応していない iOS バージョンに端末の OS を上げてしまうことが多々あるかと思います。そんな時は、下記の手順で Xcode のサポートする iOS バージョンを追加します。 まずは、iOS のサポートファイルをまとめてくれ…

Error packaging up the application の対処法

今回は、Firebase App Distribution を使った Staging アプリの配信で詰まっていた Error packaging up the application の対処法について簡単にまとめます。 起こっていたこと Staging アプリの Bundle ID の変更に伴い、証明書の発行や Firebase の設定な…

iOS14 Widget Configuration まとめ2

今回は、前回の Widget Configuration まとめ Part1 に続き、後半の内容をまとめていきたいと思います。 developer.apple.com 目次 Widget Configuration UI のタイトルや内容背景の色などをカスタマイズする方法について Widget System Intelligence につい…

iOS14 Widget Configuration まとめ1

今回は前回の iOS14 Widget の記事に続き、Widget Configuration に関して、下記の WWDC2020 セッションから得た知見をまとめていこうかと思います。また、1日で全ての内容をまとめる時間がなかったため、Part1・Part2 の二部構成でまとめていきたいと思いま…