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

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

【Flutter】ListViewを無限ループスクロールできるようにしてユーザーを幸せにする。

どうも、個人でアプリ開発をしているYuKiOです。

「最高にかっこいいメモアプリHacker Memo」や「社会や街の安全に貢献するためのプラットフォームアプリみんなのチカラ」などアプリを15本リリースしています。

今回の記事は、ListViewで作成したボタン一覧を無限ループでスクロールする方法を紹介したいと思います。

色々調べましたが、なかなか良い解決策がなかったので記事にしてみました。

もし、もっと楽な方法があれば、教えて欲しいです。

## 実現したかったこと
水平にスクロールして選択できるカテゴリ選択ボタンリストがあります。左右どちらにスクロールしても、前後が繋がってリストが表示され続ける無限ループのに表示したい考えました。無限ループにすることで、両端のボタンに素早くアクセスできるようになることで快適になり、ユーザーが幸せになると考えたからです。

例えばリストのアイテム数が決まっている場合や、そこまで数が多くない(多くても20くらい)ことが想定される場合に限定される要望だと思いますが、以下のようにカテゴリ選択で今回は実装しました。

![IMG_2094.jpg](

元記事を表示

【TCA】TCAFeatureActionが使用されていない時はSwiftLintで警告を出す

# はじめに
TCAFeatureActionについては以下の記事を見てください

https://github.com/pointfreeco/swift-composable-architecture/discussions/1440

https://zenn.dev/kalupas226/articles/e214cf384a7b84

簡単にいうとActionを種類別に分けて、見やすさを向上させよう的なことです

# SwiftLintの設定
https://qiita.com/SNQ-2001/items/e202893e37898bb0c721

https://qiita.com/SNQ-2001/items/8a4920a464b0cc3203fa

https://qiita.com/SNQ-2001/items/3bd22c9444910aa60fe7

# 実装
`.swiftlint.yml`に`custom_rules`という項目を追加します
“`.swiftlint.yml
disabled_rules:

opt_in_rules:

元記事を表示

RxSwiftの.share()オペレーターの挙動についてまとめた

### .share()について

– ColdからHotに変換するオペレーター
– Observableを複数のサブスクライバーで共有することができる

“`swift
public func share(replay: Int = 0, scope: SubjectLifetimeScope = .whileConnected) -> Observable {
switch scope {
case .forever:
switch replay {
case 0: return self.multicast(PublishSubject()).refCount()
default: return self.multicast(ReplaySubject.create(bufferSize: replay)).refCount()
}
case .whileConnected:
switch replay {
case 0: return ShareWhileConnected(source: self

元記事を表示

FirebaseCrashlyticsの導入、クラッシュレポートが作成されない

## 事象
クラッシュを起こしてもクラッシュログが作成されず、FirebaseコンソールのCrashlyticsトップ画面から切り替わらない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245300/8ffe7ea7-05f3-b6c2-dc53-a1055c833b98.png)

クラッシュトリガーはドキュメントのものを利用
“`HogeSwiftUIView.swift
Button(“Crash”) {
fatalError(“Crash was triggered”)
}
“`

## 結論
SPMでFirebaseを追加した時、Targetを選択していなかったため、Crashlyticsがプロジェクトに組み込めていなかった。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245300/e41352d0-c482-6eb8-ed60-ff922a2e4416.png)

元記事を表示

新たに追加されたUIViewController viewIsAppearingの使い方

# 概要
新たに追加されたUIViewControllerの`viewIsAppearing(_:)`について説明します。

https://developer.apple.com/documentation/uikit/uiviewcontroller/4195485-viewisappearing

viewIsAppearingは、画面の初期表示時にUIをアップデートしたい時に使うものになっています。

## viewIsAppearingが使える環境について
viewIsAppearingはiOS 13から使えるAPIになります。ですが、開発環境がXcode 15ではないと使えないという、iOSとしては珍しい、後方互換がサポートされている新規APIになります。

## viewIsAppearingの特徴
[Choosing the appropriate callback](https://developer.apple.com/documentation/uikit/uiviewcontroller/4195485-viewisappearing#4230935)の図を見れ

元記事を表示

【Xcode】ReleaseとDebugでアプリアイコンを分ける

# はじめに
昨日、「ReleaseとDebugでBundleIDを分ける」という記事を書きました。
今日は、「ReleaseとDebugでアプリアイコンを分ける」です。

https://qiita.com/SNQ-2001/items/32d49401b9e14f889c09

# やりかた
① アイコンを2種類用意します
![スクリーンショット 2023-10-05 21.35.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/1c9a6dc7-358e-ad36-2dfa-569e2591535e.png)

② 本番用のアイコンを`AppIcon`にセットします
![スクリーンショット 2023-10-05 21.35.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/8c75cf43-ab84-9da2-a514-39023d16a1db.png)

③ 左下の「+」を押し

元記事を表示

[Swift] swift-macro-testingでマクロのテストをより効率的に

先月、pointfreeから新たなライブラリである, swift-macro-testingが出ました。このライブラリを使ってみたところ、かなり便利だったので、今回は従来のマクロのテストコードで起こっていた不便な点と、swift-macro-testingを使用することでどういった点が便利になるのかなどを紹介していきたいと思います。

https://github.com/pointfreeco/swift-macro-testing

また、今回は`@PublicInit`マクロを例にしていきたいと思います。
`@PublicInit`は私のライブラリであるswift-dependencies-macroの中に入っているので、よかったらコードを見てみてください。

https://github.com/Ryu0118/swift-dependencies-macro

# 従来のマクロのテスト
まずは従来のマクロのテストフレームワークである`SwiftSyntaxMacrosTestSupport`を使用して,マクロのテストを書いてみます。

“`Swift
let macros:

元記事を表示

地方銀行でモバイルエンジニア向け社内勉強会を実施してみた

# はじめに
先日、社内で開催した「**モバイルエンジニア向けの社内勉強会**」が凄く実りがあったので、それについて書きました。
他の地銀や固い雰囲気のある会社さんで働いていらっしゃる方も、ぜひ社内で勉強会などをプレゼンするときに「北國銀行はやってますよ!」みたいに、この記事を積極的に使っていただけると嬉しいです。

# どんな会社?
我々デジタルバリューは金沢に本店がある「北國銀行」をはじめとする北國フィナンシャルホールディングスの一員で、システム開発を中心に仕事をしています。

![北國FHD.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2810912/c2c9916a-a444-5c5e-a976-b1cbb4e3428b.png)

銀行というと「半沢直樹」のイメージが強いかも知れませんが、北國銀行は全くそんなことがありません。
少し例を出すと、こんな感じです。
– 頭取とも会話する機会がある(何ならコーヒー飲みながら立ち話をすることもある)
– UNIQLOのTシャツとか髪染めもOK(勿論、

元記事を表示

【Xcode】ReleaseとDebugでBundleIDを分ける

# はじめに
ReleaseとDebugでBundleIDを分けることで端末に2つのアプリを共存させることができます。
Release環境とDebug環境で分けている場合、1つのアプリだと環境がごっちゃになってデータベースが壊れてしまう可能性も考えられます。

ですので、BundleIDで別アプリにして環境のごちゃごちゃを避けます

# やりかた
① プロジェクトを選択します
② ターゲットを選択します
③ 「Build Settings」を選択します
![スクリーンショット 2023-10-04 18.54.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/d9c8d87d-d1f7-f253-f141-b15cdd889ab7.png)

④ `Product Bundle Identifier`と検索します
![スクリーンショット 2023-10-04 18.56.34.png](https://qiita-image-store.s3.ap-northeast-1.amazon

元記事を表示

RealmSwiftのwhereにArrayで結合したQueryを利用する

SwiftはiOS17から[SwiftData](https://developer.apple.com/xcode/swiftdata/)が使えますが、今のプロジェクトはiOS16と決まっているので[Realm](https://github.com/realm/realm-swift)を使っています。
そんなRealmではNSPredicateでの検索は終わりwhereで検索する時代が来たそうです。

よーし試してみるかと、よくあるQueryをappendして結合する昔ながらのQueryを作成しようとしたのですが、マニュアルを読み返してもやり方が不明です。

流石に最近は誰も使わないのか?そんな筈ないやろとRealmのIssueを探すとありました。

[Compound Array of Query #7731](https://github.com/realm/realm-swift/issues/7731)

結果としてRealmには実装がないそうです。
そうなると真面目に実装すると冗長なコードになるのが請け合いです。
Issueに投稿した方はサンプルコードも提供い

元記事を表示

【Swift】モーダル画面の下スワイプで画面を閉じる機能を無効にする方法

## はじめに
Modal画面を表示して、下スワイプで画面を閉じると、色々と都合が悪かったので、下スワイプで画面を閉じる機能を無効にしました。
忘れないために、備忘録を残します。

## 実装方法
“` Swift:
class ModalViewController {
override func viewDidLoad() {
super.viewDidLoad()

// ここを追記する
self.isModalInPresentation = true
}
}
“`

元記事を表示

Xcode15でCloud signing permission errorに遭遇

## Cloud signing permission errorに遭遇

Xcode15でアプリのアーカイブを作成してApp Store ConnectにOrganizerを使ってアップロードしようとしたら以下のようなエラーが発生しました。

“`text()
Cloud signing permission error
You haven’t been given access to cloud-managed distribution certificates.
Please contact your team’s Account Holder or an Admin to give you access.
If you need further assistance,
contact Apple Developer Program Support at https://developer.apple.com/contact/.
“`

Cloud signingってなんだろ?と思いながらなにかの権限が足りていないのかな?と思ってApp Store Connectで色々みてみ

元記事を表示

最新版の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:

元記事を表示

OTHERカテゴリの最新記事