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

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

Flutter(Dart)からGeminiを簡単に呼べるようになったので試してみる

## 動機

Dart3.0のアップデート記事をどこかで見たから。

## 本題

Googleの発表したAI Bard改めGemini を利用するためのパッケージ[google_generative_ai](https://pub.dev/packages/google_generative_ai) を触ってみる。

## サンプルを動かしてみる

### GeminiでAPIキー取得する

1. [Google AI Studio](https://ai.google.dev/tutorials/ai-studio_quickstart?hl=ja)を有効にする

法人アカウントの場合、早期アクセスアプリの有効化が必要。

Core Data Access Permissionsの許可が必要。

2. APIキーをCreateする

余談だが、[Gemini](https://gemini.google.com/?hl=ja)(本家)に聞いても教えてくれる。

### Flutterでアプリを起動する

“`bash
% git clone git@github.

元記事を表示

FlutterアプリをiOSエミュレーターで起動する

## 動機

起動手順だけメモ的に書いておく。

(同じ記事は星の数ほどある。)

## 本題

“` bash
# Flutterプロジェクトを作成する
% fvm flutter create flutter-playground –verbose
“`

“`bash
# iOSエミュレーターを起動する
# 今回はiPhone 15(iOS 17.0)を選択
% open -a Simulator

# Flutterの認識しているエミュレーターを探す
% fvm flutter devices
Found 3 connected devices:
iPhone 15 (mobile) • 1625B704-06DE-46E3-B905-2294D4E16509 • ios • com.apple.CoreSimulator.SimRuntime.iOS-17-0 (simulator)
macOS (desktop) • macos • darwin-arm64 • m

元記事を表示

【Xcode】Xcode内にドキュメントを簡易表示する

# はじめに
プロジェクトが大きくなってくると、ドキュメントを見ないとどのような処理をしているのかわからないものもでてくる可能性があります。

そんな時、定義元に行かずとも、ドキュメントを閲覧できたらいいですよね。

使用側でドキュメントを簡易表示する方法を紹介します。

以下のような関数があり、このドキュメントを見たいとします。

![スクリーンショット 2024-02-22 22.18.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/d283062d-bb83-4d08-aeca-ca5a85caca3a.png)

# やりかた1
① ドキュメントを表示したい関数を右クリックします。
② 「Show Quick Help」を押します。

![スクリーンショット 2024-02-22 22.23.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/194d0717-4dfd-d8f

元記事を表示

【SwiftUI】@State がない カスタム ViewModifier を無邪気に View extension にしていいのだろうか謎

WWDC2022 SwiftUI の QA 抜粋です。

“`
What’s the difference between a custom ViewModifier vs View extension

Q: What’s the difference between a custom ViewModifier (without DynamicProperty) that uses some built-in modifiers in body(content:), and a custom View extension func that just use those built-in modifiers?

Similarly, what’s the difference between a custom ViewModifier with some DynamicProperty and a custom View with some DynamicProperty (also has a @ViewBuilder content property to receive co

元記事を表示

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 } =

元記事を表示

OTHERカテゴリの最新記事