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

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

【TCA】Storeの数が多くなるほどアクション送信のパフォーマンスが劣化していく

# はじめに
TCA公式サンプルの[Todos](https://github.com/pointfreeco/swift-composable-architecture/blob/main/Examples/Todos/README.md)では、リストの各アイテムに対してStoreを持たせる構造になっています。

TODOリストのようなアプリでは、ルートReducerで全てのアクションを受けるよりも、各アイテムがReducerを持ち、自身に関わるアクションを自ら処理できたほうが、責務も明確で実装がクリアになるでしょう。

しかし、リストの全てのアイテムがStoreを持つような実装をすると、アイテムの数が多くなるほど、アクション送信時のパフォーマンスが劣化していくという事象を経験しました。

ライブラリのコードを読んでボトルネックになっていそうな箇所を見つけたので、参考までに解説してみようと思います。

# 事象を再現してみる
まずは「Storeが多いとアクション送信のパフォーマンスが悪い」を再現します。

TCAのリポジトリには、ライブラリの性能を評価するためのベンチマークのコードが

元記事を表示

【SwiftUI】iPhoneのホーム画面のアプリのような並び替えを実装する

# はじめに
Twitterを見てたら、iPhoneのホーム画面のアプリのような並び替えどうやってやるんだろう的なツイートが流れてきて気になったので実装してみました。

# サンプルアプリ
![Simulator Screen Recording – iPhone 15 Pro – 2024-02-18 at 22.30.53.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/78c7ac9a-74e0-93d7-8b26-9f64f3e09ffb.gif)

# データ構造体
Colorを使いたかったのですが、Codableに準拠してなくて、ちょっとめんどそうだったので、RGBそれぞれをDoubleで持っています。
“`swift
struct AppIcon: Codable, Identifiable {
var id = UUID()
let red: Double
let green: Double
let blue: Double
}

exte

元記事を表示

EmptyViewはレイアウトに一切影響しない(SwiftUI)

## はじめに

SwiftUIにおいて `EmptyView()` がレイアウトに影響を与えないか気になったので、検証しました。

## 環境

– OS: macOS Sonoma 14.2.1 (23C71)
– Swift: 5.9.2
– シミュレータ: iPhone 15 Pro Max (17.2)

## 検証コード

以下のコードを実行して検証しました。
`VStack` の `spacing` に `16` を指定したので、もしレイアウトに影響を与えるなら `Text` 同士の間隔が大きくなるなどするはずです。

“`swift:ContentView.swift
import SwiftUI

struct ContentView: View {
var body: some View {
VStack(spacing: 16) {
Text(“Foo”)

Text(“Foo”)

EmptyView()

Text(“Foo”)

元記事を表示

RMBG1.4をCore ML モデルに変換する

# ハイクオリティな背景除去をiOSで

![pexels-oleksandr-p-1004359.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/6eeebac8-ae5a-0cfc-75e8-7392795040b6.jpeg)
![example_image_no_bg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/662c1fa2-4d1a-e4b9-2f76-b32c59871c4b.png)

### オリジナルモデルとCoreMLToolsのインストール

“`shell
git clone https://huggingface.co/briaai/RMBG-1.4
cd RMBG-1.4/
pip install -r requirements.txt
pip install coremltools
“`

### 方針

正規化した入力を受け取り、グレイスケールのマスク

元記事を表示

自作ローカルAPIを用いて、ReactNativeでTODOアプリを作ってみた

## はじめに

前回、TODOアプリのAPIを作成して、ローカルの挙動確認まで実施しました。
その続きとして、ReactNativeでTODOアプリを作成して、APIを叩く実装をします。

以下は、前回の記事のリンクです。

https://qiita.com/muranakar/items/8b7fbaf9c27e53241ae1

## 内容

まず最初に、前回のAPIの修正が必要になります。

### 追加実装した内容
– `id`をすべてUUIDに変更
– ローカルサーバーAPIを叩く際のポート番号と接続の権限周りの変更

### `id`をすべてUUIDに変更
変更する理由は、`number`で管理していると、数字の重複の可能性があるためです。

uuidライブラリーをインストール
“`
npm install uuid
“`

以下のコードに修正。

App.jsの変更後のコード

“`js
const express = require(‘express’);
const { v4: uuidv4 } =

元記事を表示

【Xcode Cloud】OSS側でプラグイン使用時にCI環境でビルドできない時の対応

## 概要
普段、Xcode Cloudを使用してビルド・リリースをしているのですが、
LicenseListというライブラリを入れたら、Xcode Cloudのビルドでエラーが発生するようになりました。

本記事はその対応内容のメモになります。

## まず最初に
LicenseListというライブラリについて
https://github.com/cybozu/LicenseList

このライブラリはOSSのライセンス情報を一覧で画面に表示してくれるライブラリです。
使い方は、このライブラリを入れて、指定の画面を起動するだけ!
開発時はOSSを入れたり消したりするので、このライブラリは非常にありがたいです :pray:

## 起こったエラーの内容
下記エラーがXcode Cloudのログに書かれてました。
“`
Validate plug-in “PrepareLicenseList” in package “licenselist”
“PrepareLicenseList” is disabled
“`
![image.png](https://qiita-image-

元記事を表示

iPhoneでCore MLを使って画像識別する

## はじめに
今世間ではApple vision proが盛り上がってますが、最近iPhoneアプリ開発の勉強をしているので今更かよって内容になります。(本当はapple vision pro買って色々試してみたい)
さて始めます。
今回はAppleから出ているCore MLを活用して画像識別を行なっていく。
Core MLとはすでに公開されているモデルを活用したり、自分でモデルを作成することによって機械学習を行うことができるフレームワークである。
以下から公式のドキュメントを参照できるが詳細に入ると全部英語なので私は毎回絶望している

https://developer.apple.com/jp/documentation/coreml/

大枠の構成はこのようになっています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645607/c026b363-2d08-7820-4b09-d4ec0ebfc6ab.png)

### Vision
画像や動画から特徴を検出し分類、認識などが

元記事を表示

【Swift】2つの値がほぼ同じであることを判定したい

# はじめに
Swiftで同じであることを知りたいのであれば、`==`を使えばわかります。
しかし、今回知りたいのは「**ほぼ**同じである」ことです。

「ある基準値より差が小さければ同じものであるとする」ということがしたいです。

どういうことかというと、

値A: 5.55550
値B: 5.55555

基準値を0.0001だとすると、上の例では値Aと値Bはほぼ同じであると言えます。

テストを書く際にこういうケースは割と発生すると思います。

実際、Nimbleにも`beCloseTo`という機能があり、「ほぼ同じ」が再現できます。

どのように実装すれば最もスマートでしょうか?

# Nimbleのコードを見てみる
値Aと値Bの差の絶対値を求めて、基準値より小さいかを見ているようです。
“`swift
internal func isCloseTo(
_ actualValue: NMBDoubleConvertible?,
expectedValue: NMBDoubleConvertible,
delta: Double
) -> Predic

元記事を表示

iOS17.2からAVCaptureEventInteractionで音量ボタン撮影が可能に

# 前書き
今まで非公開の通知を利用したり、音量を監視して行っていた音量ボタンでの写真撮影ですが、iOS17.2からついにこのためのAPI「**AVCaptureEventInteraction**」が追加されました!
[AVCaptureEventInteraction](https://developer.apple.com/documentation/avkit/avcaptureeventinteraction)
今の所、日本語で書かれた情報が無かったので備忘録も兼ねて公開します。
始めて技術系の記事を書くので、至らない点もあるかと思いますがよろしくお願いします。
# 実装
実装方法ですが、公式のドキュメントに書いてある通り下記の記述で簡単に実装出来ます。
ただし**AVCapture**の名前がついている通り、このAPIはUIImagePickerControllerのカメラやAVFoundationで制作したカスタムカメラの画面でのみ利用できます。
それ以外の画面ではAVCaptureEventInteractionはイベントを受信しません。
“`swift:公式ドキュメ

元記事を表示

【SwiftUI】TextFieldで数値を扱う

# はじめに
TextFieldで数字を扱いたいときに、数字を文字列に変換して、
使うとき数値に戻すといった面倒なことをしてる人いますよね
私もそれやってました。

iOS15からTextFiledで直接数値を扱えるようになったらしいんです。
気づきませんでした。

# サンプルアプリ
![Simulator Screen Recording – iPhone 15 Pro – 2024-02-16 at 21.53.21.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/61daee68-965a-ca10-1004-1cc681b78174.gif)

# 実装
“`swift
import SwiftUI

struct ContentView: View {
@State var value: Decimal.FormatStyle.FormatInput = 0.0
@State var int: Int = 0
@State var double: Do

元記事を表示

DevCleanerを使用してみる

Xcodeを使用しているとメチャクチャストレージが重くなります。

Intel製のMacBookを使用していた時はストレージが256GBしかなかったので、こまめなターミナルコマンドで削除をしていました。
コマンドでの削除でも良いのですけど、DevCleanerも便利でした!

インストールはこちらからできます。

https://apps.apple.com/jp/app/devcleaner-for-xcode/id1388020431?mt=12

# 使い方
インストールします。

説明内容になります。
>Clean your Xcode cache files
Xcode generates large amount of cached data that could be beneficial to development speed but also tends to consume large amount of data on your hard drive. This tool allows to clean those caches al

元記事を表示

オプショナルな引数の型パラメータを省略する方法(SwiftUI)

## はじめに

例えば以下のように、任意でヘッダーを付けられるビューがあるとします。

“`swift:FooView.swift
import SwiftUI

// FIXME: 修正する必要がある
struct FooView: View {
@ViewBuilder private let content: () -> Content
@ViewBuilder private let header: (() -> Header)?

var body: some View {
VStack {
header?()
content()
}
}

init(
@ViewBuilder content: @escaping () -> Content,
header: (() -> Header)? = nil
) {
self.content =

元記事を表示

SwiftLintの「Currently running SwiftLint x.y.z but configuration specified version a.b.c.」エラーの解決法

SwiftLintの記事はシリーズになっています。
記事を順番に読み進めると、SwiftLintを使いこなせるようになります。

– [Swiftの静的解析ツール「SwiftLint」のセットアップ方法](https://qiita.com/uhooi/items/bf888b53b4b8210108aa)
– [SwiftLintの全ルール一覧(Swift 4.2版)](https://qiita.com/uhooi/items/7f5d6cf2b240f60ba1ed)
– [SwiftLintで追加・変更・廃止されたルールまとめ(Swift 4.2→5.1.2版)](https://qiita.com/uhooi/items/8e9767c2e746f4171ded)
– [SwiftLintで追加・廃止されたルールまとめ(Swift 5.1.2→5.3.1版)](https://qiita.com/uhooi/items/10b9e49d3bd6f1344cad)
– [SwiftLintのオレオレカスタムルール一覧](https://qiita.com/uhooi/items

元記事を表示

【SwiftUI】AIでUIを作る

## はじめに
AIでUIを作れるのは何となく目にしたり聞いたりしたことはありましたが実際触ったことがなかったので調べてみました。そこで見つけたのがGalileo AIです。

https://www.usegalileo.ai/explore

## Galileo AI
簡単なテキストプロンプトから、UIデザイン(モバイル,Web)を作成してくれるAIツールです。
早速使ってみます。

### Text to UI
「chat list view」 をプロンプトとして打ち込んだ時の出力です。
それっぽいのが出来上がりました!

![スクリーンショット 2024-02-15 6.27.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/2a48f135-1f88-9757-e441-c97f3ef54ae5.png)

### Image to UI
もう一つ、画像からUIを生成する機能があります。
真似したいアプリ、Webの画像を渡してプロンプトに沿ったUIを生成してくれます。下

元記事を表示

AIで画像コンテンツを作成しつつFlutterでアプリ開発

## はじめに

どうも、@nittannittanです。

趣味でAndroid/iOS/Webアプリを作成しているアニメオタクです。

今回は、AIで画像コンテンツを作成しその画像を利用したアプリを開発したので、利用技術などを紹介したいと思います。

AIでの画像生成にはStable Diffusion Web UIを、アプリ開発にはFlutterを利用しました。

## AI画像生成へようこそ

まず手始めに、ローカル環境へStable Diffusion Web UIをインストールして操作方法や基礎的なことを学びました。
下記のサイトが参考になります。

Stable Diffusion web UIのインストールと使い方

### モデル探しの奇妙な冒険

なんとなく使い方が理解できたら次は生成したい画像にあったモデルを探す旅の始まりです。
下記サイトで探しわまったり、モデルを比較しているサイトもGoogle検索で見つかるので手当たり次第に試してみましょう。良し悪しがあって面白いです。

https://civitai.c

元記事を表示

Xcodeを使用してiOS simulatorを追加する方法

## 概要
MaxにiOS simulatorを追加する方法を投稿します。

既にX-codeがインストールされていることを前提としています。

## 環境
PC: Mac v 14.3
Xcode: v 15.2

## 手順1
Xcodeを開いてmacのメニューバーの`Window`をクリック。
その後、`Devices and Simulators`をクリック。
![スクリーンショット 2024-02-15 14.48.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952574/d3e8591a-0c55-517d-18ab-27eff88fd973.png)

画面左上の`Simulators`ボタンをクリックして、画面右下の`+`ボタンをクリック
![スクリーンショット 2024-02-15 14.49.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952574/c29cf0c2-7b5b-09e7

元記事を表示

iOS, iPadOSからphonelink(tel:…)を開く仕様差分に苦労した話

## まえがき

アプリ内からdeeplinkで電話アプリを起動する実装で、基本設計時に見落としていたハマりポイントがあったので共有。
今回のGOALは、[PhoneLink](https://www.notion.so/lancers-group/%22%3Chttps://developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/PhoneLinks/PhoneLinks.html%3E%22)を処理できる端末を使用しているユーザーにのみ、Phone Linkのdeeplink関連の機能を提供すること。そのために、**デバイスがPhoneLinkを使用できるか判断できるようにする**。

## FaceTimeとPhoneアプリの仕様差分について

読み進めていく前に理解しておきたい機能群を抜粋.

### FaceTime

– Wi-Fi経由でAppleユーザーの端末(iOS, iPadOS)への通話、デバイスのセルラー経由での通話ができる

> WiFi経由で、またはサポートさ

元記事を表示

iOS14環境でListの罫線が欠ける問題の解消方法

## はじめに

iOS14環境でListを使用するとコンテンツの下に置いた罫線のうち、何箇所かがレンダリング時に消えてしまう問題が発生。チームの開発メンバーに解決方法をお聞きしたので、備忘録として記載。

## 結論

少々トリッキーだが、Listのアイテムの**上に置くことで解決**する

サンプルコードは以下の通り

“`
import SwiftUI

struct TextData: Identifiable {
var id: String {
text
}
// textは一意であるとする
var text: String
}

struct ContentView: View {
// サンプルデータ
let textDataList: [TextData] = [.init(text: “test1”), .init(text: “text2”), .init(text: “text3”)]

var body: some View {
List {
Fo

元記事を表示

ReactNativeでOSや端末ごとに条件分岐してみた【Platformを用いて】

OSや端末ごとに条件分岐して値を変更したり、表示するテキストを変更する必要があったので、記載していきます。

https://reactnative.dev/docs/platform

を参考に進めていきます。

# 概要
### Platform.OS
![スクリーンショット 2024-02-10 6.58.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799713/3f041baa-d4b0-8133-3b74-a812205eae34.png)
– OSをenumで管理しています

### Platform.isPad
![スクリーンショット 2024-02-10 6.58.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799713/0c95ba39-2aa2-2fcc-2e86-08bf8582d0e1.png)
– iPadかどうかを、boolean型で返します
### Platform.sele

元記事を表示

iOS17.2のネットワーク共有はIPv6だけになっていた

Xで話題に上がったので調べてみたところ、iOS17.2のネットワーク共有ではIPv4通信は行われず、IPv6のみになっていた模様。

AppleCommunityでも話題に上がっていました。
どうやらiOS17.2ではIPv4アドレスがアサインされなくなった、とのこと。

https://discussions.apple.com/thread/255346180?answerId=259959698022

実際にiPhoneのネットワーク共有をonにしたところ、iPad上のIPv4の表示は192.0.0.2/32となっています。

![スクリーンショット 2024-02-15 1.52.41.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601755/f2312dde-637e-75b0-0cfa-68ea950fee92.jpeg)

Wiresharkで見てもインターネット通信はすべてIPv6で行われていることが確認できました。

なお、IP設定を手動にしてDHCPを使用しない場合、ネットワ

元記事を表示

OTHERカテゴリの最新記事