2020-08-01から1ヶ月間の記事一覧
前回の概要編に続き、今回は実際に ReactorKit を使ったサンプル実装をしていきたいと思います。 yamato8010.hatenablog.com 作るアプリ 今回は Google Books API を使用したアプリを想定して実装していきたいと思います。仕様は下記の通りです。 ※ 基本的に…
以前書いた ReactorKit の概要編のサンプル実装をしている際に、「ViewWillAppear で処理を行いたんだけど、rx で呼び出せないかな〜」と思っていたら、RxCocoa にはクラスの特定の関数をフックするプロパティが用意されていたのを最近知ったのでちょこっと…
今回は StackView で限定された数のリストを繰り返し更新して表示する際に、ちょこっとパフォーマンスが良くなる方法を紹介したいと思います。 UITableViewCell に StackView を持っている時の実装を行っていきます。 @IBOutlet private weak var stackView:…
UICollectionView を使用して、Cell の幅などを動的にしたい時って結構ありますよね。そんな時は、下記のように estimatedItemSize に UICollectionViewFlowLayout.automaticSize を使用する場合が多いかと思います。 flowLayout.estimatedItemSize = UIColl…
pod install でいつものごとくライブラリをインストールすると下記のような警告がでました。 [!] The `Hoge [Debug]` target overrides the `ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES` build setting defined in `Pods/Target Support Files/Pods-Hoge/Pods-H…
iOS で Flux アーキテクチャの恩恵を受け、リアクティブかつ一方向のデータフローをサポートするための Framework で、これによって シンプルで処理を追いやすくかつ、Testableなアプリ設計を構築することができるようになります。 ReactorKit の恩恵 Testab…
前回のコードラボに続き、今回のコードラボでは、Android アプリの主要なコンポーネントの詳細を学び、ボタンを追加してアプリに簡単なインタラクティブ機能を追加していきます。 yamato8010.hatenablog.com 学ぶこと アプリのレイアウトファイルを編集する…
日本語を含む文字列を URL に変換する時に値が nil になることがあると思います。これは、URI において使用できない文字列を URL として変換しようとしている時に発生します。Google などの検索バーでは、このような使用できない文字列を自動でパーセントエ…
DifferenceKit という UITableView 及び UICollectionView の差分更新ライブラリを使用していた時に、CollectionView の追加 Section も含めた changeSet を reload した時に主に iOS11系で(iPhone8で確認)うまく Cell が表示されないという問題に遭遇してい…
前回の概要編に続き今回は既存のプロジェクトに App Clip を作っていきます。また、サーバの対応や App Store Connect での設定などはまた別の記事で書こうかと思います。 yamato8010.hatenablog.com 作業開始 AppClip の開発には Xcode12 以上が必要なの…
App Clip とは? App Clip は iOS14 から利用できる機能で、特定のアプリケーションの一部の機能をミニアプリとしてダウンロード・利用できる仕組みです。これによりユーザはアプリの一部の体験を数秒で使えるようになり、必要ならアプリ全体をダウンロード…
今回は、Cloud Firestore のセキュリティルールでよく書く記法などをまとめていきたいと思います。(他にもでてきたら随時更新していく) 認証系 認証しているユーザのみ読み取りが可能になります。 service cloud.firestore { match /databases/{database}/do…
firebase emulators:start --only firestore コマンドで Firestore エミュレータを起動しようとしたら下記のような Error が $ firebase emulators:start --only firestore i emulators: Starting emulators: firestore i emulators: Shutting down emulator…
今回は以前書いた下記の記事で、アプリのパフォーマンスをさらにあげるための方法を簡単に紹介したいと思います。 yamato8010.hatenablog.com 改善方法 整数に3文字区切りのカンマをつけた文字列を返すプロパティを以前は下記のような形で書きました。 exten…
今後の学習の方針として、Google が提供している Android アプリ作成のチュートリアルである Codelabs を使用して勉強していきたいと思います。このサイトは基本的には英語でのチュートリアルとなっているので、日本語に直したもの + 自分なりのコメント、ま…
今回は FirebaseCloudMessaging の Topic メッセージという機能を使用して CloudFunctions 経由で全てのユーザに対して Push 通知を送信する実装をしていきたいと思います。導入に関しては過去の記事でも書いてるので見てみてください yamato8010.hatenablog…
以前の概要編・ルール編 に続き今回は導入編をやっていきたいと思います。ただ、導入方法は、以前の記事で CocoaPods で導入しますと書いていましたが、Swift Package Manager(以降: SwiftPM) で導入していこうかと思います 以前の記事 yamato8010.hatenabl…
セキュリティルールとは? Cloud Firestore のドキュメント DB に関してかけられる制約のことです。これによってサーバ側の認証・承認などのコードを作成する必要がなくなります。また、認証という役割だけではなく DB に対するデータの制約なんかもこのセキ…
概要 Swift Package Manager(以降: SwiftPM) は、Swift コードの配布を管理するためのツールです。また、Swift のビルドシステムと統合されていることにより、依存関係のダウンロード・コンパイルなどが最適化されバイナリ、リソースがプロジェクトで使いや…
概要 UIFeedbackGenerator は UI にフィードバックを追加するための、フィードバックジェネレーターの抽象クラスで、フィードバックの種類別に下記の3つの具象クラスが存在し、それぞれ iOS10 以降で使用することが可能です。 UIImpactFeedbackGenerator UI…
Swift で横スクロールの CollectionView の作成している時に最後のアイテム後ろに謎の余白があく現象に悩まされていました。 どうやらこの現象は CollectionView のスタイルが .horizontal + FlowLayout の minimumLineSpacing プロパティがデフォルト値(10p…
Swift で数値をカンマで区切って表現したい時などには下記の Extension Property が使用できます。 extension Int { var withCommaString: String { let formatter = NumberFormatter() formatter.numberStyle = .decimal formatter.groupingSeparator = ","…
久しぶりに Cloud Functions のコンソール画面を開いたら下記のような警告が来ていました。どうやら Node.js 8 が非推奨になり2021年の3月中旬には全面的にサポートされなくなるとのことなので、Node.js 10 へ移行します。 Cloud Functions を新しい Node.js…
Bitcode とは? iOS9から導入された技術で LLVM の中間言語のことを指します。以前まではコンパイルが完了しているものを Apple に提出していましたが、Bitcode を用いることで Apple 側で最適化してコンパイルを行えるようになります。 Bitcode を用いたく…
Cartahge Update Error UIWebView の除去作業をする過程で久しぶりに RxSwift のバイナリをアップデートする必要があったので、 いつもの通り carthage update --use-ssh RxSwift --platform ios のような形でアップデートすると こんな Error が出ました。 …
Cloud Firestore とは? 高速でサーバレスなクラウド NoSQL ドキュメントデータベースです。Firebase Realtime Database と同様にスキーマレスかつリアルタイムにデータを監視することができます。 公式ドキュメント https://cloud.google.com/firestore/doc…
なぜ? AppStoreConnect にバイナリをアップロードすると Apple からこんなメールが届きました。 Dear Developer, We identified one or more issues with a recent delivery for your app, "XXXXX" X.X.X (XXXX). Your delivery was successful, but you ma…
起きたこと UILabel の attributedText を nil (リセット) にしてもラベルのスタイルが変わらないという現象が発生していました。 TL;DR 原因 UILabel の attributedText の値が nil(リセット)になった場合、通常(iOS12以前)は Label の attributes もリセッ…
この記事でできるもの Kotlin を Mac でとりあえず動かすための環境構築ができる Kotlin を使ってコンソールに文字を出力できる Kotlin を使った基本的な構文がちょっとわかる 手順 JDK(Java Development Kit)のインストール Kotlin のプログラムを実行する…
この記事でできるようになるもの $ curl -X POST https://your-functions-url/push?device_token=your-device-token -d "message=I love fishing" のようなリクエストをターミナルで叩けば下記のようなプッシュ通知を送信できるようになります。 事前準備 Fi…