2022年10月25日火曜日

Firestoreでのデータの保存について1

前回制作したアプリでは、Realmを用いてデータの保存処理を行なっていました。

しかし、端末内に保存されるため、アプリを削除すると、データも共に消えてしまいます。

そのため、今回はFirebaseのCloud Firestoreというものを使って、データの保存処理について実装します。そこで学習したことを簡単にまとめていきます。

概要

  • モバイル開発、ウェブ、サーバー開発に対応したデータベース
  • 階層データ構造に対応
  • リアルタイムアップデート
  • オフラインサポート(オフラインでもキャッシュから読み書き可能)

開発環境:Xcode (Ver.13.4.1)、SwiftUI

実装について(Firestore自体の設定は省略。基本的に手順通りに進める)

  1. Firebaseにアクセスし、プロジェクトを作成。
  2. iOSアプリを選択し、アプリの登録を行う。
  3. バンドルIDはXcodeにて確認できます。
    (アプリプロジェクトファイル選択 >TARGETSのプロジェクト選択
     >General >Bundle Identifier)
  4. 設定ファイルをダウンロードし、Xcodeにドラックアンドドロップで追加する。
    (Copy items if neededにチェックを入れること)
  5. Firebase SDKの追加
    CocoaPodsやSPM(Swift Package Manager)にてインストールします。
    私は、SPMにて導入しました。導入方法は以下の通りです。
     XcodeのFile>Add Packagesを選択し、右上の検索窓に、
     「https://github.com/firebase/firebase-ios-sdk.git」を入力し、必要なライブラリを導入する。
    ただしここが一番の躓きポイントでした・・・
    様々なサイトや書籍を参考にしたものの、どれを導入すべきか、明記しているものがなく、記載通りではエラーが出るなどして、かなり導入に時間を要しました。
    肝心のところを・・・覚えてません。思い出し次第追記します。
  6. 初期化コードの追加
    SwiftUIの場合の導入については、公式ドキュメントに記載がないので、他の方の記事を参考に記述しました。というか、Firebase公式ドキュメント、何事もざっくりしか書かれておらず、これだけでは初学者には実装困難です。
    AppDelegate.swiftファイルはないため、プロジェクト名.swiftに以下を追記します。
    ・import Firebase
    ・class AppDelegate内のfunc application(~)内に FirebaseApp.configure()
  7. 次にまたウェブに戻り、Cloud Firestore(Firestore Database)を選択し、ルールの設定などを行う。
     allow read, write: if true;  tureにすることで、アクセス可能になります。
  8. ここからは、データの書き込みが行われているかの確認手順ですが、続きは後日・・・?

参考書籍:つくって学ぼiOSアプリ開発

2022年10月4日火曜日

2個目のアプリ作成開始!SwiftUIにトライ!!

2個目のアプリ作成開始!今回はSwiftUIを学びながら進めていこうと思います!
10月2日:アプリ設計
10月3日:ワイヤーフレーム作成、SwiftUI学習、Home画面作成
10月4日:Home画面大まかにVIewとして完成

因みに、私はiOSアカデミア(プログラミングスクール)入校以前(半年くらい前)は、書籍でSwiftUIは軽ーく学んでました!ので、余裕余裕と思いきや・・・久しぶりに扱うと、案外難しい!
そこで、ここが違った!というところを本日はまとめていきます!

主な相違点

  1. 視覚的にViewにコンポーネントを配置する操作(StoryBoard)がない!
  2. 上記に伴いオートレイアウトの制約もない!
  3. コードを記述したら、常にプレビューに反映され、見ながらレイアウトできる!
  4. コンポーネント実装にあたり、コードが違う!
数日の学習だけで上記のような点が挙げられます!
これらに対して、StoryBoardでの実装方法を学ぶ前(スクール入校前)は、
  1. StoryBoardって難しそう・・・
  2. え、設定むっず!!
  3. SwiftUIの方が、最新だし、すぐプレビュー見れるし最高!
  4. 割と記述簡単だー
っていう認識でした!しかしStoryBoardを学んだ後にSwiftUIを復習する中で、以下のように感じました!
  1. ついついコンポーネントを直接配置したくなる!もやもや
  2. オートレイアウトないから、レイアウト難しい・・・
  3. プレビューがあるけど・・・処理が重い・・・(M1 MacBook Air 8G)
  4. 記述方法が難しい・・・
慣れによるものとは思いますが、慣れてしまえば案外StoryBoardの方がやりやすく感じるかもしれません!
因みに、スクール的には、まだ現場ではStoryBoardでの実装が多いとのことで、そちらのカリキュラムでした!

本日は時間ないので、以上!

2022年10月1日土曜日

比較して学ぶRxSwift入門 学習

 今日から書籍「比較して学ぶRxSwift入門」を元に、学習開始!学んだことを記録していきます!気になった方はぜひ書籍を手に取ってみてくださいね!

リアクティブプログラミングとは?

時間と共に変化する値と振る舞いの関係を宣言的に記述するプログラミング手法。
・・・と言われてもわかりませんよね?
こちら書籍でExcelを用いた例があり、それを見れば理解しやすいかと思います!
簡潔にいうと、A+B=Cという式があった際に、AもしくはBの値が変化した場合に、Cも変化するよ!的なプログラミングってことですね。

RxSwiftの導入について

CocoaPodsを用いる場合、以下の通りです。
  1. ターミナルにて、導入したいプロジェクトのディレクトリへ移動
  2. コマンド「pod init」を実行 > Podfileが生成される
  3. 「Podfile」を開き、「pod 'RxSwift'」「pod 'RxCocoa'」を追記し保存(バージョンは指定しない)
  4. コマンド「pod install」を実行

Observable(監視可能な?)とは?

イベントを検知するためのクラス。ストリームとも言われる。
Obsarvable:イベント発生元(.tapなど)
Obsarver:イベント処理(onNextなどの中身)

通知するイベントの種類

  • onNext:デフォルトのイベントを返す。値を格納でき、何度でも呼び出し可能
  • onError:エラーイベント。1度だけ。購読(?)破棄
  • onCompleted:完了イベント。1度だけ。購読(?)破棄

Disposeについて

購読(?)を破棄し、メモリリークを回避するためのもの。

SubjectとRelayとは?

Observableのイベント検知 + イベントの発生ができる

以下の4種類が存在
  • PublishSbject
  • BehaviorSubject
  • PublishRelay
  • BehaviorRelay
Relayに流せるイベントは、onNext のみ。(逆を言えばエラーがないことの保証となる)

Publishはバッファを持たず、Behaviorはバッファを持つ。
(subscribe時に一つ過去のイベントを受け取流ことができ、
 最初にsubscribeするときには宣言時に設定した初期値を受け取る)

 subscribeとは:購読する、約束するという意味。

使い分け

  • Subject:通信処理やDB処理など、エラー発生時に処理を分けたいとき。
  • Relay:UIに値をBindする。(onErrorやonCompletedが発生すると、購読が止まる(その先のタップや入力イベントを拾えなくなる)ため。

bindとは?

RxSwiftでは、単方向のデータバインディング。
subscribeする場合は処理を記述するが、bindすることでよりコードが簡潔になる。

Operatorとは?

Observableに対し、イベントの変換(mapなど)・絞り込み(filterなど)などの加工を施して、新たにObservableを生成する仕組み。


flutterについて、学んだことなど

Swiftについて学んできたため、つい比較してしまいがちです。 SwiftUIと比較して、書いてみました。 似ているようで似ていない flutterには、SwiftUIにおける「View」という概念が、「Widget」と呼ばれるものになる SwiftUIのようにWidgetの中に...