- 1. 【Swift】【Combine】mergeとCombineLatestの違いを説明してみる
- 2. 【SwiftUI】iOS17でwithAnimationが強化された
- 3. [学びメモ] async letを用いた並列処理でタスク結果の取得タイミングを変えたい時の実装方法
- 4. ReactNativeでTabを用いて画面遷移
- 5. ReactNativeで画面遷移する
- 6. 【Xcode】関数の引数などをコマンドで一括改行する
- 7. エッジジャスチャーで地図をぬるぬるズーム
- 8. freeeの2weeksインターンに行ってきたよって話
- 9. 【SwiftUI】棒グラフを選択できるようにする
- 10. ReactNativeの環境構築(公式チュートリアル)
- 11. swift uiで検索プルダウンを作成
- 12. swiftにopencvを入れて画像処理を行う
- 13. 【Swift】LocalizedErrorを持つ列挙型を比較したい
- 14. 【Flutter】Firebase Authenticationを使ってログイン/ユーザー登録画面を作成する(その5)
- 15. 【Flutter】Firebase Authenticationを使ってログイン/ユーザー登録画面を作成する(その4)
- 16. 【Flutter】Firebase Authenticationを使ってログイン/ユーザー登録画面を作成する(その3)
- 17. iOSシュミレーターが起動しない
- 18. 【Flutter】Firebase Authenticationを使ってログイン/ユーザー登録画面を作成する(その2)
- 19. 【Flutter】Firebase Authenticationを使ってログイン/ユーザー登録画面を作成する(その1)
- 20. 自分へのご褒美管理ツール「ご褒美ToDo」をリリースしました!
【Swift】【Combine】mergeとCombineLatestの違いを説明してみる
# 目次
[1.mergeとCombineLatest](#1-SwiftCombineとは)
[2.marge](#2-sink)
[3.CombineLatest](#3-store)
[4.おわりに](#5-おわりに)# 1. mergeとCombineLatest
RxSwift+MVVM → Combine+TCAにリファクタしている過程で以下の疑問点が湧いてきました。
`marge`と`CombineLatest`どちらもストリームを束ねる点では共通です。
では、何が違うのか解説していきます。# 2. merge
`merge`は2つのストリームを束ねて、どちらかが流れてきたら実行しまっせという感じです。
:::note info
mergはOR条件と思っておけば良いでしょう!
:::~~~swift: merge.swift
import RxRelay
class ExampleViewModel {
// input
let didTappedIndexButton = PublishRelay()
let didInp
【SwiftUI】iOS17でwithAnimationが強化された
# はじめに
`withAnimation`にパラメータが2つ増えました。
まず、1つ目はアニメーションの終了が検知できるように`completion`が追加されました。
2つ目はアニメーションの終了をどことするかを指定する`completionCriteria`です。解説していきます。
# アニメーションの終了が検知できるようになった
“`swift
import SwiftUIstruct ContentView: View {
@State private var degrees: Double = 0.0@State private var status = “”
var body: some View {
VStack(spacing: 60) {
Text(status)Rectangle()
.frame(width: 200, height: 200)
.ro
[学びメモ] async letを用いた並列処理でタスク結果の取得タイミングを変えたい時の実装方法
# 本記事について
Swift Concurrencyを用いた並列処理において、曖昧な理解で実装していたのでメモとして残します。
`async let`を用いて並列処理を行う際、実装方法によってタスク結果の取得タイミングを変えることが可能です。
# 具体例
以下、2パターンの挙動の実現が可能になります。
– パターン1:両方のタスクが完了するまで待機してから、両方の結果を同時に取得
– パターン2:各タスクの結果が利用可能になるとすぐにそれを取得し、次の結果の取得を待つもう少しイメージしやすいように、イメージ図とコードを示します。
## パターン1
“`Pattern1.swift
async let response1 = fetch1()
async let response2 = fetch2()
ReactNativeでTabを用いて画面遷移
## はじめに
前回は、Push遷移での画面遷移を学習し、記事を書きました。参考までに
https://qiita.com/muranakar/items/34a124556dc7ad2f8e89
今回は画面遷移の学習の続きで、Tabでの画面遷移実装を行っていく。
こちらのライブラリーを用いて実装していきます。
https://reactnavigation.org/docs/bottom-tab-navigator/
## 内容
### ライブラリーをインストール
“`
npm install @react-navigation/bottom-tabs
“`
以下が出力される。
“`
added 1 package, and audited 1191 packages in 11s65 packages are looking for funding
run `npm fund` for details5 moderate severity vulnerabilities
To address all issues (including break
ReactNativeで画面遷移する
## はじめに
ReactNativeを用いて画面遷移の実装を行っていく。環境構築に関しては以下のリンクを参照ください。
https://qiita.com/muranakar/items/8d0cb2044fe836fe758e
## 画面遷移に関して
### ライブラリーのインストール
画面遷移を実現するために、下記のライブラリーをインストールします。https://reactnavigation.org/docs/stack-navigator/
https://reactnavigation.org/docs/native-stack-navigator/
以下を実行
“`
npm install @react-navigation/native @react-navigation/stack
“`出力結果
“`added 29 packages, and audited 1625 packages in 16s
123 packages are looking for funding
run `npm fund` for details
【Xcode】関数の引数などをコマンドで一括改行する
# はじめに
引数の多い関数を見やすいように改行することはよくありますよね。
でも、1つ1つ選択して改行するのめんどくさい、、、って思います。![画面収録-2024-01-20-22.34.27.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/61a0fdff-8db6-4190-c5db-d9699b812aea.gif)
それXcodeのショートカットコマンドで解決できるんです!
# やりかた
対象箇所を選択して、
`control` + `M`
だけ
# おわり
printなど改行しなくていい箇所も改行されるので、選択箇所は考えたほうがいいですね![画面収録-2024-01-20-22.37.29.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/26b1b5ac-3ffa-c911-e9ab-486d7c765d7f.gif)
エッジジャスチャーで地図をぬるぬるズーム
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77444/dd5a4175-953b-09e1-f908-0c35b7dc7f77.png)
画面端からのスワイプジェスチャーでMapKitの地図表示をズームさせるサンプルプログラムです。
# つくったもの
画面左右の端からのスワイプ量に応じて地図がぬるぬるっとズームイン・ズームアウトします。現在地を表示するカスタムピンも実装してみました。![IMG_8690.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77444/92d4b6dd-6067-19b2-7853-6fdac4418d43.png)
## 環境
– Xcode 15.2
– iOS 17.2.1# 実装ポイント
## MapKitのMKMapViewのタップジャスチャーをインターセプト
MKMapViewのタップイベントをトリガーにズームするとMapKitの挙動と干渉してしま
freeeの2weeksインターンに行ってきたよって話
# freeeの2weeksインターンに参加した振り返り
どうもGadgeloggerだ!E社に引き続いてFreeeでのインターン結果報告をしようと思う。
ちなみに自分はFree会計のiOSアプリチームに配属されて、Swift(UiKitとSwiftUI)を用いた開発に携わったわ。## どんなインターン?(Wantedlyから抜粋)
25新卒エンジニア向けの2weekサマーインターンを開催します!2019年に現東証グロースに上場し、時価総額もマザーズトップ3に入る急成長ベンチャーの開発現場を体験してみませんか?
モダンな開発環境、スピード感、ユーザーの課題解決の難しさなどを味わうことが出来るインターンです。◆内容◆
夏インターンの成果によって本選考の特別選考ルートもご用意をしております。
・freeeの実際のプロダクト開発の現場に入っていただき、開発実務に携わっていただきます。
・インターン向けのお題ではなく、freeeで実際に未解決の難題に取り組んでいただきます。
・各開発チームから選りすぐりの難題をご用意してお待ちしています。
・freeeの第一線で開発にあたるエンジニ
【SwiftUI】棒グラフを選択できるようにする
# はじめに
前回、円グラフを選択できるようにしましたhttps://qiita.com/SNQ-2001/items/6608c9bd77d49e03efe0
今回は棒グラフを選択できるようにしてみます。
# サンプルアプリ
![Simulator Screen Recording – iPhone 15 – 2024-01-19 at 20.51.46.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/45f9e59b-92e0-f7e4-d616-20581f51cae6.gif)# 実装
“`diff_swift
import SwiftUI
import Chartsstruct Temperature {
let day: Int
let max: Double
let min: Double
}struct ContentView: View {
@State private var temperatures: [Tempe
ReactNativeの環境構築(公式チュートリアル)
## はじめに
iOSアプリの個人開発を主にSwiftで行ってきた私は、クロスプラットフォーム開発の経験がありませんでした。しかし、今後業務で利用することになったため、公式チュートリアルに従い、React Nativeを使用して環境構築を行い、簡単なカウンターアプリの開発を試みることにしました。まずは、環境構築について記載します。https://reactnative.dev/
# ReactNative とは
まず最初にReactNativeとはなにかについて引用を交えて説明する。### React Nativeの特徴
React Nativeは、ネイティブ開発の良い部分とReact(ユーザーインターフェイスを構築するためのJavaScriptライブラリ)の良い部分を組み合わせたツールです。React Nativeを使用すると、既存のAndroidおよびiOSプロジェクトに部分的に導入することも、ゼロから全く新しいアプリを作成することもできます。### JavaScriptによるネイティブ開発
JavaScriptで記述され、ネイティブコードでレンダリングされる点にあり
swift uiで検索プルダウンを作成
イメージはこんな感じ
![スクリーンショット 2024-01-19 15.56.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494487/bb8182c4-1791-df48-c1fc-63a1bd5f02a1.png)import SwiftUI
// 新しいデータ型
struct YourNewDataType: Identifiable {
var id: UUID
var name: String
// 他のプロパティや初期化処理を必要に応じて追加
}// サンプルデータ
let yourNewDataArray: [YourNewDataType] = [
YourNewDataType(id: UUID(), name: “Item 1”),
YourNewDataType(id: UUID(), name: “Item 2”),
swiftにopencvを入れて画像処理を行う
# やりたいこと
xcodeでswiftプロジェクトを作成し、swift内にopenCVを入れる事で画像処理を楽にする。
iPhoneカメラで撮影した画像を2値化したり、エッジ検出する
※いつものように個人macでの実装なので業務関係ない
## open cvのダウンロード
以前ダウンロードまでは実施したので、この記事では実装をしていく。
インストールしてない人は、以下記事参考https://qiita.com/web05891254/items/d4f331a360f759e5a459
## Object-cからopen cvを呼び出す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645607/838f1110-89c4-682c-f922-f75595e3bda0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645607/748adb14-b397-6a94
【Swift】LocalizedErrorを持つ列挙型を比較したい
# はじめに
以下のような列挙型を定義することはよくあると思います。
“`swift
enum SampleResult {
case success
case failure(LocalizedError)
}
“`これを`Equatable`に準拠させようとすると以下のような関数を実装しなければいけません。
“`swift
enum SampleResult: Equatable {
case success
case failure(LocalizedError)static func == (lhs: SampleResult, rhs: SampleResult) -> Bool {
}
}
“`# よくある解決策
`localizedDescription`を比較しています。
しかし、別のエラーでも`localizedDescription`は一緒にしていることがあると思います。
これでは正確な比較になりません。
“`swift
enum SampleResult: Equatable {
【Flutter】Firebase Authenticationを使ってログイン/ユーザー登録画面を作成する(その5)
# はじめに
【Flutter】Firebase Authenticationを使ってログイン/ユーザー登録画面を作成する(その4)の続きです。
前回はログインとログアウトを実装しました。
今回はパスワードリセット画面を作成し、パスワードリセットのためのメールを送信する自走を行います。
引き続きVSCodeのMac版を利用していますので、AndroidStudio利用の方は適宜読み替えて行ってみてください。# 更新履歴
2024.1.18 初回投稿## Firebaseプロジェクト側でパスワードリセットメールのテンプレートを変更する
1. Firebaseのプロジェクトショートカットから「Authentication」をクリックして「Templates」を選択します。![スクリーンショット 2024-01-18 15.56.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9961/63d1c21a-17f1-0b1b-2c6a-1ccd89ac9652.png)
2. テンプレート画面左下の
【Flutter】Firebase Authenticationを使ってログイン/ユーザー登録画面を作成する(その4)
# はじめに
【Flutter】Firebase Authenticationを使ってログイン/ユーザー登録画面を作成する(その3)の続きです。
前回はメールアドレスでのユーザー登録の実装を行いました。
今回はログイン画面を作成し、ログインできるように実装します。
引き続きVSCodeのMac版を利用していますので、AndroidStudio利用の方は適宜読み替えて行ってみてください。# 更新履歴
2024.1.18 初回投稿# ログインボタンを追加してログイン処理を実装
– 前回のコードにログインボタンとログアウトボタンを追加します。
“`dart
SizedBox(
width: double.infinity,
// ログインボタン
child: ElevatedButton(
child: const Text(‘ログイン’),
onPressed: () async {
try {
// メール/パスワー
【Flutter】Firebase Authenticationを使ってログイン/ユーザー登録画面を作成する(その3)
# はじめに
【Flutter】Firebase Authenticationを使ってログイン/ユーザー登録画面を作成する(その2)の続きです。
前回はただ、Firebaseプロジェクト連携をしただけですが、これからAuthenticationの実装に入ります。。
引き続きVSCodeのMac版を利用していますので、AndroidStudio利用の方は適宜読み替えて行ってみてください。# 更新履歴
2024.1.18 初回投稿# FirebaseAuthの実装
1. FirebaseAuthパッケージをインストールします。
“`
% flutter pub add firebase_auth
“`
1. lib>main.dartを開いて、各パッケージのimportを追記します
“`dart
import ‘package:firebase_auth/firebase_auth.dart’;
import ‘package:firebase_core/firebase_core.dart’;
import ‘fir
iOSシュミレーターが起動しない
Flutterの開発をしていて急にiOSシュミレーターが「Unable to boot the Simulator. 」と表示を出して起動しなくなってしまいました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/934471/4c631400-677f-08fa-ea01-ef129a396f58.png)
こんな表示が出て、シュミレーターが起動できない:sob:
色々と調べた結果、以下のキャッシュフォルダの中身を削除すると一発で起動したので備忘録として残しておきます。
“`
rm -fr /Users/[username]/Library/Developer/CoreSimulator/Caches/dyld/23C71/*
“`
※ 23C71というフォルダは環境によって違うかもしれません。
※ [username]は適時ご自分の環境に置き換えてください。
【Flutter】Firebase Authenticationを使ってログイン/ユーザー登録画面を作成する(その2)
# はじめに
【Flutter】Firebase Authenticationを使ってログイン/ユーザー登録画面を作成する(その1)の続きです。
前回はただ、TextFieldを実装しただけですが、これからFirebaseの連携を始めていきます。
引き続きVSCodeのMac版を利用していますので、AndroidStudio利用の方は適宜読み替えて行ってみてください。
いつから変わったのかわからないのですが、久しぶりにFirebaseAuthを実装しようと今まで通りにやってみたところ、iOSは上手くったのですがなぜかAndroidでログアウトするとクラッシュするという現象がでてしまったので、いろいろ調べたらFlutterFireで自動化できるらしいので、これを機にやってみようと考えた次第です。## 更新履歴
2024.1.18 新規投稿## FlutterプロジェクトとFirebaseプロジェクトの連携設定
1. Firebaseプロジェクトでプロダクトのカテゴリ>構築>Authenticationを選択します。
![firebaseAuth設定0.png](ht
【Flutter】Firebase Authenticationを使ってログイン/ユーザー登録画面を作成する(その1)
# はじめに
FlutterでFirebase Authentication使ってユーザー登録・ログイン画面を作る手順などはよく見かけるのですが、バリデーションチェックや、ユーザー登録後の処理、パスワード変更処理などやらねばならないことはいろいろあります。また、FacebookログインやAppleログインについても備忘録かねてまとめてみようかと思います。
まず最初はユーザー登録画面を作成してみます。
VSCodeのMac版を利用していますので、AndroidStudio利用の方は適宜読み替えて行ってみてください。# 更新履歴
2024.1.18 初回投稿# 環境
[✓] Flutter (Channel stable, 3.16.4, on macOS 13.5.2 22G91 darwin-arm64, locale ja-JP)
[✓] Android toolchain – develop for Android devices (Android SDK version 34.0.0)
[✓] Xcode – develop for iOS and macOS (X
自分へのご褒美管理ツール「ご褒美ToDo」をリリースしました!
こんにちは!趣味で個人開発をしているりょうやです。
自分へのご褒美を管理するアプリをリリースしました。https://apps.apple.com/us/app/%E3%81%94%E8%A4%92%E7%BE%8Etodo/id6474063404
# アプリ概要
このアプリは自分へのご褒美の予定を立てることができるアプリです。
例えば、「今週末、好きなアーティストのライブを見に行こう」だったり「ゴールデンウィークは海外に行きたい!」など自分が好きなことの予定を立てると思います。そういう予定をアプリで管理できたら
・自分へのご褒美が見えるので、日々のモチベーションが上がる
・ご褒美の予定を立てるのが楽しくなる
・忘れることが無くなるなどなどメリットが多いと思い開発しました。
自分も仕事で疲れた時などは、週末の遊びに行く予定などを思い出して乗り切る時もあります笑
日々の生活を豊かにするためにも必要なアプリだと思っています。# アプリの機能
## ご褒美一覧機能予定を立てたご褒美を一覧画面で確認することができます。
日付、ご褒美のタイトル、詳細など予定を一目で確認するこ