iOSエンジニアのつぶやき

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

2021-03-01から1ヶ月間の記事一覧

FSCalendarでスワイプによる複数選択を有効にする

今回はFSCalendarの小ネタです github.com 結論 FSCalendarのallowsMultipleSelectionとswipeToChooseGestureの値の両方を有効にすると、スワイプによる複数選択ができるようになります。 calendar.allowsMultipleSelection = true calendar.swipeToChooseGe…

【Algolia】インデックスを日付でソートする

本日はAlgoliaのインデックスを日付でソートする方法を簡単に紹介していきたいと思います👷‍♀️ それではやっていく インデックスをソートするにあたり、まず大前提として知っておくべきことが二点ほどあります。一つ目は、インデックス毎に一つのランキング式…

【Xcode】特定のファイルをビルド時に除外する

結論 Build Optionsで除外したいファイルのパターンリストをEXCLUDED_SOURCE_FILE_NAMESに設定することで、ビルド時に特定のファイルを除外することができるようになります。 例えば、Mockという名前がついているファイル群を本番環境で除きたい場合は下記の…

【CocoaPods】Specsとは?

CocoaPods Specsとは? ライブラリのバージョン、プラットフォーム 、ソースの取得場所、説明などのメタデータが記載されたファイルのことです。 また、これらのファイルはGithub上のCocoaPods/Specsに一覧として存在します。 ちなみに、これらSpecsはCocoaP…

【CircleCI】CocoaPodsのキャッシュがうまくできない

先日CircleCIでCocoaPodsによるライブラリの依存関係をキャッシュしようと下記のようなJobをconfig.ymlに追加しました。 jobs: // 省略 cocoapods_dependencies: executor: hoge-macos steps: - restore_caches - run: name: CocoaPods install command: mak…

【Swift】ClosureのCapture List再入門

Capture Listとは? キャプチャリストは、よくClosure内で強参照によるインスタンスを保持を防ぐ下記のようなもので、Closure内で、ある値のキャプチャ方法を指定する役割があります。 let hoge = {[weak self] in self.hoge() } キャプチャ方法 キャプチャ…

【Swift】ユーザにアプリのレビューリクエストをする

最近ユーザにアプリのレビューリクエストを行う対応をしたので、備忘録として残しておきます✍️ ちなみにこれ。 結論 iOS10.3以降はこれでできる。ちなみにこのリクエストダイアログは一年で3回までしか表示できないらしいので注意が必要。 import StoreKit S…

【Firestore】セキュリティルールの便利な関数たち

get() 指定したパスのドキュメントの情報を取得します。例えばusersコレクションのhogeというドキュメントのnameフィールド値を取得したい場合は下記のようになります。 allow read: if get(/databases/$(database)/documents/users/hoge).data.name == 'hog…

Visual Studio Codeでのスニペット登録

今回は、Visual Studio Code でのスニペット登録を簡単に紹介します‍ ちなみにバージョンは1.54.3です。 それではやっていく まずは、Code > Preferences > User Snippets を選択します。 次に表示されたウィンドウから、スニペットを作成したい言語を選択し…

【JavaScript】特定のプロパティを除いたオブジェクトを作成

本日もJavascriptの軽いメモです‍♀️ 結論 下記の { a, b, ...cObject} のように、{ 取り除くプロパティ, ...オブジェクト名} = 元のオブジェクト名 とすることで特定のプロパティを除いた新しいオブジェクトを生成できるようです const abcObject = { a: "a"…

CircleCIでCarthageのビルド済みバイナリをキャッシュする

Carthageのビルド済みバイナリを今までプロジェクトのソース管理に含めてきましたが、Xcodeを移行しづらかったり、プロジェクトのレポジトリが肥大化してクローンにかなり時間がかかったりなど、そろそろ限界を感じてきたので、ついに.gitignoreに追加して C…

【CircleCI】expected type: String, found: Mapping の対処法

凡ミスエラーですが、誰かのためになることを祈ってメモしときます‍♂️ エラー内容はこんな感じ(一部抜粋)。 Error: ERROR IN CONFIG FILE: [#/jobs/checkout_code] 0 subschemas matched instead of one 1. [#/jobs/checkout_code] only 1 subschema matches…

【Swift】makeKeyAndVisibleってなにしてるんだっけ?

結論 makeKeyAndVisible は、windowを key window として設定することで、同一レベル(もしくは同一レベル以下)の windowの最前面に表示するためのメソッドです。 ちなみにレベルには下記のようなものがあり、LevelはrawValueとしてCGFloat値を持ちます。 ext…

【Javascript】 FirebaseError: Function DocumentReference.set() called with invalid data. Unsupported field value: a custom object の対処法

Firestore のセキュリティールールで使用するテストオブジェクトの GeoPoint を下記のように設定するとエラーが発生していました const { GeoPoint } = require("@google-cloud/firestore"); function fieldMapData(fieldId) { return { id: fieldId, name: …

【Swift】optional プレフィックスについて

先日、下記の記事を見て 「optional プレフィックスってそうゆう役割だったのか!」ということを知ったので、メモしておきます✍️ qiita.com ということで、まずは Swift のドキュメントを見てみます。 You can define optional requirements for protocols. …

【Swift】数値を特定の桁数で表示したい

本日は秒速で終わるSwiftの小ネタです‍♀️ 結論 「5」を10桁で表示したい場合に、他の桁を「0」で埋めるサンプルが下記になります。 extension Int { func filled(digit: Int) -> String { return String(format: "%0\(digit)d", self) } } print(5.filled(di…

JavaScriptでオブジェクトのプロパティを削除

今回もJS初心者なのでメモしました✍️ 結論 delete 演算子で下記のように削除ができるようです。 const hoge = { width: 100, height: 200, }; delete hoge.width; console.log(hoge) // Object { height: 200 } developer.mozilla.org てな感じで本日も以上…

Node.jsで別ファイルから関数を呼び出す

JS初心者なのでメモしました✍️ 結論 // hoge.js exports.hogehoge = function () { console.log("Hello world"); } // test.js const hoge = require("./hoge.js"); hoge.hogehoge(); // Hello world ちなみに、require() は CommonJSの仕様で、モジュールを…

XCFrameworkとは?

最近巷で聞く XCFramework がなんなのかをよく理解していなかったので、超簡単に概要を調べました✍️ XCFramework とは? Xcode11からバイナリフレークワークの配信のために新たにサポートされた方法で、下記のようにAppleプラットフォームの様々なターゲット…

【iOS】キーチェーンの概要

「セキュアなデータをローカルに保存したい!」時によく使うiOSのキーチェーンについて、初学者向けに超ざっくりな概要を書きました。 キーチェーンとは? キーチェーンは機密性の高いユーザ情報などを iCloud 領域にセキュアに保存する仕組みのことです。ま…

【Swift】Assertのあれこれ

今回はSwiftにあるassert 系メソッドのあれこれを調べていきたいと思います‍♀️ そもそもassertionとは? プログラムの実行時に満たされるべき条件をチェックして、条件を満たしていない場合はプログラムを停止したり、エラーを吐いたりする仕組みのことを言…

【Swift】Compilation Mode とは?

今回もSwift コンパイラ周りの小ネタです‍♀️ Compilation Mode とは? Compilation Mode は、プロジェクト内のファイルを全てコンパイルするか、変更されたファイルのみをコンパイルするかをコンパイラに指示します。 Xcode では、下記のように Build Settin…

Swiftコンパイラの最適化レベル

今回はSwiftコンパイラのOptimization Level (最適化レベル)について調べる機会があったので、それらを簡単にまとめてみます‍ 結論 結論、Swiftコンパイラには下記のような最適化レベルがあります。 Level 内容 -Onone 開発時のデフォルトレベルで、最小限の…

【Swift】UIView.animate で連続したアニメーションをする際のコールバック地獄をどうにかしたい

今回は Swift の UIView.animate で連続したアニメーションを実行する際のコールバック地獄を解消する方法を紹介したいと思います 結論 今回の悩みを解消できる素晴らしい記事があったので、車輪の再発明はしません✨ qiita.com Swift の Variadic Parameters…

【Swift】iOSのクリップボードにテキストを設定するメモ

本日は iOS のクリップボードにテキストを設定する方法をメモ程度に残しておこうかと思います 結論 とりあえずテキストを代入したい時はこんな感じで設定ができます。 UIPasteboard.general.string = "hoge" UIImage を設定したい場合はこんな感じ。 UIPaste…

【Swift】UIWindowを使用してポップアップを表示する

今回は、iOSアプリでポップアップを表示する際に UIWindow を使ってグローバルに表示できるような実装を行ったので、そのメモを残しておきます‍♀️ やっていく とりあえず、ポップアップを表示するための Class は下記のようになります。AppDelegate なんかで…

【Swift】reduceってこんな書き方できるんだ

本日は Swift の reduce() に関する小ネタです‍ developer.apple.com 「配列の合計値を取得したい〜」って時、いつもこんな感じで reduce() を書いていました。 let list = [1, 2, 3, 4, 5] let sum = list.reduce(0, { $0 + $1 }) print(sum) // 15 実はこ…

Xcodeのテンプレートファイルを作ってみた

最近 Clean Architecture の実装をしている時などに、新しいファイルを作るたびに Protocol と Class の設定をするのが面倒になってきたので、Xcode のテンプレート機能を使ってファイルの作成をちょっと楽にしてみたいと思います‍♂️ それではやっていく と…

マイクロサービスとは?

今回はタイトルの通りマイクロサービスについて調べていきたいと思います。以前からなんとなくは知ってはいましたが、実際にマイクロサービス化しているサービスでの開発経験がなかったので、これを気にちょっとに調べてみようや!というやつです‍ マイクロ…

【Swift】アクセスコントロールを学ぼう

本日はちょっと記事を書く時間が取れなかったので、初学者向けの内容で Swift のアクセスコントロールについて紹介します‍♂️ 一覧 結論 Swift には下記のようなアクセス修飾子があります。ちなみにアクセス修飾子を付けない場合はデフォルトで internal にな…