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

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

【SwiftUI】ScrollViewの高さを動的に変更する方法

## はじめに
記事をお読み頂きありがとうございます!Reeenと申します。
私は現在、株式会社ゆめみで内定者アルバイトとしてiOSアプリの開発を行っています。
そこでScrollViewの縦方向の無限拡張で少し詰まり、この方法を発見したのでアウトプットをしようと思いました。
少しでも参考になれば幸いです?‍♂️

## 動作環境
Swift: 5.7.2
Xcode: 14.2
iOS: 15.0+

## 内容
まず前提としてSwiftUIのScrollViewでは以下のようなコードを書いても内容に合わせて自動で高さが調節されることはなく、無限拡張(.infinityのような挙動)になってしまいます。

“`swift
ScrollView {
Rectangle()
.fill(.purple)
.frame(width: 300, height: 300)
}
.border(.black, width: 5)
“`

【Swift】CIFilterで画像にノイズを合成する

# はじめに
最近、画像加工系のアプリを作っているのでCIFilterを使うことが多いです。
CIFilterを使ったアウトプットをしていこうと思います。
今回は画像にノイズを追加するコードをやってみます。

# 元画像
![icon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/287cebbc-c32c-defe-fa7a-bc047bd34519.png)

# 生成されるノイズ画像
![outputImage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/49e1bfcb-b07a-4b4c-fece-86a84da14c18.png)

# 実装
“`swift
import SwiftUI

struct ContentView: View {
@State private var displayImage: UIImage?

private let ima

元記事を表示

【初心者】FlutterでiOSアプリ画面を見ながら開発する方法

いざFlutterでiOSアプリを開発しようと重い腰を上げたら、環境構築からつまずいた、、

そんな人向けの備忘録的な記事です。

## 困ったこと

– ChromeやmacOSのUIなら起動できるが、iOSを見ながら開発が上手くできない
– `open -a Simulator` でできることもあれば、できないこともある。なぞだ

## 解決方法

1. `open -a Simulator` でXcodeのSimulatorをまず開く
2. 上のメニューから「File > Open Simulator > iPhone 14 (好きなデバイス)」を選択
3. Simulatorを開いたまま、VSCodeで「mytest (createしたディレクトリ) > lib > main.dart」を開き、デバッグの拡張機能を開く
4. デバッグで「Flutter (iPhone 14) 」を選択

![Untitled (14).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/899381/a020703

元記事を表示

アプリがバックグラウンドになるとcopyNextSampleBufferがnilを返す話

iOSで動画をループで回して画像処理を行う際にcopyNextSampleBufferを使ったことがあると思います。

このcopyNextSampleBufferが曲者でアプリがバックグラウンドに移行するとnilを返します。

[copyNextSampleBuffer](https://developer.apple.com/documentation/avfoundation/avassetreaderoutput/1385732-copynextsamplebuffer)のドキュメントによると、
copyNextSampleBufferはエラーがある場合にnilを返すので[AVAssetReaderのstatus](https://developer.apple.com/documentation/avfoundation/avassetreader/status)を見てねとのことです。
実際のコードでは`reader.status = .failed`を確認するだけで十分動作することが確認できています。
そんなわけで今回は動画をresumeする処理を書いてみました。

##

元記事を表示

【swiftUI】iOSアプリ公開の手順

## はじめに

近いうちにiOSアプリケーションを公開したいと思っているので、参考までに公開するまでの手順を調べてみました!

iOSアプリをApp Storeに申請する際に必要な手続きや準備するべき項目をまとめています。
一般的な手順は以下のとおりですが、最新のガイドラインや要件はAppleの公式サイトで確認した方が確実だと思います。

#### 手順

1. **Apple Developer Programへの登録**
2. **App IDの作成**
3. **プロビジョニングプロファイルの作成**
4. **証明書の作成**
5. **アプリケーションでの設定**
6. **バージョンとビルド番号の設定**
7. **App Store Connectへのアプリの追加**
8. **アプリ情報の入力**
9. **スクリーンショットのアップロード**
10. **プレビュー画像のアップロード**
11. **レビューの申請**
12. **申請の確認と送信**
13. **審査待ちと通知**

これらの手順を順に進めていくことで、iOSアプリをApp Storeに申請する準

元記事を表示

【Xcode】シュミレーターのアニメーションをゆっくり動かす

# はじめに
Twitterを見ていたらシュミレーターをゆっくり動かすという方法を見つけたのでやってみました

https://x.com/emildzwonek/status/1696068726934716898

# やりかた
① 「Debug」を選択します
② 「Slow Animations」を選択します
![スクリーンショット 2023-10-11 22.39.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/57670e4a-43aa-d5c0-64fa-5b825466c5fa.png)

# こうなる
![Simulator Screen Recording – iPhone 15 – 2023-10-11 at 22.44.03.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/b184c740-43e0-d303-4d4f-1b844aed87ab.gif)

# お

元記事を表示

Datadog RUM で iOSアプリをUXモニタリングする

## はじめに
本記事では、DatadogのRUMの機能を、Xcodeで作成したiOSアプリに仕込む方法について解説します。

## Datadogの設定
Datadogの**UX Monitoring**メニューから**Real User Monitoring**を選択します。
![Screenshot 2023-10-11 at 14.39.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81226/cc454cb6-d042-be00-4b63-2b458c9c3898.png)

New Applicationをクリックします。
![Screenshot 2023-10-11 at 14.42.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81226/a9f7798b-8fbf-9dda-0ed0-c210f975f48e.png)

Application typeは「iOS」を選択します。Appli

元記事を表示

【SwiftUI】PhotosPickerで画像を選択した後、正方形に切り取りできるようにする

# はじめに
画像を選択した後に画像を切り取りたいことがあると思います。
`allowsEditing`というフラグをtrueにすることで選択した後に切り取りの画面に遷移させることができます。

# 実装
“`swift
import SwiftUI

public struct PhotoPickerView: UIViewControllerRepresentable {
@Environment(\.dismiss) private var dismiss: DismissAction

@Binding private var image: UIImage?

public init(image: Binding) {
self._image = image
}

public func makeCoordinator() -> Coordinator {
Coordinator(self)
}

public func makeUIViewController(con

元記事を表示

Swiftでバケツツールの塗りつぶし

# Swiftでバケツツールの塗りつぶし

ペイントアプリのバケツツールのように、閉じた領域を指定した色で塗りつぶす操作を、[Accelerate frameworkのflood fills](https://developer.apple.com/documentation/accelerate/vimage/vimage_operations/applying_a_flood_fill_to_an_image/applying_flood_fills_to_an_image?changes=___11&language=objc)を用いて簡単に実現できます

![Frame 293.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214313/3970d20a-1641-33db-6cb3-8c1c0b43de2f.png)

# 実装
CGImageをvImageに変換し、vImageFloodFill_ARGB8888を使って、塗りつぶしを始める点を含む閉じた領域を指定した色で塗りつぶします

元記事を表示

[iOS17]Visionで写真の前景をトリミング

# Visionで画像の前景をトリミングする
iOS17からVisionに画像の前景をトリミングするAPIが追加されました
写真アプリで長押しするとハイライトされるアレです!
写真アプリにはiOS16から入っていたのですが、iOS17からVisionにAPIが入ったので、アプリにこの機能を簡単に組み込めるようになりました

![Frame 288.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214313/219b9f77-2888-c405-6347-1fdda4844595.png)

WWDC23のセッション↓

https://developer.apple.com/videos/play/wwdc2023/10176/?time=165

# 前景を全て含むマスク画像を作成する
これだけのコードで前景のマスク画像を作成できます

“`swift
func makeMask(inputImage: CIImage) -> CIImage {
let request = VNGenera

元記事を表示

【Flutter】iOSの生体認証の処理が失敗した時に表示される『パスコードを入力する』を消す方法

# はじめに
業務で生体認証系のパッケージで[local_auth](https://pub.dev/packages/local_auth)を触る機会があり、セキュリティの観点からiOSの生体認証の処理が失敗したらパスコードを入力できないようにしたかったので実装しました。
ドキュメントに方法が記述されておらず、私が少しハマったため他の人が困らないように、と私のために備忘録として残しておこうと思います。
# 結論
生体認証の処理を実行時、連続で失敗すると『パスコードを入力する』ボタンが表示されますが、`IOSAuthMessages`クラスの`localizedFallbackTitle`プロパティを空文字にすることで『パスコードを入力する』を表示しないようにすることができます。

:::note warn
あくまで2023年10月時点での情報のため、パッケージのアップデートによる破壊的変更や、Flutterのバージョンによって実装方法が変わる可能性がありますので参考程度にしていただけたらと思います?‍♂️
:::
# 執筆時の環境
– Flutter3.13.2
– local_au

元記事を表示

【iOS】輸出コンプライアンスの回答を省略する

# はじめに
AppStoreに審査に出す際やテストフライトに出すときなど、毎回輸出コンプライアンスの設定をするのが面倒なので聞かれないように設定します

# やりかた
`Info.plist`にITSAppUsesNonExemptEncryptionを追加して、`NO`を設定します
“`Info.plist


ITSAppUsesNonExemptEncryption

“`

![スクリーンショット 2023-10-09 17.56.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/

元記事を表示

SwiftUI特定のアイテムまでスクロールする方法

今回は`ScrollViewReader`を使用して特定のアイテムまでスクロールする実装です。

実装サンプル
“`SampleScrollViewReader.swift
struct SampleScrollViewReader: View {
@State private var tee = [“緑茶”, “烏龍茶”, “ほうじ茶”, “ジャスミン茶”, “麦茶”, “烏龍茶”, “ほうじ茶”, “ジャスミン茶”, “麦茶”, “烏龍茶”, “ほうじ茶”, “ジャスミン茶”, “麦茶”, “烏龍茶”, “ほうじ茶”, “ジャスミン茶”, “麦茶”, “烏龍茶”, “ほうじ茶”, “ジャスミン茶”, “麦茶”, “烏龍茶”, “ほうじ茶”, “ジャスミン茶”, “烏龍茶”, “ほうじ茶”, “ジャスミン茶”, “烏龍茶”, “ほうじ茶”, “ジャスミン茶”, “烏龍茶”, “ほうじ茶”, “ジャスミン茶”, “烏龍茶”, “ほうじ茶”, “ジャスミン茶”, “烏龍茶”, “ほうじ茶”, “ジャスミン茶”]

var body: some View {

元記事を表示

Swiftで書かれたAffineTransformのコードがあったので姿勢推定のHeatmapの処理を実装してみた

OpenCVをXcodeのバージョンに合わせてビルドするのがめんどくさい。

このめんどくいを解決するには、姿勢推定のHeatmap処理がOpenCVに依存しているのを解決する必要がある。
ここでコアな関数は[AffineTransform](https://docs.opencv.org/4.8.0/d4/d61/tutorial_warp_affine.html)。
実装のとっかかりがなかったので放置していたところ、Swiftで書かれたコードを見つける。

[Perspective transform from quadrilateral to quadrilateral in Swift](https://rethunk.medium.com/perspective-transform-from-quadrilateral-to-quadrilateral-in-swift-5a9adf2175c3)

## 試しに以前C++のHeatmap処理をSwiftに書き直してみた

元のC++のコードはPaddlePaddleから持ってきた。
https://github.com/P

元記事を表示

【Xcode】特定のプロジェクトだけDerivedDataの場所を指定したい

# はじめに
PluginなどでDerivedDataの中にファイルを作成する機能があるライブラリなどがあります。
そのファイルを取得したくてパスを指定しても、DerivedDataのパスが設定によって変化してしまうのでプロジェクト単位でDerivedDataのパスを指定できないかXcodeを調べてたら見つけたので記録しておきます。

# やりかた
① 「File」を選択します
② 「Project Settings…」を選択します(もしくは「Workspace Settings…」)
![スクリーンショット 2023-10-08 16.58.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/a7439396-f9f1-adeb-4586-ce6209d9b9b6.png)

③ 「Custom Location」を選択します
![スクリーンショット 2023-10-08 17.03.02 1.png](https://qiita-image-store.s3.ap-north

元記事を表示

【SwiftUI】カメラを使いたい

# はじめに
SwiftUIでカメラを使いたいと思ってもUIKitをコネコネしないと使えず、
めんどくさいのでコピペで使えるコードを記事にしておきます

# 準備
Info.plistに以下の設定が必要です。

|Key|Value|
|-|-|
|Privacy – Camera Usage Description|任意の文字列|

![スクリーンショット 2023-10-07 19.45.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/dd195715-fec9-45d9-693c-44aca5ac91fe.png)

# 実装
“`swift
import SwiftUI

public struct CameraView: UIViewControllerRepresentable {
@Binding private var image: UIImage?

@Environment(\.dismiss) private var dismiss

元記事を表示

【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)

元記事を表示

OTHERカテゴリの最新記事