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

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

iOSアプリの配信国を指定する

アプリの配信国はデフォルトでは全ての国配信されるようになっていますが、今はGDPR設定でデータの自己使用について同意を求める必要があります。

# GDPRについての記事

・GDPR(EU一般データ保護規則)とは?マーケティング担当者が対応すべき事項について

https://www.onemarketing.jp/contents/gdpr_re/

・GDPR罰金まとめ(2023年1月時点)

https://acompany.tech/privacytechlab/gdpr-fine/

・GDPR設定データの自己使用について同意を求める

https://support.google.com/admob/answer/10305345?hl=ja

・AdMobのGDPR対応

https://zenn.dev/iiinaiii/scraps/c3355353839c4a

・EU加盟国

https://www.mofa.go.jp/mofaj/area/eu/map_00.html

なのでAdMob

元記事を表示

【RxSwift】1回で効率よくイベントを流すshare()

# 目次
[1.share()とは](#1-share()とは)
[2.実例](#2-実例)
[3.おわりに](#3-おわりに)

# 1. share()とは
ひとことで言うと`1回でイベントを流せる機能`です。
つまりは、`1度subscribeしたものはもう2度とsubscribeしなくてOKな機能+1度でイベントを流し切る機能`です。
どう言うことか、実例を挙げてみていきます。
# 2. 実例
## `share()`を使わない例
まずは`share()`を使わずに書いてみます。(超非効率)
~~~swift: hasnoshare.swift
let subject = PublishSubject()
let observable = subject
.debug(“observable”)

observable
.bind(to: Binder(self) { _, value in
print(“サブスクライバー1: \(value)”)
})
.disposed(by: bag)

// 1回目のイベントを発行
subject.on

元記事を表示

ラーメン店検索アプリをFlutterで初めてリリースした話(Flutter×Google Maps API)

# はじめに
 先日、Flutterを用いて念願の**自作アプリをAppStoreにて公開**しました!
 初心者が開発を進めていく上で色々と知見を得たので、同じようにアプリ開発をやってみたい、という初心者の方向けに記事を書こうと思います。
正直私が何か新しいことを見つけました!みたいなことはほぼ無くて、基本的にここ参考にしたよ!っていう情報の受け売りだらけになってしまうのですが、それでも無いよりはマシかと思って執筆します。あと僕自身がこういう記事に非常にお世話になったので。
この記事が技術的な知見としてはもちろん、開発のモチベーションとしてでも良いので、少しでも誰かの役に立てば幸いです。

### この記事でわかること
– Flutterでの制作において参考にさせていただいた記事やサービス
– Flutter開発における、初心者におすすめの方法
– 開発における注意点・後悔

### この記事では省いたこと
– Flutterって何?みたいな説明(もっと分かりやすい記事が山ほどあるので)
– 具体的なFlutterプロジェクトの作成方法
– アプリ制作後に実際にストアに公

元記事を表示

Swift Style Guide リンク集

# Swift Style Guide リンク集

## ~~いつもの~~ Swift.org

* [API Design Guidelines](https://www.swift.org/documentation/api-design-guidelines/)

## Swift Style Guide

* [Google](https://google.github.io/swift/)
* [Airbnb](https://github.com/airbnb/swift)
* [Kodeco](https://github.com/kodecocodes/swift-style-guide)
* [LinkedIn](https://github.com/linkedin/swift-style-guide)
* [Eureka](https://github.com/eure/swift-style-guide)

古い・メンテされてなさそう

* [GitHub](https://github.com/

元記事を表示

【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:公式ドキュメ

元記事を表示

OTHERカテゴリの最新記事