本日もSwiftの小ネタです👷♀️
結論
SwiftのError
プロトコルは、code
プロパティを持たないので、下記のようにNSError
に変換することでcode
を取得するようにします。
extension Error { var code: Int { return (self as NSError).code } }
てな感じで本日も以上になります🍺
本日もSwiftの小ネタです👷♀️
SwiftのError
プロトコルは、code
プロパティを持たないので、下記のようにNSError
に変換することでcode
を取得するようにします。
extension Error { var code: Int { return (self as NSError).code } }
てな感じで本日も以上になります🍺
久しぶりにAPNs
証明書の更新を行ったので、本日はそのメモでも残しておきます👷♀️
ちなみに、今回のプロジェクトではPush
通知を送るためにApple Push Notification Service SSL(証明書)
を使用していますが、基本的にはApple Push Notification Authentication Key(認証キー)
を使用した方が、アプリ毎に証明書を作る手間や証明書を更新する手間が省けるのでオススメです。
基本的にやることは、APNs
証明書作成時とほぼ同じです。
まずは、Apple Push Notification Service SSL
の証明書を発行します。Developer
ポータルのCertificates, Identifiers & Profiles
でCertificates
を追加します。
次に適用するAppID
を選択します。
最後に使用するCSR
を選択して、continue
したら証明書をダウンロードしましょう。
今回は、FirebaseCloudMessaging
に証明書をアップロードする必要があるので.cer
から.p12
ファイルを生成していきます。ダウンロードした証明書をダブルクリックしてキーチャーンアクセス
を開きましょう。
キーチェーンを開いたら該当する証明書から下記のように.p12
ファイルを書き出すことができます。ちなみにこの時、左の三角印は開いておく必要があるっぽいです。
てな感じで本日も以上になります🍺
REMOVE_GIT_FROM_RESOURCES
をtrue
に設定することで、バンドルリソースのコピー時に.git
ディレクトリが除外されるようになります👷♀️
REMOVE_GIT_FROM_RESOURCES=true
てな感じで本日も以上になります🍺
本日は初学者向けの内容で、UITableView
で空のCellを表示させないための簡易的な処理を紹介したいと思います👷♀️
よくあるこれです。
tableFooterView
プロパティに空のUIView()
をセットすれことで、空のCellが表示されないようになります。
tableView.tableFooterView = UIView()
てな感じで本日も以上になります⛺️
今回はFSCalendar
の小ネタです📱
FSCalendar
のallowsMultipleSelection
とswipeToChooseGesture
の値の両方を有効にすると、スワイプによる複数選択ができるようになります。
calendar.allowsMultipleSelection = true calendar.swipeToChooseGesture.isEnabled = true
てな感じで本日も以上です🍺
本日はAlgolia
のインデックスを日付でソートする方法を簡単に紹介していきたいと思います👷♀️
インデックスをソートするにあたり、まず大前提として知っておくべきことが二点ほどあります。一つ目は、インデックス毎に一つのランキング式しか提供することができないということです。つまり、異なる方式でインデックスをソートしたい場合には、それぞれでインデックスを別途作成する必要があります。そして、そのような状況で作成するインデックスをAlgolia
ではReplicas
と呼びます。二つ目は、ソートに使用するattribute
はboolean
かnumerical
である必要があるということです。つまり、ISO8601
文字列で「2008-09-15T15:53:00」
のようなstring
のattribute
はソートに使用できないので、Replicas
を作成するタイミングで、UNIX timestamp
などに変換する必要があります。ちなみに、今回はFirestore
から取得したTimestamp
を使用していて、すでにnumerical
で値が保持されているので、変換については特に触れません。
ということでまずは日付でソートするためのReplicas
を作成していきます。ダッシュボードから元となるインデックスのReplicas
セクションで、Replicas
の名前を入力します。ちなみにReplicas
の名前のプレフィックスまたはサフィックスにはdesc
・asc
などをつけることが推奨されています。
名前を入力するとダイアログが表示されるので、変更を保存します。これでReplicas
の作成は完了です。
次に作成したReplicas
のソート方法を設定します。今回は下記のようなデータのcreatedAt._seconds
をソートするattribute
として使用します。
{ "categoryId": "0", "createdAt": { "_seconds": 1612168694, "_nanoseconds": 168000000 }, "fideeId": "a.san", "fieldId": "FYR3VvSikpJS7aca9VTO", "name": "Aさん", "updatedAt": { "_seconds": 1612168694, "_nanoseconds": 168000000 }, "objectID": "1FmuoPdNczQ1r2tIQTCOMnQjNTA3" }
作成したReplicas
(インデックス) のConfiguration > Ranking and sorting
で+ Add sort-by attribute
を選択して、ソートするattribute
を入力後、降順・昇順も選択します。これで設定を保存したら、準備は完了です。
あとは日付でソートしたいタイミングで、作成したReplicas
を呼び出せば日付でソートされたデータを取得することができます。
let sortByCreateDate = true let indexName = sortByCreateDate ? "dev_guide_create_date_desc" : "dev_guide"; let index = client.index(withName: indexName) index.search(Query(query: "")) { (result, error) in // use result and error }
ちなみに、今回はダッシュボードでReplicas
の設定を行いましたが、API
からでも同様に設定が可能なので詳しくは下記を参照してください。
https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/how-to/creating-replicas/
てな感じで本日も以上になります🍺
Build Options
で除外したいファイルのパターンリストをEXCLUDED_SOURCE_FILE_NAMES
に設定することで、ビルド時に特定のファイルを除外することができるようになります。
例えば、Mock
という名前がついているファイル群を本番環境で除きたい場合は下記のようになります。
てな感じで本日も以上になります🍺