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

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

【TCA】Task.yieldを使ってCPU負荷の高い処理を効率的に実行する

# はじめに
TCAの[Performance](https://pointfreeco.github.io/swift-composable-architecture/main/documentation/composablearchitecture/performance#CPU-intensive-calculations)に関するドキュメント内で、`Task.yield()`というAPIを使用したCPU負荷対策の例が挙げられていました。

今まで`Task.yield()`を使ったことが無く、ドキュメントを読んでも何をしているのかいまいちわからなかったので調べてみました。

# Task.yield
`Task.yield()`は現在のタスクをサスペンドし、同じスレッドで別のタスクを実行できるようにするためのAPIです。

以下のコードを見てください。
最初に無限ループするタスクを100個生成し、その後「Hello, world!」と出力するタスクを生成します。
プログラムの実行が終了しないように、最後に`while true {}`でメインスレッドをブロックしています。

`

元記事を表示

【Swift】人の名前を扱う

# はじめに
`PersonNameComponents`というものを知りました。

`DateComponents`のように人の名前を管理できるようです。
めっちゃ便利そうなので基本的な使い方を記録しておきます。

# イニシャライザはこんな感じ
本記事で登場してもらうのは、「山田ルーカス太郎3世」です。
あだ名は「タロー」です。

“`swift
var personNameComponents = PersonNameComponents(
namePrefix: “Mr.”, /* Mr., Mrs., Ms.など */
givenName: “太郎”, /* 名前 */
middleName: “ルーカス”, /* ミドルネーム */
familyName: “山田”, /* 苗字 */
nameSuffix: “3世”, /* Sr., Jr., I, II, IIIなど */
nickname: “タロー”, /* ニックネーム */
phoneticRepresentation: nil /* 受信機の音声表現名

元記事を表示

ビューを非表示にする方法の使い分け(SwiftUI)

## はじめに

ビューを非表示にする方法はいくつかあり、どれを採用すればいいかの判断に迷うことがあったのでまとめました。

## 環境

– OS: macOS Sonoma 14.2.1 (23C71)
– Swift: 5.9.2

## 結論

先に結論です。

– トルツメ [^torutsume] → `if` や `switch`
– トルママ [^torumama]
– 常に非表示(レイアウトのためだけに配置する) → `hidden()`
– 条件によって表示/非表示を切り換える → `opacity(condition ? 1 : 0)`

[^torutsume]: 取って詰めること。
[^torumama]: 取っても詰めずにそのままとすること。

## 検証

簡単なコードで検証しました。

“`swift:ContentView.swift
import SwiftUI

struct ContentView: View {
var body: some View {
VStack(spacing: 16) {

元記事を表示

リアルタイムカメラ加工アプリを作る【Swift】【AVFoundation】

# カメラ→加工→動画保存

![Feb-03-2024 03-15-35.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/66b2329b-069c-dd3e-dca8-07ee879c814f.gif)

カメラからの一枚一枚のフレームに任意の加工をして動画として書き込む方法です。
(Core ML でアニメ風の画像にする処理を例とします)

AVCaptureSession でカメラフレームを取得

フレームを加工

AVAssetWriter に流し込む

という手順で動画にします。

# 手順

### infoPlist でアプリでカメラとマイクの使用許可設定

“`info.plist
Privacy – Camera Usage Description
Privacy – Microphone Usage Description
“`

### プロパティ
これらを使います。

“`swift
// capture
private var captureSessio

元記事を表示

SF SymbolsとwithAnimationを活用してオリジナルのインジケータを作成しよう!

## 概要
アプリを作っていると何かしらの処理の完了をユーザーに待機させる目的でインジケータを表示させたいと思うことはよくあることだと思います。
こういうやつですね。

このインジケータを表示させる方法として、`PKHUD`のようなライブラリを活用する方法や、SwiftUIであれば`ProgressView`を活用する方法があると思います。
しかし、せっかくならインジケータを自作して、アプリに個性を出したいと思わないでしょうか?
私は思いました。

今回はそのような思いから、SF Symbolsを活用してオリジナルのインジケータを作成する方法を紹介したいと思います。
完成イメージは以下です。
【Flutter】テキストの装飾

Flutterでのテキストの装飾についてまとめました。

テキストサイズの記載がないものは一律「fontSize: 30」にしております。

## テキストサイズ

“`dart:書き方
Text(
‘fontSize 5’, // 表示したいテキスト
style: TextStyle(fontSize: 5), // テキストサイズ
),
“`

![Screenshot_20240206_221806.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3641068/e0bec6fd-b8dd-7983-d2a1-ac02566d048f.png)

## テキストカラー

“`dart:書き方
Text(
‘color red’, // 表示したいテキスト
style: TextStyle(
color: Colors.red), // テキストカラー
),
“`

![Screenshot_20240206_224645.png](h

元記事を表示

【Xcode】Xcodesで新しいバージョンのXcodeをインストールしたらxedが使えなくなった

# はじめに
おそらく割と使われているであろうXcodes関連で困ったことがあったので記録しておきます。

# 何が起きたのか
私はいつもコマンドでXcodeを開いてるのですが、Xcodesで新しいXcodeをインストールしたら、コマンドが使えなくなりました。

ちなみにXcodeを開くコマンドはこれです。

“`
xed .
“`

# エラー
“`
xcode-select: error: tool ‘xed’ requires Xcode, but active developer directory ‘/Library/Developer/CommandLineTools’ is a command line tools instance
“`

# 解決方法
`Xcode-15.2.0.app`はアプリ名です。
XcodesでXcodeをインストールすると`Xcode-バージョン.app`のようになるので、私はこのようになっています。
AppStoreなどからインストールしている方は`Xcode.app`なはずです。
“`
sudo xcode-select -s

元記事を表示

【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

元記事を表示

OTHERカテゴリの最新記事