Iganinのブログ

日頃の開発で学んだ知見を中心に記事を書いています。

【iOS】NavigationBarのUIBarButtonItemにバッジを付与する方法

はじめに アプリを作成する際に通知の数をバッジで表現することがよくあります。たとえば通知タブを作成し、タブにバッジを表示する、UIApplication.shared.badgeNumberに値を設定してアプリアイコンにバッジをつけるといった対応です。 開発を行う中で画面…

【iOS】iOS SDK 13 以上でのビルド時に ダークモード非対応とする際の注意点

はじめに iOS 13からダークモードが導入されてしばらく経ちました。 iOS SDK 13以上(Xcode 11以上)でビルドする場合、ダークモード非対応とする場合はそれ用の対応が必要です。 対応に漏れが発生しかけたので備忘をかねて記載します。 環境設定 以下の環境を…

2020年1月振り返り

1月の振り返り 目標の進捗状況の定期確認です。1月は業務以外で忙しかったこともあり、あまり目標にむけた活動ができませんでした。。2月以降は時間をさけるようにしたいです。 プライベートでは最近流行りのサウナに通いはじめました。疲れが取れるのもあり…

2020年の目標

2020年の目標 2020年は主に以下の領域に注力します。 データ構造とアルゴリズムの理解の向上 プロダクト作成の基礎力向上 アウトプット 身体能力の強化 各目標は上記の注力領域を達成するように作成しています。 データ構造とアルゴリズム プログラミング問…

2019年の振り返り

2019年の振り返り 通年の振り返りです。まずは目標の達成状況の確認から行います。 体の基礎づくり 目標: ベンチプレス 100kg デッドリフト 150kg スクワット 150kg 実績: ベンチプレス 100kg デッドリフト 120kg スクワット 120kg 達成率 33% 未達。 アウ…

2019年12月振り返り

12月の振り返り 目標の進捗状況の定期確認です。12月は数年ぶりに冬服を一通り買い換えました。体のサイズにあわなくなってきたことが一番の理由でしたが、普段きている物を変えるのは良い気分転換にもなりました。衣服は良くも悪くも自身の心持ちに影響を与…

ユニットテストについての少考

はじめに 今年読んだ以下の本の中で設計におけるユニットテストの立ち位置を語る箇所が多くみられました。「レガシーソフトウェアからの脱却」、「レガシーコード改善ガイド」、「CAREER SKILLS」、「クリーンアーキテクチャ」など。実際に仕事の中で使った…

「会計の世界史 イタリア、イギリス、アメリカ――500年の物語」の感想

読んだ本 会計の世界史 イタリア、イギリス、アメリカ――500年の物語作者:田中 靖浩出版社/メーカー: 日本経済新聞出版社発売日: 2018/09/26メディア: 単行本(ソフトカバー) 本書は会計に関して、エピソードを交え歴史的な経緯を追うようにして書かれた作品…

【iOS】Firebase RemoteConfig で作成する強制ダイアログ機構

はじめに Firebase Advent Calendar 12日目です。本稿では、Firebaseを使用した強制ダイアログ表示に関して記載します。ここで、強制ダイアログと表記しているのは、いわゆる強制バージョンアップダイアログに代表されるダイアログを表示し、それ以上のユー…

【Swift】Swift5.1からOptionalのEnumのswitch文をより簡単にかけるようになった

はじめに Swift5.0まで OptionalのEnumのインスタンスに対してswitch文を使用する際は下記のように.some(T)と.noneで記述する必要がありました。 enum Frequency { case daily case weekly case monthly case yearly } let frequency: Frequency? = .daily s…

2019年11月振り返り

11月の振り返り 目標の進捗状況の定期確認です。12月に入り、寒さがより本格化してきました。 僕はと言えば去年まで着れていた服がキツキツになり、とても苦しい日々を送っています。 きつすぎて腕が上がりません、通勤中につり革につかまる動作をする際に両…

Designship 2019 に参加しました

はじめに Designshipはデザイナー向けの国内最大級のカンファレンスです。東京国際フォーラムで11/23-24にかけて開催されました。そちらに参加してきましたので、感想等記載します。なお、1日目は体調を崩し参加できなかったため、後日アーカイブを確認の上…

【Swift】StructやClassスコープからSelfでstatic memberへのアクセスが可能になった

はじめに Swiftではstructやenumおよびclass内からstaticなメンバーにアクセスする際には以下のようにClass名.staticMemberかtype(of: self).staticMemberとする方法がありました。 struct Sample { static var hoge: Int = 0 func sampleFunction() { // ク…

【iOS】iOS13でSystemフォントがTimes New Romanフォントに変更されることがある

概要 タイトル通りです。バグレポートでも上がっているようにUITextViewなどでsystemフォントを指定していた際に、アプリ実行時にTimes New Romanフォントに変更されてしまう、という事象が発生しているようです。 NSAttributedStringKey の .fontに明示的に…

【iOS】Password Autofillの実装

はじめに iOS11からpassword autofillに対応することが可能になりました。 具体的には、パスワード新規作成時にiOSから提案される強力なパスワードを使用したり、keychainにユーザーID、パスワードのセットを記録し、アプリ使用時やWebサイトのログイン時に…

2019年10月振り返り

10月の振り返り 目標の進捗状況の定期確認です。今月に入ってめっきり寒くなり、体調を崩し気味でした。11月は元気に過ごしたいです。 プライベートでは友人に触発され第7世代iPadを購入しました。Kindleでは少々読みづらいためあまり進められていなかったKi…

【Swift】Swift5.1からstructのイニシャライザの自動生成でプロパティのデフォルト値が考慮されるようになった

はじめに Swiftで使用されるstructは定義したプロパティにしたがってイニシャライザメソッドが自動生成されます。 例えば下記のようにUserを定義した場合に自動でイニシャライザが生成されます。 struct User { var id: Int var name: String } // init(id: …

【iOS】Push通知に必要なDeviceTokenの文字列取得に関して

はじめに サーバーからのPush通知を実行するためには、サーバーにDeviceTokenの文字列を保持し、そのDeviceTokenを指定してAPNs(Apple Push Notification Service)に通信を行う必要があります。DeviceTokenはregisterForRemoteNotifications()の実行によって…

【iOS】iOS13からSKProductsRequestのDelegateメソッドがメインスレッドで呼ばれなくなった

はじめに In App Purchaseを実装する際にApp Storeに課金Productを登録し、アプリからそのプロダクトの情報を取得します。 具体的には、下記のようにSKProductsRequestを作成し、取得したい課金プロダクトのIdentifiersをSetで指定、通信結果を func product…

2019年9月振り返り

9月の振り返り だいぶ遅れてしまいましたが、目標の進捗状況の定期確認です。 9月はそろそろ秋になるかと思ったら、また夏のような気候に戻り、なかなか暑さが和らぎませんでした。 いまはもう10月に入ったというのに半袖で過ごせてしまうこの状況に少々戸惑…

【iOS】アプリクライアント側での文字入力のValidation機構について(UITextField, UITextViewなど)

はじめに サービスで使用するEmailアドレスやPasswordなどをアプリから入力する際に、アプリ側でValidationをかけることがあります。 そのような際に行う対応として直感的には以下のようにするかと思います。 extension ViewController: UITextFieldDelegate…

iOSDC 2019に参加しました

はじめに 9/5(木) - 9/7(土)に開催されたiOSDC 2019に参加しました。今年も昨年同様に早稲田大学 西早稲田キャンパスで開催されました。 今回は昨年に引き続き2回目の参加です。9/5(木)が前夜祭、9/6(金) - 9/7(土)がDay1 Day2という位置付けで今年はお…

Kotlin Fest 2019に参加してきました

はじめに Kotlin Fest 2019に参加してきました。本当はもっと早く書きたかったのですが、日々に忙殺される中、気づけば2週間ほどたってしまっていました。 Kotlin Festは「Kotlinを愛でる」をビジョンに掲げたKotlin言語に関するカンファレンスです。今年は…

2019年8月振り返り

8月の振り返り 少し遅れてしまいましたが目標の進捗状況の定期確認です。8月は徐々に暑さも和らぎ、過ごしやすい日々が続きました。 Kotlin festやbuilders conなど面白いカンファレンスもあり大変充実した1ヶ月でした。 体の基礎づくり 目標: ベンチプレ…

【iOS】チュートリアル画面などで使えるUIViewに穴をあける方法

はじめに チュートリアル画面などで、画面全体を半透明な黒いUIViewでおおい、一部分をハイライトして、なんらかの説明文言を表示するといったことがあるかと思います。 この際に、ハイライトしたい部分にUIImageなどを上から重ねるのも手としてはありますが…

【iOS】UITableViewのtableFooterViewを使用する際のはまりどころ

はじめに UITableViewを使用する際に繰り返しの要素はsecitonやcellを用いて表示することが多いかと思います。 主にこれらがUITableViewのメイン要素となり、各sectionのサマリや補足情報をsectionHeaderViewやsectionFooterViewに記載します。 そして、繰り…

【Swift/Kotlin】SwiftのswitchとKotlinのwhenの対比

はじめに 条件分岐を実装する際にif else以外に Swiftではswitch、 Kotlinではwhenを使用します。 基本的にはiOS開発を行っていますので、Kotlinのwhen文を書く際に書き方を思い出すのに少し時間がかかることがあり、 学習の意味もかねて両者の比較を行いま…

【iOS】サーバーからのリモート通知を実施するために必要なアプリ側対応の概略

はじめに Push通知はサービスユーザーに情報を送る上でとても有効な手段です。最近では、Firebase の Cloud Messagingの登場により、キャンペーンのプッシュや固定文言の定期PushはFirebase側で取り扱うことができるようになりましたが、ユーザー個別に動的…

2019年7月振り返り

7月の振り返り 目標の進捗状況の定期確認です。7月は梅雨で体調が悪い日々が続いていましたがなんとか切り抜けられました。 ただ、今度は高熱にやられています。早く秋になるか、もう少し暑さが落ち着いて欲しいです。 体の基礎づくり 目標: ベンチプレス 1…

【iOS】UINavigationControllerでcompletionHandlerを伴ったpush/pop遷移ができるようにする

はじめに 画面のモーダル遷移を実現するUIViewControllerのpresent(viewControllerToPresent: UIViewController, animated: Bool, completion: (() -> Void)?) や dismiss(animated: Bool, completion: (() -> Void)?) では completionがあり画面遷移完了後…