- 1. 【SwiftUI】高さ可変のTextEditor
- 2. flutterで作成したアプリを実機にインストールする(iOS)
- 3. 【SwiftUI】Listのひとつの要素の中に複数のボタンを置く方法
- 4. 【macOS】同じネットワーク上の端末にしれっとアクセスする
- 5. Xcodeのシュミレーターを削除する
- 6. 【SwiftUI】iOS ↔ macOS 互換の記述
- 7. よ〜くわかる GitHub Actions の仕組み【iOS アプリ】
- 8. WebアプリエンジニアがSwiftUI Tutorialをやってみた
- 9. Vimに入門した自分用のチートシート
- 10. AWS PinpointでiOSにプッシュ通知を送信する際のAPNS環境の違いとテストフライトの注意事項
- 11. 【SwiftUI】Listが1番下までスクロールした事を検知する
- 12. 【Flutter】文字列操作: 特定の文字列を語尾に含む場合に削除する方法
- 13. ネットワーク復旧後にモバイルアプリの計装データが送信されることを確認してみた!
- 14. xcodebuildでx86向けの.appファイルを作成する
- 15. #14 Airtableを利用してiOSアプリを開発する
- 16. @escapingについて
- 17. 【Flutter】Patrolでテストを書く(基本編)
- 18. 子供向けにチャットアプリを作ってみた
- 19. ReactNativeの環境構築をしてみた
- 20. 【Flutter】ボタンの連打を無効にする対応メモ。onPressedの処理中は押せないボタンを作成する方法
【SwiftUI】高さ可変のTextEditor
# 完成イメージ
– 入力が空の場合はプレースホルダーを表示
– 改行した分だけ高さが変化する# コード
“`: swiftUI
import SwiftUIstruct DynamicHeightTextEditorView: View {
// 入力するテキスト
@Binding var text: String
// プレースホルダーの文字
let placeholder: String
// 最大の高さ
let maxHeight: CGFloatvar body: some View {
ZStack(alignment: .leading) {
// テキストエディター
HStack {
if text.isEmpty {
Text(placeholder)
.foregroundColor(.gray)
flutterで作成したアプリを実機にインストールする(iOS)
プロジェクトのルートディレクトリで下記を実行する。
“`shellflutter clean && flutter build ios && flutter install
“`
接続されているデバイスが表示されて「Please choose one (or “q” to quit): 」と表示されるので、それに従いインストールするデバイスを選択する。
【SwiftUI】Listのひとつの要素の中に複数のボタンを置く方法
# 何が問題か?
タイトルを読んだ限り簡単に実現できそうですよね?
実は、そうでもないのです。素直に実装した例です。
– コード
~~~Swift
import SwiftUIstruct ContentView: View {
let items = [“Item 1”, “Item 2”, “Item 3”] // 仮のデータvar body: some View {
List {
ForEach(items, id: \.self) { item in
VStack {
Text(item)
.padding()
HStack {
Button(action: {
print(“\(item) Button 1 tapped”)
【macOS】同じネットワーク上の端末にしれっとアクセスする
IPアドレス見つけてしれっと。
“`
~ % sudo arp-scan -l
Password:
Interface: en1, type: EN10MB, MAC: f8:ff:c1:3a:12:ee, IPv4: 192.168.150.30
Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.150.5 ec:12:80:22:1b:c0 D-Link International
192.168.150.11 84:1f:ec:9c:26:08 BUFFALO.INC
192.168.150.34 14:12:a3:91:2e:e0 Motorola Mobility LLC, a Lenovo Company
192.168.150.42 d0:17:82:f3:68:2a AzureWave Technology Inc.
192.168.150.220 01:d0:41:d6:1f:51 AMIGO TECHNOLOGY CO., LTD.
192
Xcodeのシュミレーターを削除する
## Xcodeのシュミレーターを削除する
ターミナルコマンドで削除するのがベストだと思いますが、それぞれの方法を調べてみたのでまとめて書いてます。
### 1.ディスクユーリティから確認する
Xcodeのシュミレーターを削除する時にいくつか方法があってMacのディスクユーリティでも表示・削除できるのではと思ったので確認してみました。![DiskUtilisationP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344207/aec9a5ba-d17b-fd71-da7b-1d237f2fcdfd.png)
左側に各iOSバージョンが表示されてます。![diskUtilisationP2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344207/690ce73e-4700-6d1f-7636-067472381fdf.png)
よく詳しくみてみるとiOS 17.
【SwiftUI】iOS ↔ macOS 互換の記述
なるほど、こうするといいのか。
“`swift
#if os(macOS)#else
#endif
“`![sc 2024-05-23 at 13.33.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588914/9d9dfc05-56e9-68f2-24f8-1bde8a63203f.png)
![sc 2024-05-23 at 13.33.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588914/a67216b6-4289-f42e-83f0-496d5121a006.png)
基本的ですが、いろいろ使えそうです。
# 🙆🏻♂️ 参考
【SwiftUI】iOS と macOS で互換したいコードの一つの解法
👉 よ〜くわかる GitHub Actions の仕組み【iOS アプリ】本記事は GitHub Actions 入門者向けです。
大事なポイントだけ押さえたい方は、「📚」マークが付いた章をお読みください。
# はじめに
「自動化は大切だ──でも、さらっと学ぶだけで良いんじゃない?」
最初はそう考えていましたが、使ってみると、これが本当に面白い。
何と言っても、複数のタスクが自動処理されるのは、見ていて気持ちが良いものです。
本記事では、図解や具体例を用いて、GitHub Actions の仕組みを丁寧に解説していきます。
:::note info
この記事で取り上げる内容
– CI/CD の概要 〜 GitHub Actions の使い方まで
– GitHub Actions を使って、シェルコマンドを自動実行させる。
:::# 1. GitHub Actions とは
[GitHub Actions](https://github.co.jp/features/actions) は、GitHub が提供している CI/CD サービスです。
これまで手動実行していた複数の処理を、1つの YAMLファイルにまとめて自動化できま
WebアプリエンジニアがSwiftUI Tutorialをやってみた
# はじめに
はじめまして。
普段は業務でWebアプリケーションの開発を行っているのですが、嬉しいことに長らく興味があったiOS周りにも携わらせていただくこととなりました。そこでとりあえずSwiftUIの公式チュートリアルを触ってみました。
個人的にかなりとっつきやすく、Nextを触っていた身からすると入りやすいフレームワークだと感じました。結構好みです。本記事ではチュートリアルを進めるうえで詰まったところや調べたところ、面白いなと思ったところなどをまとめていきます。解説記事の体裁を取った感想文みたいなものですが、今後似たような境遇の方や学びはじめの方の助けになればと思います。
Qiita初投稿です。何卒温かい目で読んでいただければ幸いです。# 前提条件
本記事を読むにあたって、筆者の前提情報は以下です。
* Web周りの開発経験はある程度
* iOSは全く触ったことがない
* swiftももちろん触ったことがない
* どちらかというとフロントは苦手寄り以上を踏まえたうえでお読みいただけると幸いです。
# SwiftUI Essentials
本節はXCodeでのプロジェ
Vimに入門した自分用のチートシート
## はじめに
iOSエンジニアをしている [Nao-RandD](https://x.com/Nao_RandD) です.
”Vimに入門するなら人生の前半が良い” という天啓を得て、Vimに入門しました。
そんな自分用のチートシートです。
今後も必要に応じて更新していこうと思います。
## チートシート
| コマンド | 効果 |
| — | — |
| c | VisualModeで選択した範囲を消してInsertModeで終わる |
| ci | 括弧の中身だけを消す(例:[ci”] “この中だけが消えます”) |
| ciw | カーソルの下にある1単語を消してInsertModeに入る(英語・カタカナ・ひらがな・漢字で分けられる) |
| cit | htmlのタグに囲まれている中を消します |
| dw | カーソルから右にある単語を消す(NormalModeで終わる) |
| daw | カーソルの下にある単語を消す |
| gd | 定義元に飛ぶ |
| fx | x にジャンプ |
| tx | x の一文字前にジャンプ |
| D | カーソ
AWS PinpointでiOSにプッシュ通知を送信する際のAPNS環境の違いとテストフライトの注意事項
こんにちは、開発部の天津炒飯です。
自分はステージング(STG)環境でテストフライトにプッシュ通知を送信できず、苦戦した経験があります。そこで、APNSのそれぞれの環境の違いと、STG環境でのテストフライトの注意事項を紹介したいと思います。
## APNS Product環境とSandbox環境の違い
### 1. Production環境
* **用途:** 本番環境で実際のユーザーに対してプッシュ通知を送信するために使用します。
* **証明書:** Apple Developerアカウントで取得するProduction用のAPNS証明書が必要です。
* **トークン:** 実デバイスで発行されたデバイストークンを使用します。
* **Pinpointチャンネル:** APNS
### 2. Sandbox環境
* **用途:** 開発およびテスト環境でプッシュ通知の動作を確認するために使用します。
* **証明書:** Apple Developerアカウントで取得するSandbox用のAPNS証明書が必要です。
* **トークン:** 実デバイスまたはシミュレーターで発行さ
【SwiftUI】Listが1番下までスクロールした事を検知する
# 概要
SwiftUIにおいて、Listが1番下までスクロールされたことを検知するベストプラクティスを紹介します。色々調べてみて、`GeometryReader`や`UIScrollView`を使用するやり方がありました。今回は`List`の性質を利用したやり方でやってみたいと思います。
# サンプルコードの概要
1. Listに数値を表示して、1番下までスクロールした事を検知
2. Listを更新する際に変なとこに?スクロールしないようにする# やり方
### 1. Listに数値を表示して、1番下までスクロールした事を検知
まず、ListとForEachで適当なViewを作成します。Listには数値を表示します。“`: ContentView
List {
ForEach(viewModel.numbers, id: \.self) { number in
Text(“Number \(number)”)
.frame(height: 100)
}
}
“`
また、今回データは以下のViewModelで定義
【Flutter】文字列操作: 特定の文字列を語尾に含む場合に削除する方法
## 本記事で紹介すること
Flutterの文字列(String)において、特定の文字列を含む場合、該当の語尾を削除する方法
## 解決方法
replaceAll関数を用いて、正規表現で文末を意味する”$”を使って、文末に特定の文字列が一致するかを検索して、空文字””で入れ替える。
## 実際のコード
“`dart:main.dart
void main() {
// 例の文字列
String text1 = “bukunya”;
String text2 = “bukuku”;
String text3 = “bukumu”;
String text4 = “This is a test”;// 文末が “nya”、”ku”、”mu” のいずれかであれば削除
String result1 = removeEnding(text1);
String result2 = removeEnding(text2);
String result3 = removeEnding(text3);
String result4 = remove
ネットワーク復旧後にモバイルアプリの計装データが送信されることを確認してみた!
# 概要
モバイルアプリをNew Relicのエージェントを使ってモニタリングしている際にネットワークがオフラインになるとその間のデータはNew Relicに送付できない可能性があります。New Relic アップデート(2024年3月)の中で、**『オフラインストレージでデータロストを最小限に』** というアップデートがあったので、今回はAndroidのエミュレーターを使ってイベントデータがネットワーク復旧後に送信されることを確認してみたいと思います!
:::note info
このアップデートの詳細はこちら
[New Relic アップデート(2024年3月)](https://newrelic.com/jp/blog/nerdlog/new-relic-update-202403 “New Relic アップデート(2024年3月)”)
:::# 手順
## 1. AndroidのアプリにNew Relicのエージェントを設定
今回はAndroid StudioのNew Projectから[Empty Activity]を作成して、New RelicのAndroidエ
xcodebuildでx86向けの.appファイルを作成する
[Maestro](https://maestro.mobile.dev/)でUITestを行っている際に.appファイルを作成する必要があったためメモ
※MaestroがARM64のビルドに非対応で、x86ビルドを行った
xcodebuildを使って作成
“`
xcodebuild \
-workspace WORKSPACE_NAME \
-scheme SCHEME_NAME \
-destination ‘generic/platform=iOS Simulator’ \
-derivedDataPath ./build \
clean build
“``build/Build/Products/Develop-iphonesimulator/(APP_NAME).app`に.appファイルが作成される
#14 Airtableを利用してiOSアプリを開発する
今回は、以前作成した地図クイズアプリを基に発展させて行います。このアプリはAirtableからデータを取得し、UITableViewに地図の名称と画像を表示します。ネットワークリクエストにはURLSessionを使用し、サードパーティライブラリのKingfisherを使ってネットワーク画像を読み込みます。
![Simulator Screen Recording – iPhone 15 Pro – 2024-05-20 at 16.52.57.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3703986/bdc48ca5-a62d-61f3-87e6-58e3197880a6.gif)
## Airtableデータベースの設定
まず、Airtableでデータベース(ベース)を作成し、必要なテーブルとフィールドを追加しました。この例では、mapInfoという名前のテーブルがあり、以下のフィールドを含んでいます:###### areaName:エリアの名称
###### areaInfo:エリアの情
@escapingについて
## はじめに
情報科学専門学校3年生のごみちゃんです!
今回は普段何気なく使っていた@escapingについてまとめてみました!## @escapingとは
@escapingはクロージャを破棄せずに取っておいてくれる便利な機能で、非同期処理などを行う際によく書かれるAPIを叩いたり、データベースを使うときは即座に処理を終えられない可能性が出てくるので、引数に(completion: @escaping () -> Void)と記述して、completionでAPIで取得した値、またはエラーを返す
“`swift
func getUserInfo(email: String, completion: @escaping (Result) -> Void) {
if let tokenData = KeychainManager.shared.get(service: “BOOK APP”, account: em
【Flutter】Patrolでテストを書く(基本編)
## はじめに
[【Flutter】Patrolでテストを書く(導入まで)](https://qiita.com/yyyy_yk/items/371c9ef67e81e39a7f58) の続きです。
実際に`patrol`で統合テストを書いて実行します。
最終的なゴールはネイティブビューをテストすることですが、まずは`patrol`で基本のテストを書いてみます。※ [Finder](https://api.flutter.dev/flutter/flutter_test/Finder-class.html)や[WidgetTester](https://api.flutter.dev/flutter/flutter_test/WidgetTester-class.html)の基本的な使い方については触れません。
## 環境
・flutter: 3.19.6
・dart: 3.3.4
・patrol: 3.6.1
・patrol_cli: 2.7.0## 基本のテスト
まずはFlutterプロジェクト作成時にデフォルトで用意されているDemoアプリに対してテストを書いてみ
子供向けにチャットアプリを作ってみた
## はじめに
ここ数年間React Nativeを触れる機会がなかったのですが、キャッチアップのために子供が使えそうなチャットのアプリを作ってみました。普段からWebのフロントエンドもReactで実装することがほとんどなのでやはり大きく迷うことはなく、Expo(特にEASのよるビルド、デプロイ)とFirebase、React Native Paperでかなりスムーズに進んだ印象です。本記事では使用した開発スタックと少し実装面の説明、出来上がったアプリの紹介などをしたいと思います。## 開発Stack
ざっとこのような感じです。
– [Expo](https://expo.dev/)(EAS、Expo Routerが便利)
– [Firebase](https://firebase.google.com/)(Authentication、Firestore)
– [React Native Paper](https://reactnativepaper.com/)(Material Designのコンポーネントライブラリ)
– [RevenueCat](https://www.
ReactNativeの環境構築をしてみた
:::note
カスタマイズ性が高い`Developer Build`を諦めて`Expo Go`で環境構築をしています。
詳しくは「Expo Goで開発することにした経緯」をご覧ください。
:::# React Nativeとは
ネイティブアプリのユーザインターフェイスを作る為のJavaScriptライブラリです。# Expoとは
React Nativeのフレームワークです。
ファイルベースのルーティング、高品質のユニバーサルライブラリ、ネイティブファイルを管理することなくネイティブコードを変更するプラグインを記述する機能などの機能を提供します。# 環境構築
:::note
Nodeをダウンロードされていない方はこちらから
https://nodejs.org/en
特にこだわりがなければLTSをダウンロードして下さい。
`node -v`でバージョンが表示されたら成功です。
“`terminal
node -v
v18.18.0
“`
:::## プロジェクトの作成
https://reactnative.dev/docs/environment-setup
【Flutter】ボタンの連打を無効にする対応メモ。onPressedの処理中は押せないボタンを作成する方法
## この記事でやりたいこと・紹介すること
:::note info
ボタンを押した後の処理を実行中は、ボタンを押せないようにするボタンを作成して、ユーザーが連打や実行中に比較的短い時間内でボタンを再度タップする動作等をしても二重で処理が発生しないようにする
:::## 実施した概要
ボタンクラスのラッパークラスを作成して、処理中はボタンの”onPressed”パラメータにNullを渡すことでタップ動作を無効にする。:::note info
上記の実装をすることで、容易に連打防止対応をしたボタンをコード全体で簡単に何度も使用することができます。
:::## 実際の方法とソースコード
実際の導入方法を紹介します。
### ボタンクラスのラッパークラスを作成
ボタンクラスのラッパークラスである`WaitableElevatedButton`クラスと`WaitableOutlinedButton`クラスを作成
以下のファイルを任意の場所に作成します。
:::note info
私は、基本的にUtilディレクトリ等を作成して、その配下に以下の`waitable_butt