- 1. ローカルプッシュ通知の備忘録
- 2. 【SwiftUI】文字の色をprimaryとsecondaryで指定するように、文字の大きさもdefaultとsecondaryで指定する(iOS17)
- 3. SwiftUI iOS version別 Alertで困ったときのTips集
- 4. TCA 1.7のリリース内容をざっくり理解する
- 5. [SwiftUI] 複数のアラートを管理する方法
- 6. 忙しい人のための5分でSwiftDataの雰囲気をキャッチアップするメモ
- 7. Swift Packageの作り方
- 8. Flutterのurl_lanucherとuni_linksでOAuth
- 9. FlutterアプリをNotionと連携する
- 10. 【Xcode】タイプミス・スペルミスを検出する
- 11. Cinematic Frameworkを使ってシネマティックモードの動画のDepthを取得する
- 12. 【Xcode】改行の目安を表示する
- 13. 【SwiftUI】 Xcode15での「sizeThatFits」について
- 14. 【SwiftUI】コピー&ペーストを制御する(macOS)
- 15. 【Flutter】Firebase Authenticationを使ってログイン/ユーザー登録画面を作成する(その6)
- 16. 新卒1年目のしくじりエンジニア。俺にみたいにはなるな!! 〜アンチパターン実装編〜
- 17. 【Swift】reduce(into:)が便利という話
- 18. 【SwiftUI】TexのMarkdownのリンクを制御する
- 19. 【SwiftUI】ScrollViewのインジゲーターを意図的に表示させる(iOS17)
- 20. 【Swift】実は2つ以上使える!トレイリングクロージャ
ローカルプッシュ通知の備忘録
# はじめに
業務中にビジネスチームから
「ローカルプッシュ通知だとアプリがキルされていてもプッシュ通知って届くんだっけ?」
「ローカルプッシュ通知を使いたいのだけど、リモートプッシュ通知と比べて制約やデメリットはあるか?」
「ローカルプッシュ通知を使ってもこれって実現できる?」みたいな雑な質問を受けることはないでしょうか?
これらの質問に対して、毎回調査したり時には検証アプリを作ったりするのですが、
毎回1から調べるとしんどいので、これは主に自分向けのメモ・ナレッジになります。# 調査・検証メモ
### ローカルプッシュ通知だとアプリがキルされていてもプッシュ通知って届くんだっけ?
結論:「届く」
iOS: iOS16以上あたりなら特に労せずいけそう。サンプルコードに忠実に書けばいける。
この辺りのパラメータの設定は必要。
“`
presentAlert: true,
presentBadge: true,
presentBanner: true,
presentSound: true,
“`android: WorkManagerなどのコンポーネントを使う
【SwiftUI】文字の色をprimaryとsecondaryで指定するように、文字の大きさもdefaultとsecondaryで指定する(iOS17)
# はじめに
タイトルは黒文字で大きめに、説明文は灰色文字で小さめになっているUIをよく見かけます。
これをフォントサイズを指定せずに実装することができるようになりました。今回はサンプルアプリを作成するために、ChatGPTを使って、飲料水の新商品名とキャッチフレーズを考えてもらいました。
# サンプルアプリ
![simulator_screenshot_AA5A1380-D835-4CB7-A758-1C816A5D01AF.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/4fe188db-2b19-6e0d-307c-c0d3df2392b3.png)# 実装
“`swift
import SwiftUIstruct NewProduct {
let name: String
let catchphrase: String
}struct ContentView: View {
@State private var newProducts:
SwiftUI iOS version別 Alertで困ったときのTips集
## はじめに
SwiftUIで、アラートの表示処理を行っているにも関わらず、アラートが実際には表示されないといった不具合が発生していました。
1つのViewで複数の種類のアラートを実装する必要があり、SwiftUIのアラートについて調べる機会があったのでここで共有したいと思います。
なお、今回はプロジェクトのアーキテクチャにそって、MVVMでコードは書いています## SwiftUIの仕様について
まずは、SwiftUIのAlertの仕様について簡単に説明します
**結論、alertは各Viewに対して1つしか保持することができません**具体的には、1つのViewに複数のAlertを定義しても以前書いたものは上書きされ、最後に書いたAlertのみ適用されるため、1つしか表示することができないのです。
:::note warn
複数Alertを実装したのに、1つしか表示されない例
:::
ちょうどいい記事を見つけたので、下記の記事も読んでみてください!https://qiita.com/kyohei-jambo/items/b64a0f0b07fc5ef46adb#
TCA 1.7のリリース内容をざっくり理解する
# 目的
TCA 1.7 がリリースされ、Migration Guideも発表されましたが、`@ObservationState`に引っ張られて & そのトピックの多さに正直狼狽えました。
ただ、内容を細かく紐解いていくと自分なりに理解が深まってきたので、Migration Guide に沿って、必要に応じて少し順番を変えつつまとめていきます。
https://pointfreeco.github.io/swift-composable-architecture/main/documentation/composablearchitecture/migratingto1.7# `@ObservableState`
新しく導入された`@ObservableState`を利用することで、stateの変更検知に利用していた`ViewStore`を使う必要がなくなりました。
## SwiftUI(iOS17以降を対象とするアプリ)の場合
“`swift
@Reducer
struct Feature {
@ObservableState
struct State
[SwiftUI] 複数のアラートを管理する方法
# はじめに
SwiftUIを使用してアプリを開発していると、1つのViewで複数のアラートを表示するとデータが上書きされ、1つのアラートしか表示されなくなります。この問題を対処する方法はいくつかあるみたいですが、今回はアラートの種類をenumで管理する方法を紹介します。# 目次
1. [失敗例](#失敗例)
1. [成功例](#成功例)
1. [さいごに](#さいごに)
1. [参考文献](#reference)
# 失敗例
この失敗例では、@Stateを使用してアラートの表示状態を管理していますが、複数のアラートが同時に表示されるとデータが上書きされ、期待した動作になりません。
“`swift
import SwiftUIstruct SampleView: View {
// エラーアラートの表示状態を監視
@State private var showErrorAlert = false
// 成功アラートの表示状態を監視
@State private var showSuccessAlert =
忙しい人のための5分でSwiftDataの雰囲気をキャッチアップするメモ
# 本記事について
本記事では、SwiftDataをざっくりキャッチアップしたメモです。
SwiftDataは、CoreDataのようにデータを永続化するフレームワークです。今回はなんとなくSwiftDataの雰囲気を掴めることをゴールとします。
新規でプロジェクトと作るとSwiftDataの実装がすでに組み込まれています。
デフォルトで用意されている実装を使って解説します。# 環境
– Xcode: 15.1
– iOS: 17.2
– MacBool Air M2 / Sonoma 14.2.1# 事前準備
下記3点を行います。
– Xcodeで新規プロジェクトを作る。
– 新規プロジェクト設定画面でStorageをSwiftDataに設定する。
– OSの条件分岐は説明しないので削除する。# 解説
## モデルの設定
アプリのエントリポイントです。
データベース操作を行うための環境の準備を行います。“`SampleSwiftDataApp.swift
@main
struct SampleSwiftDataApp: App {
var
Swift Packageの作り方
# 手順
##### GitHub でリポジトリを作成
![スクリーンショット 2024-01-30 3.40.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/3832c9cd-68c0-5873-59e6-f5b489737ba2.png)
##### ローカルでディレクトリを作成“`shell
mkdir avplayerview
“`##### ディレクトリに移動、パッケージを初期化
“`shell
cd avplayerview
swift package init –type library
“`##### Sources にコードを追加
**パッケージの外から使いたい class や func は public にする必要がある**
“`swift
public class AVPlayerView: UIView {
public func play() {
…
“`##### Package.swift にミニマム iOS
Flutterのurl_lanucherとuni_linksでOAuth
[この記事](https://qiita.com/meique/items/c1933247803d92829020)の補足記事になります。
認証部分は読んだ前提で話を進めるので、読んでください!
webviewを使ったGoogleのOAuthがセキュリティ的にちょっとアレなため、url_launcherとuni_linksを使用した正攻法(?)で実装してみます。
サンプルのリポジトリは同じです。
https://github.com/Taichiro-S/notion_sample## 使用するFlutterパッケージ
– [url_launcher](https://pub.dev/packages/url_launcher) : 端末のデフォルトブラウザでWebページを開く
– [uni_links](https://pub.dev/packages/uni_links) : deeplinkするやつ## 実装
修正箇所は以下の2点です。
1. **「連携」ボタンクリック時にnotionの認証ページをurl_launcherで開くようにする**
2. **un
FlutterアプリをNotionと連携する
[Notion](https://www.notion.so/ja-jp)は史上最高の万能アプリなわけですが(異論は認める)、Flutterアプリ連携しちゃお〜ってやってたら案外苦労しました。というお話。
サンプルのリポジトリ公開しています!
https://github.com/Taichiro-S/notion_sample## 前提
– notionアカウント作成済み
– flutterアプリ作成済み(fvmを使っているなら[これ](https://qiita.com/kilalabu/items/7ed07a99024e1687a8f4)が早いです)
– OAuthの仕組みなんとなくわかる([この記事](https://qiita.com/TakahikoKawasaki/items/e37caf50776e00e733be)がわかりやすいかも)## 実装する機能
FlutterアプリからNotionアカウントを連携し、Databaseにデータを書き込む
### 動作イメージ
※動画はiOS simulatorですが、androidでも同じように動作します。
【Xcode】タイプミス・スペルミスを検出する
# はじめに
僕めちゃくちゃ英語できないのでめっちゃスペルミスするんです。
僕以外にもいますよね?そんなあなたに朗報です。
なんと!Xcodeにはスペルチェック機能あるらしいんです!
知りませんでした。設定方法を記録しておきます。
# 今回検出したいスペルミス
本当は`digital`ですが、スペルミスをして`degital`になっています。![スクリーンショット 2024-01-29 20.53.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/768cbc2a-e045-a3ce-1e56-a599c35e82f5.png)
これを検出したいです。
# やりかた
① 「Edit」を押します。
② 「Format」を選択します。
③ 「Spelling and Grammar」を選択します。
④ 「Check Spelling While Typing」にチェックを入れます。
![スクリーンショット 2024-01-29 20.35.59.png](https:/
Cinematic Frameworkを使ってシネマティックモードの動画のDepthを取得する
# Cinematic Frameworkを使ってシネマティックモードの動画のDepthを取得する
iOS17からCinematic Frameworkが追加されました
Cinematic Frameworkを利用することで、シネマティックモードで撮影した動画を簡単に操作できるようになりましたhttps://developer.apple.com/documentation/cinematic
シンプルに映像とdepth、フォーカスの取得を試してみました
シネマティックモードの動画のdepthやフォーカス取るのできた!
指の感じも分かるくらい思ってたよりdepth精度よく取れてそう pic.twitter.com/TJjxFb41E4— ふじき (@fzkqi) 【Xcode】改行の目安を表示する
# はじめに
普段大きいモニターを使って開発をしているので1行の文字が200行とかになっても1行で表示されて見やすいのですが、モニターの接続を外してmacbook単体で開発してると折り返し表示されて見にくかったりします。そこで、「1行〇〇文字になったら、改行しよう!」と決めても現在が何文字なのかパッと見でわかりません。
ある設定をするだけで、改行目安のところに線が表示されて一目でわかるようになります。
![スクリーンショット 2024-01-28 19.57.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/781ce963-342e-d432-58c2-233d93fb59a2.png)
# やりかた
① 「Xcode」を押します。
② 「Settings…」を押します。
![スクリーンショット 2024-01-28 19.59.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174【SwiftUI】 Xcode15での「sizeThatFits」について
# Xcode15での「sizeThatFits」について
Xcode14までは普通に動作していたはずの「sizeThatFits」が
Xcode15からは急に適用されななくなったみたいで色々調べましたところ、
***`#Preview` Macro***を利用している際には、「sizeThatFits」が使えないようでした。その代わりに`trait`を付けて、`.sizeThatFitsLayout`を書けば解決できるということで、実際に試してみることにしました。
## sizeThatFits/sizeThatFitsLayoutについて
そもそもsizeThatFitsとsizeThatFitsLayoutというのは一体何でしょう?
基本的にsizeThatFitsというのは、ContainerをPreviewに合わせて、Viewのみのpreviewにするためのメソッドです。
レファランスから調べたところ、sizeThatFitsとsizeThatFitsLayoutは全く同じ機能であり、
sizeThatFitsLayoutの方がiOS17.0のリリースに当たって導入
【SwiftUI】コピー&ペーストを制御する(macOS)
# はじめに
copyableの公式ドキュメントにあるサンプルコードを元にコピー&ペーストを制御してみます。https://developer.apple.com/documentation/swiftui/view/copyable(_:)
今回作成するサンプルアプリはコマンドのコピー(⌘ + c)とペースト(⌘ + v)でのみ反応します。
# サンプルアプリ
![画面収録-2024-01-27-20.43.52.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/60a14662-93f7-6fa0-4535-d8bb90d32f70.gif)# 実装
“`swift
import SwiftUIstruct ContentView: View {
@State private var strings = [“Alpha”, “Beta”, “Gamma”]
@State private var selection: Set= []
【Flutter】Firebase Authenticationを使ってログイン/ユーザー登録画面を作成する(その6)
# はじめに
【Flutter】Firebase Authenticationを使ってログイン/ユーザー登録画面を作成する(その5)の続きです。
前回はパスワードリセット画面を実装しました。
今回は入力フィールドのデコレーションとバリデーションチェックの実装を行なっていきます。
引き続きVSCodeのMac版を利用していますので、AndroidStudio利用の方は適宜読み替えて行ってみてください。# 更新履歴
2024.1.27 初回投稿## fontawesomeアイコンパッケージのインストール
1. ログイン,パスワードフィールドがフィールドだけでは少しわかりづらいので、アイコンをつけようと思います。今回はfontawesomeアイコンパッケージを入れます。
“`
% flutter pub add font_awesome_flutter
“`
1. lib>main.dartを開いて、fontawesomeパッケージのimportを追記します
“`dart
import ‘package:firebase_auth/fir
新卒1年目のしくじりエンジニア。俺にみたいにはなるな!! 〜アンチパターン実装編〜
# 本記事について
入社してから1年未満の私は、すでに多くのしくじりを行いました。
この記事では、これまでのしくじりを振り返り、今後の改善のために記録として残そうと思います。主に、開発経験が浅い方々にとって参考になる内容になれば幸いです。
:::note warn
本記事の内容は組織やチームによって異なります。
ここで述べていることは個人的な見解に過ぎません。
:::# しくじりエピソード
今回紹介するしくじりエピソードは以下の通りです。
– 名前の意味が広すぎ
– 気づいたらマジックナンバー
– スコープの広い変数を定義しすぎ
– YAGANI原則を無視他にもありますが、しくじり影響度の高かった4つを取り上げました。
## しくじり ① : 名前の意味が広すぎ
### エピソード
クラスや構造体、列挙型、メソッド、変数など、どの局面において意味の広すぎる曖昧な命名になっていました。
“`swift
class UserManager { // Manager=管理だが、管理の意味自体が広すぎる。
func updateUser() {}
}
`
【Swift】reduce(into:)が便利という話
## 概要
reduce(into:)が便利だったので、備忘録として記録しておきます。:::note warn
注意
この記事は新卒エンジニアが執筆しています。
そのため内容に間違いや不備がある場合があります。
もし間違いを発見しましたら、どんどん指摘していただけると幸いです。
:::## reduce関数とは
reduce関数とは、配列やコレクションの要素を結合して単一の値を生成するための高度なメソッドです。
よくInt型の配列の合計値を求める際などに使われます。
“` Swift
func reduce(
_ initialResult: Result,
_ nextPartialResult: (Result, Self.Element) throws -> Result
) rethrows -> Result
“`“` Swift
let array: [Int] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
let sum = array.reduce(0) { sum, value in sum + valu
【SwiftUI】TexのMarkdownのリンクを制御する
# はじめに
SwiftUIのTextでマークダウンが使えるのを知っていますか?
マークダウンでリンクが使えるのですが、このリンクをタップした時の処理を自前で実装できるんです。これができると何ができるのかというと、
同じマークダウン内に移動する目次なんかを簡単に実装することができるようになります。# サンプルアプリ
目次を選択すると、その項目へ移動します。
![Simulator Screen Recording – iPhone 15 – 2024-01-26 at 21.27.27.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/2ac2f47c-c699-ea57-25a6-160d8347e395.gif)# 実装
“`swift
import SwiftUIstruct ContentView: View {
var body: some View {
ScrollView {
ScrollViewReader {
【SwiftUI】ScrollViewのインジゲーターを意図的に表示させる(iOS17)
# はじめに
iOS17で`scrollIndicatorsFlash`というモディファイアが追加されました。
これはScrollViewのインジゲーターを意図的に表示させることができる機能になります。# サンプルアプリ
ボタンをタップするとScrollViewのインジゲーターが表示されることがわかります。![Simulator Screen Recording – iPhone 15 – 2024-01-25 at 21.06.26.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/ff442f1c-c77e-5e41-1b24-0b8135cd04c7.gif)
# 実装
“`diff_swift
import SwiftUIstruct ContentView: View {
@State private var trigger = truevar body: some View {
ScrollView(showsIndic
【Swift】実は2つ以上使える!トレイリングクロージャ
# 目次
[1.実は2つ以上使える!トレイリングクロージャ](#1-実は2つ以上使える!トレイリングクロージャ)
[2.実例](#2-実例)
[3.おわりに](#3-おわりに)# 1. 実は2つ以上使える!トレイリングクロージャ
トレイリングクロージャって便利ですよね。
関数の引数にクロージャが最後にあった時に呼び出す側で見やすくしてくれる記法です。
でも実は、、、引数に2つ以上クロージャがある時にも使用できるんです!!# 2. 実例
関数定義側
~~~swift:function.swift
func example1(
value: Int,
closure1: (Int) -> String,
closure2: (String) -> Bool,
closure3: (Bool) -> Int
) -> Int {
let value1 = closure1(value)
let value2 = closure2(value1)
let value3 = closure3(value2)
return v