iOS関連のことを調べてみた2023年10月04日

iOS関連のことを調べてみた2023年10月04日

最新版のVisionProエミュレーターのインストール方法

# はじめに
VisionOSのRuntimeはXcode-betaとは別で新しいバージョンが公開されているので、それを実行するためにXcode-betaで有効化する方法をまとめました。

# Xcode-betaのインストール
VisionProのエミュレーターの使用にはXcode-betaのダウンロードが必要になります。
Xcode-betaの使用にはMacが必要です。

[Apple – Developer – More Downloads](https://developer.apple.com/download/all/)

こちらのサイトの検索窓からXcode-betaと検索してインストールしてください
詳しいインストール方法についてはこちらの記事をご覧ください
[VisionProのエミュレーターのインストール方法 -kanakanho](https://qiita.com/kanakanho/items/4dd7448aad63a6beb20a)

# VisionOS Runtimeのインストール

VisinOSのRuntimeも先ほどと同じサイトからダウンロードで

元記事を表示

【SwiftUI】iOS17からの触覚フィードバック

# はじめに
iOS17で`sensoryFeedback`というメソッドが追加されました。
これを使うことでSwiftUIで触覚フィードバックを実装することができます。

# 実装
“`swift
import SwiftUI

struct ContentView: View {
@State private var start = false
@State private var stop = false
@State private var alignment = false
@State private var decrease = false
@State private var increase = false
@State private var levelChange = false
@State private var selection = false
@State private var success = false
@State private var warning = false

元記事を表示

What’s New from CircleCI – 2023/10/03

CircleCIは日々進化していますが、その変化に追いつくのは大変ですよね。
What’s New from CircleCI を毎週チェックして、CircleCIの最前線をキャッチアップしてくださいね!

[< What’s New from CircleCI – 2023/09/26](https://qiita.com/CircleCIJapan/items/26c88c03513af66e25e9) | 今週

# ブログやスライド、ビデオ
## ユーザーからの声
– [pt-online-schema-change の実行が必要かどうか判断するタイミングをより早くした話](https://tech.repro.io/entry/2023/10/03/090000) by Repro
– MySQLのスキーマ変更を行う際に、pt-online-schema-change の実行が必要かどうかを判断するタイミングをより早くするために、テスト環境でのスキーマ変更を自動化した話です。
– [ココナラiOSアプリの最近の取り組みと今後の取り組み](https://zenn.de

元記事を表示

SwiftUIでのページ遷移デザイン

SwiftUIで開発の初めにページ遷移の土台を作る機会があったのでこんな感じに作ったので載せて起きます。
作り方の好みもありますので参考程度で。
環境はiOS16で作成しています。

## デモ画像

![sample.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35973/c078d60f-3a2a-44b5-5331-8aeb98d5cfaf.gif)

## 特定のViewを開いて開発する

Previewで実装と絡めた開発をしていくのにも限界があります。
特に毎回画面遷移して作業するとトライ&エラーの効率が悪く、特定のViewを開いて開発をしたいことが多く出てきます。
そういった事情から特定のViewを指定してシュミレータで作業できるように作りました。
コードの上部分の`destination`で指定して開きます。

“`Swift
var destination: Destination? = nil
//var destination: Destination? = .TodoLis

元記事を表示

iOSシュミレーターがUnable to boot the Simulator. で起動しない時の、もう一つの解決法

# はじめに
![Screenshot 2023-10-03 at 10.16.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167220/461885b5-9d66-1d63-5dd9-c0c6b942d2da.png)
Flutter開発をしていてある日突然、「Unable to boot the Simulator.」というエラーが表示され、iOSシュミレーターが起動しなくなった!!!
VSCodeでもAndroid Studioでも起動しない!!:scream_cat:

これは由々しき事態である。

# よくみる解決法では無理だった

https://weblog.noanoachan.net/xcode-simulator/#toc6

https://zenn.dev/shinkano/articles/75c7582a04a630

検索してよく見かけるのは?のSimulatorのキャッシュを削除する方法です。
が、なぜか私の場合`About this Mac > Storage

元記事を表示

【SwiftUI】Menuに赤いボタンを追加する

# はじめに
SwiftUIのMenu内に「削除」ボタンを実装しようとした時に、
削除ボタンの色は赤くしたかったのでtintやforgroundStyleなどで色変更しようとしてもできなかったので方法を記録しておきます。

# 実装
Buttonのルールを`.destructive`にするとボタンが赤くなります
“`swift
Menu {
Button(role: .destructive) {
// 処理
} label: {
Label(“削除”, systemImage: “trash”)
}
} label: {
Image(systemName: “ellipsis”)
}
.foregroundStyle(.secondary)
“`

# ダメな例
“`swift
Menu {
Button {
// 処理
} label: {
Label(“削除”, systemImage: “trash”)
}
.foregroundStyle(.r

元記事を表示

iOS, Androidエミュレータにファイルを転送するにはドラッグアンドドロップすればOK

ふと試したらあっさりできて感心した
一応仕事でスマホアプリ開発していたこともあったのに初めて知りました

# Android
Downloadsにコピーされる
![スクリーンショット 2023-10-01 22.33.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352532/e9fea86c-3d58-7977-6974-dea33d24f038.png)
![スクリーンショット 2023-10-01 22.34.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352532/431cd565-5c89-d5b1-0cd5-79d68e63c3a4.png)
![スクリーンショット 2023-10-01 22.34.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352532/5af3eda7-1498-6925-9f6

元記事を表示

【iOS】アプリアイコンをさくっと作成する方法

アプリのアイコンが付いていないとコードを書く気が出ないという時ってありますよね。そんなときに、とりあえずそれっぽいアイコンをさくっく作成する方法のご紹介です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77444/bf1c0c89-31cf-fbd1-2a8a-db804c0c889a.png)
↑ やる気がでないやつ

# アプリアイコンの作成の流れ
1. アイコン画像を表示するViewの作成
1. Viewのスナップショットをファイルに保存(1024×1024ピクセル、透過PNG)
1. 画像ファイルをXcodeのAppIconアセットに設定

## アイコン画像を表示するViewの作成
[SF Symboles](https://developer.apple.com/jp/sf-symbols/)を使って適当なアイコンをViewに表示して、背景色にグラデーションをかけるだけです。背景色にグラデーションを付けるのはiOS16から使えます。
![image.png](https:

元記事を表示

SwiftUIで下から出てくる選択肢アラートの実装方法

今回は下から出てくる選択肢アラートの実装をしてみようと思います。

普段はAndroidの開発をしています。
AndroidにはそういったUIはないので最初名前が何て言うのか調べました。

ActionSheetと、言うみたいです。

ですが、SwiftUiでは別の名前になってました。

confirmationDialogという名前だったので、こちら使用しています。

“`SampleAlert.swift
struct SampleAlert: View {
@State private var showConfirmationDialog = false

var body: some View {
VStack {
Button(“SampleConfirmationDialog”) { showConfirmationDialog = true }
}
.padding()
.confirmationDialog(“”, isPresented: $showCo

元記事を表示

DateFormatterの和暦バグの解決法を考える

# はじめに
DateFormatterとは、SwiftでDate型の日付を文字列に変換するときに使用するオブジェクトです。
実はこのDateFormatter、使い方を誤ると**思わぬバグを生み出してしまいます**。
※ 現在時刻は`2023/9/30 12:34`だとして説明します。
“`swift
let date = Date() // 現在時刻
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = “yyyy/M/d HH:mm”
let r = dateFormatter.string(from: date)
print(r) // 2023/9/30 12:34
“`
上記のコード、一見問題なさそうに見えますよね……?
しかし、実行する端末の設定によっては、`0005/9/30 12:34`と表示されてしまうバグを含んでいるのです。 「設定」アプリを開いて「一般>言語と地域>暦法」を「和暦」に設定した端末でこのコードを実行すると、そのバグを観測できます。
暦法の設定

元記事を表示

【XcodeCloud】XcodeCloudで実行した時はBuildPhasesのRunScriptを実行したくない

# はじめに
SwiftLintをRunScriptでビルドしてたのですが、XcodeCloudでの実行時間がめっちゃ長くなっちゃうので、
XcodeCloudで実行された時は処理をスキップしたいことがありました。
その時にRunScript上でXcodeCloudで実行されていることを検知する環境変数を知ったので記事にしておきます。

# 実装
“`sh
if [ “$CI_XCODE_CLOUD” == “TRUE” ]; then
echo “✅ XcodeCloudで実行されました”
else
echo “❌ XcodeCloud以外で実行されました”
fi
“`

これを使ってXcodeCloudの時は処理をスキップしたい時はこうなります。

“`sh
if [ “$CI_XCODE_CLOUD” == “TRUE” ]; then
exit 0
fi

# 行いたい処理
“`

# おわり
XcodeCloudの実行時間が15分 → 3分に短縮されました!

# ドキュメント
https://developer.apple.com/documenta

元記事を表示

iOS17 + XCode15 + Swift + OpenCV

iphone15も出たし、iOSでOpenCVを使いたいと思い調査したところ、Objective-C関連は何もしなくても良くなってるみたい。Podもあるから楽勝!と思いきや、エラーがでて使えなかったので、コツコツとMakeしたら動くようになったのでメモしておきます。

# 試した環境
Macbook Air M1
Xcode15
MacOS Ventura 13.5.2

# 事前準備
Cmakeをインストール

brew install cmake

Python3をインストール

brew install python3

# OpenCVのMake
Gitから落としてくる

git clone https://github.com/opencv/opencv.git -b 4.6.0
git clone https://github.com/opencv/opencv_contrib.git -b 4.6.0

Make実行。Targetは13以降で使いたいので13に設定してるが適宜変更

python3 

元記事を表示

【Swift】配列から特定要素を削除

# はじめに
配列から特定の要素を削除したい時に見る用記事

# 実装
基本はこっちを使う
```swift
array.removeAll { $0.id == "001" }
return array
```
:::note alert
エラー
```
Cannot use mutating member on immutable value: 'xxx' is an immutable capture
```
:::

このようなエラーが出る場合はこっちを使う

```swift
let newArray = array.filter { $0.id != "001" }
return newArray
```

# 参考記事
https://softmoco.com/swift-basics/swift-array-remove.php

元記事を表示

UIKitとSwiftUIのViewの描画周りで気をつけること

## 気をつけることと両者の違い
結論から言うと、気をつけるべきことは、`クラスの性質`と`構造体の性質`に注意するということ。
また、両者の違いは、主に`UIkitはクラスでViewが作成され、SwiftUIは構造体でViewが作成される`ことである。

## このトピックにおけるUIKitの性質
- クラスの生成
- 通常、クラスで作成したインスタンスは、アプリのライフサイクル内で一度生成されると、(自分でインスタンスを破棄するコードを書くなど以外で)`そのインスタンスはほとんど破棄されることはなく保持される。`そのため、`データや設定が安定して維持される。`

- いつクラスのインスタンスが破棄されるのか?
- 通常は、`ViewController自体が破棄されるときに一緒に破棄される。`
- 破棄されるタイミングの具体例
- ユーザーが画面上の戻るボタンを押して前の画面に戻ると、現在のビューコントローラーが破棄される。
- メモリ不足の状況下で、システムがビューコントローラーとそのビュ

元記事を表示

Coordinatorクラスについて簡単にアウトプット

## Coordinatorとは?
- UIKitでのイベントをSwiftUIで管理する(取得するなど)ために作成するクラスのこと。
- 先述した通り、主な役割としては、`UIKitのイベントやデータの受け渡しをSwiftUIに伝える。`
- (ラップされた)UIKitのViewの`delegate`や`target action`をハンドリングしたい場合、structではハンドリングできないため、Coordinatorクラスという仕組みが採用されている。

- Coordinatorクラスはデフォルトで存在しないため、独自で実装する必要がある。一般的にはCoordinatorという命名である。

## 主なメソッド
`makeCoordinatorメソッド`
- makeCoordinatorメソッドは`makeUIViewメソッドよりも先に呼ばれる`ので、そこ(makeCoordinatorメソッド内)でCoordinatorを作成する。

- その後、makeUIViewメソッドやupdateUIViewメソッドなどで渡されるcontextにco

元記事を表示

UIViewRepresentableプロトコルについて簡単にアウトプット

## UIViewRepresentableプロトコルとは?
UIKitのViewや機能をSwiftUIでも使えるようにする`ラッパー的役割`を持つ。

ちなみに、ラップして違うフレームワークを使用可能にする組み合わせは下記である。
- UIKitをSwiftUIで使用 → UIViewRepresentableプロトコル
- SwiftUIをUIKitで使用 → UIHostingControllerクラス

## 主なメソッド
- `makeUIViewメソッド`
- 表示するViewの初期状態のインスタンスを作るメソッド。SwiftUIの中で使用したいUIKitのViewを戻り値として返す。
- 最初の一回しか呼び出されない。そのため、Viewを更新する場合はupdateUIViewメソッドに処理を定義する。

- updateUIViewメソッド
- 表示するViewの状態が更新されるたびに呼び出され、更新を反映させる。
- 例えば、UIViewRepresentableプロトコルに準拠させた構造体のプロパティなどが変更されたときに呼び出さ

元記事を表示

モバイル端末の発熱情報をUnreal Engine上で取得する

iOSとAndroid端末の発熱状況をUE上から参照する方法を調査してみました。

まず、iOS/Androidそれぞれのネイティブプラットフォームの発熱情報について軽く説明します。

# iOSの熱ステータス

参考元:
https://developer.apple.com/documentation/foundation/processinfo/thermalstate

* nominal : 通常範囲
* fair : やや上昇している
* システムの対策:ファン開始、すぐに必要されないバックグラウンドタスクの停止、等
* 推薦されたアプリの対策:バックグラウンドタスクの削減(例:バックグラウンドダウンロードの停止、DBインデックス更新の停止、等)
* serious : 高い
* システムの対策:ファンがフルスピードで稼働、パフォーマンスに影響するリソース削減(例:I/O,CPU,GPUの使用の削減、60FPS→30FPSにカット)
* 推薦されたアプリの対策:I/O,CPU,GPUのようなシステムリソースの使用の削減(例:グラフィック品質設定を低に

元記事を表示

【SwiftUI】バッジの見た目を変更する

# はじめに
iOS17から`badgeProminence`というバッジの見た目を変更するメソッドが追加されていたので使ってみました

# 実装
### standard
```diff_swift
List(0..<10) { index in Text(index.description) .badge(index) } .badgeProminence(.standard) ```

### decreased
```diff_swift
List(0..<10) { index in Text(index.description) .badge(index) } .badgeProminence(.decreased) ``` iOS17以降から使えるObservationについて

## はじめに
iOS17以降から`Observation`という新たな状態監視のFrameworkが使用できるようになりました。
しかし、状態監視のFrameworkとしてはすでに`Combine`が存在しています。
今回は新たに登場した`Observation`と`Combine`を比較しながら、`Observation`について見ていきます。

## `Observation`について
まずは、`Observation`と`Combine`の書き方を比較していきます。
今回はボタンをタップすると表示されている数字がインクリメントしていくViewをそれぞれ作成して比較していきます。

### `Combine`による状態監視
`CounterViewState`は`ObservableObject`を実装し、`@Published`を付与したプロパティの値を監視しています。
`CounterView`は`StateObject`を使って`CounterViewState`を監視可能なオブジェクトとしてインスタンス化することで、`CounterViewState`の状態が変化した際に

元記事を表示

モバイルアプリのアクセシビリティ対応(スクリーンリーダー、VoiceOver)

# はじめに
以前に[プロジェクトで行ったVoiceOver対応(読み方の変更)](https://qiita.com/repepe2en/items/42c8dc1e679a31c96c24)を投稿しましたが、今回はアプリ全体で行った対応について、目標にしているところとその対応方法をまとめて備忘録としてまとめます。

自分の参加しているプロジェクトでは[Apache Cordova](https://cordova.apache.org/)というモバイルアプリ開発向けのフレームワークをベースに開発を行っています。
技術的には3割ほどネイティブの実装で他はwebの技術を利用しています。
なので、iOS,Androidとタグにありますが、この記事ではHTML,TypeScriptでの対応方法です。

# 方針

[Web Content Accessibility Guidelines (WCAG) 2.0](https://waic.jp/translations/WCAG20/Overview.html)に準拠したアプリの実現。
[WAI-ARIA](https://develope

元記事を表示

OTHERカテゴリの最新記事