iOSエンジニアのつぶやき

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

【Swift】Error protocol からエラーコードを取得する

本日もSwiftの小ネタです👷‍♀️

結論

SwiftのErrorプロトコルは、codeプロパティを持たないので、下記のようにNSErrorに変換することでcodeを取得するようにします。

extension Error {
    var code: Int {
        return (self as NSError).code
    }
}

てな感じで本日も以上になります🍺

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com

【iOS】APNs証明書の更新

久しぶりにAPNs証明書の更新を行ったので、本日はそのメモでも残しておきます👷‍♀️

ちなみに、今回のプロジェクトではPush通知を送るためにApple Push Notification Service SSL(証明書)を使用していますが、基本的にはApple Push Notification Authentication Key(認証キー)を使用した方が、アプリ毎に証明書を作る手間や証明書を更新する手間が省けるのでオススメです。

それではやっていく

基本的にやることは、APNs証明書作成時とほぼ同じです。

まずは、Apple Push Notification Service SSLの証明書を発行します。DeveloperポータルのCertificates, Identifiers & ProfilesCertificatesを追加します。

f:id:yum_fishing:20210331114339p:plain

次に適用するAppIDを選択します。

f:id:yum_fishing:20210331114609p:plain

最後に使用するCSRを選択して、continueしたら証明書をダウンロードしましょう。

f:id:yum_fishing:20210331114751p:plain

今回は、FirebaseCloudMessagingに証明書をアップロードする必要があるので.cerから.p12ファイルを生成していきます。ダウンロードした証明書をダブルクリックしてキーチャーンアクセスを開きましょう。 キーチェーンを開いたら該当する証明書から下記のように.p12ファイルを書き出すことができます。ちなみにこの時、左の三角印は開いておく必要があるっぽいです。

f:id:yum_fishing:20210331115410p:plain

てな感じで本日も以上になります🍺

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com

【Xcode】バンドルリソースコピー時に.gitディレクトリを除外する

結論

REMOVE_GIT_FROM_RESOURCEStrueに設定することで、バンドルリソースのコピー時に.gitディレクトリが除外されるようになります👷‍♀️

REMOVE_GIT_FROM_RESOURCES=true

てな感じで本日も以上になります🍺

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com

【Swift】TableViewで空のCellを表示しない

本日は初学者向けの内容で、UITableViewで空のCellを表示させないための簡易的な処理を紹介したいと思います👷‍♀️

よくあるこれです。

f:id:yum_fishing:20210329222200j:plain:w350

結論

tableFooterViewプロパティに空のUIView()をセットすれことで、空のCellが表示されないようになります。

tableView.tableFooterView = UIView()

f:id:yum_fishing:20210329222146j:plain:w350

てな感じで本日も以上になります⛺️

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com

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

今回はFSCalendarの小ネタです📱

github.com

結論

FSCalendarallowsMultipleSelectionswipeToChooseGestureの値の両方を有効にすると、スワイプによる複数選択ができるようになります。

calendar.allowsMultipleSelection = true
calendar.swipeToChooseGesture.isEnabled = true

f:id:yum_fishing:20210328142500g:plain:w450

てな感じで本日も以上です🍺

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com

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

本日はAlgoliaのインデックスを日付でソートする方法を簡単に紹介していきたいと思います👷‍♀️

それではやっていく

インデックスをソートするにあたり、まず大前提として知っておくべきことが二点ほどあります。一つ目は、インデックス毎に一つのランキング式しか提供することができないということです。つまり、異なる方式でインデックスをソートしたい場合には、それぞれでインデックスを別途作成する必要があります。そして、そのような状況で作成するインデックスをAlgoliaではReplicasと呼びます。二つ目は、ソートに使用するattributebooleannumericalである必要があるということです。つまり、ISO8601文字列で「2008-09-15T15:53:00」のようなstringattributeはソートに使用できないので、Replicasを作成するタイミングで、UNIX timestampなどに変換する必要があります。ちなみに、今回はFirestoreから取得したTimestampを使用していて、すでにnumericalで値が保持されているので、変換については特に触れません。

ということでまずは日付でソートするためのReplicasを作成していきます。ダッシュボードから元となるインデックスのReplicasセクションで、Replicasの名前を入力します。ちなみにReplicasの名前のプレフィックスまたはサフィックスにはdescascなどをつけることが推奨されています。

f:id:yum_fishing:20210327163550p:plain

名前を入力するとダイアログが表示されるので、変更を保存します。これでReplicasの作成は完了です。

f:id:yum_fishing:20210327164154p:plain

次に作成した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を入力後、降順・昇順も選択します。これで設定を保存したら、準備は完了です。

f:id:yum_fishing:20210327165004p:plain

あとは日付でソートしたいタイミングで、作成した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/

てな感じで本日も以上になります🍺

参考

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com

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

結論

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

f:id:yum_fishing:20210326150520p:plain

てな感じで本日も以上になります🍺

参考

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com