- 1. 【SwiftUI】TextEditorの見た目をTextFieldっぽくする
- 2. iOSにおける非同期型イベント駆動
- 3. Compose Multiplatformで利用できるようになったNavigationを使ってみた
- 4. 【iOS】Firebase SDK を追加すると didRegisterForRemoteNotificationsWithDeviceToken が呼ばれない
- 5. 【SwiftUI】よくある TextField を作る
- 6. iOSのファイルシステムについて理解する【WIP】
- 7. 【Flutter】Patrolでテストを書く(導入まで)
- 8. 覚えるのは必須じゃないけど役に立つもの 〜 2の冪(べき) 〜
- 9. Flutter の 2 つのウィジェットについて
- 10. 大学非公式アプリのあれこれ
- 11. 【SwiftUI】ScrollView や List を snap する
- 12. onFieldSubmitted時にテキストをクリアする方法
- 13. iOS向けのWebアプリの作成時に気づいたこと
- 14. iPhoneでメモリキャッシュとディスクキャッシュの画像読み込み速度を比べてみた
- 15. 【知見メモ】wordJoinerでSwiftUIのText()の文字を変な位置で改行させないようにする方法
- 16. iOSアプリ開発関連メモ:XcodeとmacOSとSwiftなどのバージョン対応表(Apple公式へのリンク)
- 17. Pythonista3で英語学習アプリ風を作ってみた
- 18. iOSのPrivacy ManifestsのNSPrivacyTrackingDomainsに記載するドメインの調べ方
- 19. Module ‘Nuke’ has no member named ‘loadImage’ とNo such module ‘NukeExtensions’ になる
- 20. Flutter で Android と iOS のスワイプして戻る画面遷移機能を無効化する
【SwiftUI】TextEditorの見た目をTextFieldっぽくする
# 概要
TextFieldでは入力欄が空の時に薄い文字を表示することができますが、TextEditorではできません。そこで今回は、TextEditorでもTextFieldっぽく薄い文字を表示する方法を解説していきます。# ゴール
本来のTextEditorは以下の左のような見た目ですが、今回は以下の右のような見た目を目指します。# 基本のTextEditor
基本的なTextEditorです。これは、Viewが真っ白で何も見えません。### コード
“`: SwiftUI: 基本のTextEditor
import SwiftUIstruct QiitaView: View {
// TextEditor用
@State private var memo: String = “”
var body: some View {
// 基本
TextEditor(text: $memo)
}
}#Preview {
QiitaView()
}
“`### 見た目
iOSにおける非同期型イベント駆動:::note info
本記事は [技術書典16](https://techbookfest.org/event/tbf16) で無料配布する同人誌「ゆめみ大技林 ’24」の寄稿です。加筆や修正などがある場合はこの記事で行います。
:::iOS アプリの開発において、あるイベントに合わせて処理を実行したい、たとえばボタンタップのタイミングで処理を実行したい場合は、次のようなコードを書けば実現できます。
“`swift
Button(“Sign in”) {
signIn()
}func signIn() {
// …
}
“`これは、イベント発生(ボタンタップ)と処理実行(関数実行)が同期されています。一方で、実装仕様や設計のため、イベント発生と処理実行を非同期(異なるタイミングや場所)で行いたいとき、どうすればいいでしょうか。
本記事はイベント発生と処理実行を非同期で実現するいくつかの方法をまとめました。なお、それらを解決する便利なサードライブラリもありますが、今回はアップルが提供するライブラリで実現できる方法を扱います。
### 免責事項
Compose Multiplatformで利用できるようになったNavigationを使ってみた
## はじめに
[Compose Multiplatform](https://www.jetbrains.com/ja-jp/lp/compose-multiplatform/)は、[Jetpack Compose](https://developer.android.com/develop/ui/compose/) をベースにKMP(Kotlin Multiplatform)プロジェクトでUIを構築するためのフレームワークです。
ここ最近は、目まぐるしいスピードで進化をしており、Resource周りも共通で実装できるようになっています!
そして、alpha版ではありますが、ついに `Navigation` も利用できるようになりました🎉実際に `Navigation` を利用したところ体験が良かったため、本記事で紹介します!
## Navigationとは?
[Navigation](https://developer.android.com/guide/navigation)は、アプリ内の様々なコンテンツ間を遷移するためのAndroidでのライブラリです。
このライブラ
【iOS】Firebase SDK を追加すると didRegisterForRemoteNotificationsWithDeviceToken が呼ばれない
# 解決方法
:::note info
info.plistに以下の項目を追加する。
|Key|Type|Value|
|:-:|:-:|:-:|
|GoogleUtilitiesAppDelegateProxyEnabled|Boolean|NO|
:::これで`didRegisterForRemoteNotificationsWithDeviceToken`が呼ばれるようになる。
【SwiftUI】よくある TextField を作る
【SwiftUI】TextField の角を丸くして背景色を付けるもっとも簡単な方法は
👉 https://t.co/LpqABKBpQA#ios #macos #swift iOSのファイルシステムについて理解する【WIP】# はじめに
今回画像データを扱うことになり、画像データの保存先をRealmなどのDBではなくファイルシステムの領域へと保存することにしました。
本記事は、iOSのファイルシステムについて理解して設計・開発に役立てること、また将来の自身の振り返りに役立てることを目的にしています。### 参考文献
File System Basics(Updated: 2018-04-09)
https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html↑6年前のアーカイブドキュメントですが図もあり分かりやすいため上記資料をベースに記載していきます。
# iOSのファイルシステム
## iOSファイルシステムについて
iOSファイルシステムとは、単独で実行されるアプリを対象としており、ユーザーはファイルシステムへ直接アクセスできない。## iOS標準
【Flutter】Patrolでテストを書く(導入まで)
## はじめに
Flutterの[Finder](https://api.flutter.dev/flutter/flutter_test/Finder-class.html)や[WidgetTester](https://api.flutter.dev/flutter/flutter_test/WidgetTester-class.html)ではネイティブビュー(OSの権限許可ダイアログ等)を見つけたり操作することができません。
そこで、[patrol](https://patrol.leancode.co/)を使用して操作できるようにしたいと思います。本記事では`patrol`を導入し、iOSとAndroidのセットアップまで進めます。
## 環境
・flutter: 3.19.6
・dart: 3.3.4
・patrol: 3.6.1
・patrol_cli: 2.7.0## `patrol`、`patrol_cli`のインストール
### `patrol`を追加
“`
flutter pub add patrol –dev
“`※Android SDK
覚えるのは必須じゃないけど役に立つもの 〜 2の冪(べき) 〜
## はじめに
読了時間:5分
覚えてなくても問題はないけど、覚えていて損はないことを小出しに紹介して行こうかと思います
## **2の冪(べき)と近似値**
今回は **2の冪(べき)と近似値**です。
以下のようなケースで役に立つかと思います。
– スケーラビリティやメモリの制限があるような問題に向き合う時
– Intなど数値型ではどの数値まで扱えたか?
2の冪(べき)の表 2の冪 厳密な値 近似値 MB, GBなど 7 128 – – 8 256 – – 9 512 Flutter の 2 つのウィジェットについて
## 概要
Flutter の 2 つのウィジェット、StatelessWidget、StatefulWidget についてまとめてみました。
特に StatefulWidget のライフサイクルについて深掘りしてみました。## StatelessWidget とは
– 状態を持たないウィジェット
– 一度描画されるとその後、状態が変化しない
– 例)固定のテキスト表示、アイコン・画像など## StatefulWidget とは
– 状態を持つウィジェット
– ユーザーの操作や時間の経過などによって、状態が変化し、見た目や振る舞いが変わる
– 例)チェックボックス、テキストフィールド、カウンターアプリなど## StatefulWidget のライフサイクルについて
ここでは StatefulWidget のライフサイクルについて深掘りしていきたいと思います。
緑の図形で記載したのが状態、青の図形で記載したのが各状態で呼び出されるメソッドになります。
![スクリーンショット 2024-05-05 10.47.02.png](https://qiita-image-
大学非公式アプリのあれこれ
# はじめに
大学生が在学する大学の非公式(一部公式)アプリを開発した例をまとめたいと思います。これは私が大学非公式アプリ開発を始めるための市場調査兼ねていました笑。
現時点(2024年4月)でiOS版ネイティブアプリのリリースが行われているものを対象とします。筆者の独自集計のため漏れがあるかもしれない点はご了承ください。# 調査
### 1 芝浦工業大学「ScombApp」
これはかなり学生開発アプリの中では有名な事例だと思います。開発者の方が大学に相談したことがきっかけで、大学の公式アプリとして採用され学生エンジニアとして開発・保守を行なっているというなんとも素晴らしいエピソード付きのアプリです。
現在は専用のAPIまで用意されているとか…https://apps.apple.com/jp/app/scombapp/id1669657083
https://web.sic.shibaura-it.ac.jp/scombapp
### 2 早稲田大学「わせコマ」
こちらは早大生が早大生のために開発された非公式アプリです。時間割の登録が大学公式ポータルMyWas
【SwiftUI】ScrollView や List を snap する
なんか違和感がある。
### 🤔 snap を使う
ScrollView を使ったリストの実装に、
“`swift
.scrollTargetLayout().scrollTargetBehavior(.viewAligned)
“`の2行を追加するだけできっちり止まるようになります。
### 🤔 適用後
違和感がなくなりました。
これは便利すぎる !
onFieldSubmitted時にテキストをクリアする方法
# 概要
Flutter初心者によるFlutter初心者のための記事になります。
TextFormField使ってonFieldSubmittedを発火させた後に入力した文字消えないの気持ち悪いなと思って調べてみました。# 実装
TextFormFieldのテキストをクリアするには、TextEditingControllerを使います。実装方法は下記になります。
“`dart
final _editController = TextEditingController();TextFormField(
controller: _editController,
onFieldSubmitted: (text) {
// 〜〜〜〜〜〜〜
_editController.clear(); // TextFormFieldのテキストをクリア
},
),
“`実際の動きはこんな感じになります。
![qiita.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/iOS向けのWebアプリの作成時に気づいたこと
# 概要
Webアプリはブラウザ上で閲覧できるため、PC/スマホ両方で利用することができます。
しかし、PCと異なりスマホは端末の画面が小さくなります。指でタッチすることを考慮する必要があるため、一部のスマホはUIに関する独自のガイドラインが定められています。
たとえば、[iOS向けのユーザーインターフェイスのデザインのヒント](https://developer.apple.com/jp/design/tips/)のように、文字の大きさやタッチコントロールなど細かいところまでガイドラインが定められています。
今回は、上記のデザインのヒントを知らずに開発していたら、バグった話を紹介します。
[Andoridの端末でもiOSのようなガイドライン](https://developer.android.com/design/ui/mobile/guides/foundations/accessibility?hl=ja&_gl=1*fjdscy*_up*MQ..*_ga*MjA2Mjg4MTgwMy4xNzEzOTM0NjE4*_ga_6HH9YJMN9M*MTcxMzkzNDYxNy4xLiPhoneでメモリキャッシュとディスクキャッシュの画像読み込み速度を比べてみた
## はじめに
iOSのアプリを開発していて画像をどこで保持しておくか悩むことがありました。そこでメモリとディスクで画像の読み込み速度を計測・比較してみようと思い立ちました。## そもそもキャッシュとは
ファイルやアプリケーションのデータを一時的に保持し、データの再取得や再計算にかかる時間を短縮する仕組みです。## メモリキャッシュとディスクキャッシュ
**メモリキャッシュ**
データをデバイスのRAM(ランダムアクセスメモリ)内に一時的に保存する方法です。高速にアクセスできますが、アプリケーションが終了するか、デバイスが再起動されると消去されます。使用し過ぎると動作が重くなったりもします。**ディスクキャッシュ**
データをデバイスの永続的なストレージ(SSDやHDDなど)に保存する方法です。ディスクキャッシュはメモリキャッシュよりも遅いですがアプリケーションが終了してもデータは保持されます。ストレージの一部を使用します。iPhoneの128GBとか256GBとかいってるあれです。## キャッシュに画像を保存する
### メモリキャッシュへ保存
メモリキャッシュ【知見メモ】wordJoinerでSwiftUIのText()の文字を変な位置で改行させないようにする方法
# はじめに
本記事では、wordJoinerを使って、SwiftUIのText()の文字を変な位置で改行させないようにする方法をご紹介します。
## 環境
– Xcode 15.2
– iOS 17.2# 発生した課題
SwiftUIのTextを表示した時に、左詰めで文字が表示されず、変な位置で改行されていました。
![スクリーンショット 2024-05-01 18.12.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3368292/eaea822f-d85d-b518-4cf7-33891eca495c.png)
“`
現状: ボヘミア\nン・ラプソデ
“`しかし、理想とする改行の位置はこちら
“`
理想: ボヘミアン\n・ラプソデ
“`(正式名称は、ボヘミアン・ラプソディですが、文字数の都合上、「ィ」は省略)
## 実装(before)
また、実装は下記の通りです。
ZStackでRoundedRectangleの上にTextを載せています。fra
iOSアプリ開発関連メモ:XcodeとmacOSとSwiftなどのバージョン対応表(Apple公式へのリンク)
# XcodeとmacOSとSwiftなどのバージョン対応表
https://developer.apple.com/support/xcode/
Pythonista3で英語学習アプリ風を作ってみた
# Pythonista3で英語学習アプリ風に作ってみた
皆さんはPythonista3をご存じでしょうか。iOSデバイス上でPythonによるプログラミングが出来る、iPhone/iPadユーザーにはとても便利なアプリです。
今回はPythonista3を使って、TOEIC Part5を意識した空欄選択問題の練習をするアプリ風なプログラムを作ってみました。
荒削りですが、試行錯誤した点を含めて備忘録的に投稿させていただきます。
## 1. プログラムを作った背景
会社からTOEICを受講するよう言われたため勉強を始めたのですが、Part5の正答率を上げるためには苦手な問題を繰り返し学習して潰し込むのが良きと考え、App Storeを探索していました。が、下記の要件を満たす、なるべく安いアプリが見つからず、であれば作ってしまおうとなりました。
[要件]
– CSVファイルから独自の問題をインポート出来る
– 品詞問題に対応するよう用意したフレーズを使用できる(≠他問題の選択肢ランダム)
– 解答後には解説が確認できる
– 苦手問題をマーキングしたり、学習結果を記録として出iOSのPrivacy ManifestsのNSPrivacyTrackingDomainsに記載するドメインの調べ方
Google AdMobやApplovin Maxといったサードパーティのライブラリが接続しているトラッキングドメインを調べてPrivacy MainifestsのNSPrivacyTrackingDomainsに記載する手順です。
## 環境
Xcode 15.3## 参考
[WWDC 2023: Get started with privacy mainifests](https://developer.apple.com/videos/play/wwdc2023/10060/?time=399)## 手順
#### 1. Xcodeでプログラムをデバッグ実行します。
#### 2. Xcodeのナビゲータバーでデバッグナビゲーターを選択し、Networkを選択します。
![スクリーンショット 2024-04-29 10.03.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362719/0e88c383-9c88-c38f-7867-5f51d86a87d1.png)####
Module ‘Nuke’ has no member named ‘loadImage’ とNo such module ‘NukeExtensions’ になる
# はじめに
https://pixiv.github.io/ios-tutorial/tutorials/tutorial/practice4
pixivのTutorialをやっていてNukeでつまずいたのでメモ
# Nuke.loadImageが使えない
NukeのバージョンによってNuke.loadImageが使えなくなっているようでしたので解決方法を探して
“`
import NukeExtensions
“`
をインポートしてようとしましたが、No such module ‘NukeExtensions’ とエラーになってしまう。# 解決方法
### 私の場合はAdd to TargetがNoneになっていたのが原因でしたのでNukeをSPMで入れなおしました。
以下画面に行きます。
![スクリーンショット 2024-04-28 22.30.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883687/2e95bd28-f990-6648-3fe6-89247489567bFlutter で Android と iOS のスワイプして戻る画面遷移機能を無効化する
# なにこれ
この戻る機能を無くしたいので、それを実装した時のメモを書く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2819748/82a1a37c-2c3f-7b0d-1883-297374b3cf65.png)# 解決方法
`PopScope` を利用して `canPop: false` を実装するだけで大丈夫でした。### Before
“`dart
class _HomeViewState extends State{
int selectedIndex;_HomeViewState({Key? key, required this.selectedIndex});
@override
Widget build(BuildContext context) {
return Scaffold(
// コードが続く
“`### After
“`dart
class _HomeViewState ex関連する記事
OTHERカテゴリの最新記事
- 2024.09.19
JavaScript関連のことを調べてみた
- 2024.09.19
JAVA関連のことを調べてみた
- 2024.09.19
iOS関連のことを調べてみた
- 2024.09.19
Rails関連のことを調べてみた
- 2024.09.19
Lambda関連のことを調べてみた
- 2024.09.19
Python関連のことを調べてみた