iOS関連のことを調べてみた

iOS関連のことを調べてみた

スクリーンショットテストのプラクティスについて調べるメモ

私はAndroidでエミュレーター無しでスクショテストができる [Roborazzi](https://github.com/takahirom/roborazzi) というライブラリを作っていて、もう少し周辺について詳しくなっておこうと思いまして、周辺技術のベストプラクティスを薄く広く軽く調べて見ます。

# Jestを使ったスナップショットテスト:

https://www.browserstack.com/guide/snapshot-testing

テストの流れが以下のように書いてあります。
1. 実行して、画面を描画する
1. Captureする
1. 保存する
1. もう一度実行する
1. 比較する
1. 画像をアップデートする

比較のところではdiffや比較の画像を出したりする。

以下のtoMatchSnapshot()で、なければ保存したり、あれば比較したりする。

“`js
test(‘should match snapshot’, () =>
{
const data = {name: ‘John’,age: 30,email: ‘john@exam

元記事を表示

【Flutter】FVM(Flutter Version Management)についての説明と導入手順

# はじめに

こんにちは!

そろそろネタに尽きてきたのですが、
そういえばFVMについての記事を書いてないなと思ったので、まとめてみました◎

今回は、HomeBrewでFVMをインストールする方法です。

# 開発環境

[使用端末]
PC: Macbook Air(M1)

[開発ツール]
VSCode

# FVMとは

FVM(Flutter Version Management)は、Flutterのバージョン管理ツールです。
プロジェクトごとに異なるFlutter SDKバージョンを簡単に切り替えたり、管理したりすることができます。
これによって、異なるプロジェクトで特定のFlutterバージョンに依存する場合でも、問題なく開発を進めることができます。

## 主な利点

* プロジェクトごとのバージョン管理
* 各プロジェクトに最適なFlutter SDKバージョンを簡単に設定できます
* 複数バージョンの管理
* 複数のFlutterバージョンを並行してインストール・管理することができます
* 簡単なバージョン切り替え
* コマンド一つでバージ

元記事を表示

iOSで画像内のオブジェクトを抽出する方法(VNGenerateForegroundInstanceMask)

![ios-extract-object-ja.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/82f4ffe8-581b-f0f3-9f9b-e2e42d89c1f6.png)

Photosアプリでは、画像からオブジェクト(動物、人など)を抽出するために長押しすることができます。本記事では、この機能をImageAnalysisInteractionを使用して実装する方法について説明します。また、画像ビューを使用せずにこれを実現するためにVNGenerateForegroundInstanceMaskRequestを呼び出す方法についても詳しく掘り下げます。

## 誰が猫がパーティーできないと言ったの?
(前景の猫を抽出し、画像の背景を置き換えるデモ)

![IMG_A752E3F394EA-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/565e14dd-a818-111f-781b-

元記事を表示

TestPlanを新しく作りたくなかったから無理やりねじ込んだ話

# 開発環境
Xcode 15.4
Swift 5.10

# 話の概要
iOS のプロジェクトを作成するとき、”Include Test” を選択すると、自動的に Test Plans が作成されます。

スキーママネージャを確認すると、次のように表示されます。
“`sh
[プロジェクト名](Autocreated)
“`

![image.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/e0905327-7b2b-13e0-eac6-43ec491ad496.jpeg)

しかし、このスキーマを削除した場合、Test Plans を手動で作成する必要があります。そのため、作成した Test Plans ファイルをプロジェクト内に配置する必要があります。

## Test Plans とは
Xcode 11 から追加されたテストに関する機能です。
Test Plan を利用すると、さまざまなテストの設定を1つのJSONファイル(`.xctestplan`)に書いておき、実行時にまとめ

元記事を表示

【iOS SwiftUI ↔ Android Jetpack Compose】今こそ移行のタイミングかもしれません 🔥

私の場合、

Java から Kotlin、Jetpack Compose とやってきましたが。

SwiftUI / SwiftData の Apple 公式チュートリアルをやったあと、

書いてみたら、意外とできたことに驚きました。

![](https://i0.wp.com/android.benigumo.com/wp-content/uploads/2023/11/sc-2023-11-29-at-15.47.24.gif)

移行や両方覚えるのチャンスです。

直感的に書けます。似ています。

一晩でとりあえずはできます。

https://gist.github.com/benigumocom/bd35b6e395ef8e18bd59d92086081dbc

本質的な流儀やテクニックは置いておくとして、

移行や二股のタイミングかもしれません。

それぞれの深さは、

まずは嬉しがったあとに苦しむとして。

SwiftUI + SwiftData で ToDo リスト を作ってみる

元記事を表示

flutterの環境構築してhandsonをiOS Simulatorで動かしてみる

flutterでiOSアプリが作りたかったので、他の方の入門記事を参考に環境構築しました。
handsonというアプリケーションをiOSのSimulatorで動かすところまでをやります。
行き詰まった箇所もあったので、flutterの環境構築で詰まった方の参考になればいいなと思います!

# 環境
– M1 Mac
– macOS: Sonoma 14.5
– Java8を過去にインストールした
– XCodeをAppStoreから過去にインストールしていたが重かったのでアンインストールした
– 今日: 2024年5月27日 (versionとかの参考にしてください)

# flutter SDK のインストール
このサイトからインストールしていきます。

https://docs.flutter.dev/get-started/install

自分の環境にあった環境を選んでください。
私はmacOSを選びました。

![スクリーンショット 2024-05-27 1.00.47.png](https://qiita-image-store.s3.ap-northeast-1.amaz

元記事を表示

SwiftのImageAnalyzerで画像内の縦書き文章を認識する(縦書きOCR)

# 結論
画像内に日本語の文章しかないなら、ImageAnalyzerを使えばおけです!

“`sample.swift
func recognizeVerticalText(image: UIImage) async -> String {
var recognizedText = “”
guard #available(iOS 16.0, *) else { return recognizedText } // iOS16以上必須
let analyzer = ImageAnalyzer()
let configuration = ImageAnalyzer.Configuration(.text)
do {
let analysis = try await analyzer.analyze(image, configuration: configuration)
recognizedText = analysis.transcript

元記事を表示

Latest Trends in Android and iOS Development Technologies (May 2024 Update)

![mobile-app-development-cross-platform.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801568/03d9b726-d1e6-097d-29ac-9a959b527c4d.jpeg)

In the rapidly evolving realm of mobile app development, staying abreast of the latest technologies is paramount for developers seeking to create cutting-edge applications. As of May 2024, let’s delve into the recent advancements in both Android and iOS development, covering both native and cross-platform solutions.

## Native Development T

元記事を表示

LSMinimumSystemVersionによるリジェクト

iOSアプリをAppStore Connectにアップロードした後、以下のようなメッセージを含むメールがAppleから送られてきました。

![スクリーンショット 2024-05-26 0.47.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202602/03e047ad-d8dd-1a65-6883-265b0037b73a.png)

Apple silliconを搭載したMacでの対応OSに関するもののようです。

メールの記載にあるように`LSMinimumSystemVersion`を14.0って感じに設定すればいいみたいです。

![スクリーンショット 2024-05-26 0.50.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202602/9504ac8b-b96f-7560-a7cf-33dffef9f57a.png)

これでアップロードしたところ、リジェクトのメールは来ませんでした。

元記事を表示

iOSデバイスのBluetooth許可アラートメッセージをローカライズする

iOSデバイスでBluetoothを使用する際、初めてアプリを起動すると接続許可アラートメッセージが表示されます。

![Bluetooth Alert.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202602/b169c277-27b1-2036-4eef-e21feb91a1af.png)

このメッセージはXcodeのInfoの項目で設定しています。

![スクリーンショット 2024-05-26 0.22.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202602/7bbce496-34ef-0ea2-72e7-33229837b560.png)

このメッセージのローカライズするには、アプリ名のローカライズと同じ「InfoPlist.strings」の中に記載します。

:::note info
「InfoPlist.strings」のローカライズ設定が必要です
![スクリーンショット 2024-05-

元記事を表示

【SwiftUI】ブラウザを開くリンク記述

2つだけでいい。

これらをベースの変形でどうにかなるようです。

# 🧑🏻‍💻 テキストリンクから

“`swift
Link(
“【SwiftUI】ブラウザへのURLリンク”,
destination: URL(string: “https://android.benigumo.com/20240525/browser-link/”)!
)
“`

# 🧑🏻‍💻 アクションとして

“`swift
@Environment(\.openURL) private var openURL

var body: some View {
Button(“【SwiftUI】ブラウザへのURLリンク”) {
openURL(URL(string: “https://android.benigumo.com/20240525/browser-link/”)!)
}
}
“`

# 🧑🏻‍💻 参考

https://x.com/maochanz/status/1794304523802140932

元記事を表示

【SwiftUI】高さ可変のTextEditor

# 完成イメージ
– 入力が空の場合はプレースホルダーを表示
– 改行した分だけ高さが変化する

# コード
“`: swiftUI
import SwiftUI

struct DynamicHeightTextEditorView: View {
// 入力するテキスト
@Binding var text: String
// プレースホルダーの文字
let placeholder: String
// 最大の高さ
let maxHeight: CGFloat

var body: some View {
ZStack(alignment: .leading) {
// テキストエディター
HStack {
if text.isEmpty {
Text(placeholder)
.foregroundColor(.gray)

元記事を表示

flutterで作成したアプリを実機にインストールする(iOS)

プロジェクトのルートディレクトリで下記を実行する。
“`shell

flutter clean && flutter build ios && flutter install

“`
接続されているデバイスが表示されて「Please choose one (or “q” to quit): 」と表示されるので、それに従いインストールするデバイスを選択する。

元記事を表示

【SwiftUI】Listのひとつの要素の中に複数のボタンを置く方法

# 何が問題か?
タイトルを読んだ限り簡単に実現できそうですよね?
実は、そうでもないのです。

素直に実装した例です。
– コード
~~~Swift
import SwiftUI

struct 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)

基本的ですが、いろいろ使えそうです。

# 🙆🏻‍♂️ 参考

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 | カーソ

元記事を表示

OTHERカテゴリの最新記事