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

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

DispatchGroupを使っていたら、「Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)」が発生

SwiftのDispatchなんちゃらで毎回詰まっていますが、今回もまた詰まったので
記録に残しておきます。

多分記事にしておくくらいの苦労をしないと、また数ヶ月後にまた同じことで詰まる気がとてもしているからです!
(って自信持っていうことじゃないが笑)

原因は単純ミスです。

# 発生していたこと

DispatchGroupを使用していたところ、
`Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)`
というエラーが発生・・・

実際にプロジェクトで詰まったコードに似たサンプルを作りました。
Playgroundで実行できます。

`Thread.sleep(forTimeInterval: 0.5)`の部分は実際はAPIがリクエストされている箇所でしたが、
今回はsleepに差し替えています。

“`swift
import UIKit

func getItems(
itemIds: [String],
completionHandler: @escaping ([String]

元記事を表示

視覚拡張だけがARじゃない! -音のAR-

音をAR表現しみました。
昨年末に作ったコンテンツですが、せっかくなので共有します。

# 音のAR
最近AirPodsProを使い始めたのですが、**ヘッドトラッキング機能**に驚きました。
右側を向くと正面から聞こえていた音が左側から聞こえます。映画を観ている時、どんなに頭を動かしてもディスプレイから音が聞こえてきます。

**音の定位がずっと固定されているので、”その場にいる感”があり臨場感が高まります。**
(加速度センサーから頭の動きをトラッキングしているのですが、あの小ささの中に加速度センサーが載っているなんて驚きです…)

頭の回転運動を検出して音の定位を固定できますが、**歩き回った時にも音の定位を固定できたら面白そう**だと思い、音のARを作りました。

ちょうどショッピングモールの広場で、クリスマスツリーのイルミネーションやライトアップがされていたのでここに仮想音源を配置し、音のARを作りました。

![5.1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1006690/9

元記事を表示

authorizationStatusの備忘録

# はじめに
記事にするまでもないけど、よく忘れてしまうのでメモ。

# 環境
– iOS15
– Xcode13.1

# authorizationStatus
– kCLAuthorizationStatusNotDetermined
– 許可していない状態(初回インストール直後等)
– 次回確認でもこのケース
– この状態じゃないとOS標準ダイアログが表示されない
– kCLAuthorizationStatusRestricted
– iPadとかiPod等でGPS機能がついていない端末はこれが返される(らしい)
– kCLAuthorizationStatusDenied
– 設定→各アプリ→位置情報で「なし」を設定した時に返される
– 設定→プライバシー→位置情報サービスをOFFにした場合も返される
– どっちの設定起因で不許可になるか判別ができない
– 余談だがアプリからプライバシーまで一気に飛ぶスキームは無い(はず)
– kCLAuthorizationStatusAuthorizedAlways

元記事を表示

データセット用の顔画像をすぐに用意したい iPhoneの写真から、顔だけを数秒で100枚切り出す

#iPhoneのフォトライブラリから、顔だけを切り出す方法です

#データセットを用意するのは大変

たとえば機械学習などで、データセットとして顔写真や人体の写真が数千枚必要なケースがあります。
しかし、手動で顔写真を切り出すのは大変です。

#手元のiPhoneの写真が使えたら便利
たいていの人のiPhoneには、人の写っている写真が数百〜数千枚はあるでしょう。
それらの写真の顔だけを抽出できれば、迅速なデータセット作成に活かせそうです。

#[SemanticImage](https://github.com/john-rocky/SemanticImage)でiPhoneの写真を高速処理できる
[**SemanticImage**](https://github.com/john-rocky/SemanticImage)というラ

元記事を表示

[Swift]MKLocalSearchCompleterをPOIフィルタリングして改善してみる!

#はじめに
唐突ですが、あなたはパン屋を検索できるアプリを作っているとします。
オートコンプリートで簡単に検索できる機能を実装しようとしますが、関係のないお店が出てきてしまうかもしれません。
今回はパン屋のみを検索できるように改善してみようと思います。

**参考:WWDC19 What’s New in MapKit and MapKit JS**
https://developer.apple.com/videos/play/wwdc2019/236/

#開発環境
Xcode 13.0
Swift 5.5

#オートコンプリートとは
文字を途中まで入力すると、候補を出してくれる機能のことです。
Mapkitの[MKLocalSearchCompleter](https://developer.apple.com/documentation/mapkit/mklocalsearchcompleter)で簡単に実装できます。
#POIとは
Point Of Interestの略で、学校や動物園などの場所のことを示します。
![スクリーンショット 2022-01-11 23.27.45

元記事を表示

SwiftUI ScrollView でスナップ動作を実装

## 背景と宣伝

諸般の事情でカルーセルやスライドショー的なパーツを SwiftUI で実装する必要があったのですが、思ったより手軽に実装できなかったので、対応内容をまとめてみました。

今回の対応をベースに ScrollView + スナップ動作を簡単に実現するためのライブラリも作成しているので、とりあえずお試しといった場合は、こちらをどうぞ。

https://github.com/hugehoge/Snappable

## ゴール

![goal.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178830/37883ca3-1b0c-c22a-3132-9abdb0419abf.gif)

のようなスナップ動作を SwiftUI の ScrollView で実現します。

動作環境については、 iOS 15.0 以上の想定で進めます。

## 前準備

スナップ動作を実装する前に、横方向にスクロール可能な View 実装を用意します。

“`swift:前準備
struct Carousel

元記事を表示

最短で画像判別アプリを作成する(Swift)

#雲を判別したい

素人が見た目から何の雲かを判別するのは難しい。
雲が分かれば現在の天気や今後の天気がわかる。
気象学的に雲は10種類に分けることができます。これを十種雲形と言います。

今回最小限の労力・最短での画像判別アプリ作成を目標とします。

>![スクリーンショット 2022-01-11 18.24.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1261100/cf79623b-2ae7-09fc-3a4a-095e9b487332.png)
日本気協会HPより

#CoreMLで雲画像の機械学習モデルを作成

CoreMLの詳細は下記の記事を参照。
>https://qiita.com/PearlEarringMinion/items/a703eb3525e4aec6c46d

以下の分類でモデルを作成しました。
googleや気象研究者のtwitterから画像を収集し、1分類につき画像は15〜20枚学習させました。
![スクリーンショット 2022-01-11 18.27.34.

元記事を表示

超解像をとりあえず使ってみるなら、画像ドロップで使えるCoreMLモデルで

#画像を鮮明に大きくしてくれる超解像を手軽につかう方法です

オリジナル(左)と超解像結果(右)

#鮮明なコンテンツ提供に使える超解像モデル、使うのは難しい?

超解像を使えれば、より鮮明に、リッチなサイズで、
ユーザーに提供するコンテンツのクオリティをあげられる可能性がある。

しかし、超解像技術はどうやって使えばいいのだろうか?
複雑な計算が必要なんじゃないの?

#CoreMLなら画像ドロップでとりあえず使える

CoreMLモデルなら、画像ドロップでとりあえず超解像モデルが試せる。

#アプリへ

元記事を表示

モバイルシステム技術検定(MCPC)2級の対策

皆様

お久しぶりです。satolabです。
最終更新から1年以上の月日が流れました。現在私は某IT企業でモバイル系のインフラエンジニアをしております。

この1年は慌ただしく、qiitaをはじめ情報発信や趣味の開発に中々時間を割けておりませんでした。

現在も四苦八苦の日々ですが、少しずつ情報発信の方も再開出来ればと思っております。

前置きが長くなりましたが、今回はちょっとニッチな資格である”MCPC2級”の対策について紹介したいと思います。

私は11月に受験し、無事合格出来ました。

##概要

モバイルシステム技術検定(通称:MCPC)は、モバイルシステムの提案、構築、運用のために必要となる知識とそのレベルを明示することによって、IT関連技術者の学習意欲の喚起を行い、その学習成果を検定(試験)により測定することが可能となります。
(引用: https://www.mcpc-jp.org/kentei/gaiyou.html)
試験は年に二回あり、後半の回はCBT方式で受けることができます。私は最寄りのテストセンターで受験しました。
なおボーダーは公開されていません。

##対

元記事を表示

【SwiftUI】TabViewを使用した簡単なタブの実装方法

## コード

“`swift
struct ContentView: View {
var body: some View {
TabView {
FirstView()
.tabItem {
Image(systemName: “1.square.fill”)
Text(“First”)
}

SecondView()
.tabItem {
Image(systemName: “2.square.fill”)
Text(“Second”)
}

ThirdView()
.badge(5)
.t

元記事を表示

M1 MacにVSCodeをインストールする方法

# はじめに
Apple silicon(以下、M1)のMacにエディターのVisual Studio Code(以下、VSCode)をインストールする手順をまとめた

今までのIntel版ではスムーズにインストールできましたが
M1版では同じようにいかないため、その追加点を記載した

※ターミナルからコマンドでインストールできるみたいです

https://qiita.com/c60evaporator/items/aef6cc1581d2c4676504

# 手順
1.下記を開く

https://code.visualstudio.com/download

ここで注意して欲しいのが
一番右側のMacにある下記の写真の箇所
![スクリーンショット 2022-01-10 17.14.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603047/9c84798c-5fe5-5a17-5417-60639fded3af.png)
「↓ Mac macOS 10.11+」ではなく

その下の
“.z

元記事を表示

Realm accessed from incorrect thread.

#はじめに
去年からずっと悩んでいたRealmSwiftのエラーが最近、解決しました。

#原因
タイトルにもあるように`不正なスレッドからレルムにアクセスしたこと`が原因です。

Realmのデータベース(以下、DB)では、異なるスレッド間でのアクセスは保証されていますが、スレッドを跨いでアクセスするのは禁止されています。

“`swift
let realm = Realm() // メインスレッドで生成

DispatchQueue.global().async {
// メインスレッドとは異なるスレッド

realm.write {} // Realm accessed from incorrect thread.
}
“`

#沼った部分
自分はずっとRealmインスタンスだけが、スレッド間を跨いでアクセスしなければOKだと思っていて、その思い込みのせいで沼にハマってしまいました。

解決の糸口は、[Realm入門](https://www.amazon.co.jp/%E8%BB%BD%E9%87%8F%E3%83%BB%E9%AB%98%E9%80%9F%E3%

元記事を表示

SwiftUI の NavigationLink(destination:,isActive:) を活用する

## はじめに

SwiftUI において画面遷移を行うための簡単な方法は `NavigationView` と `NavigationLink(destination:)` を使うものです。
なんらかの条件を満たしたときに強制的に画面遷移を行うなど、より細かい制御を行いたい場合は、`NavigationLink(destination:, isActive:)` を使います。

オリジナルアプリを個人開発している中で、この `NavigationLink(destination:, isActive:)` の使い方に関してかなりハマった経験があったので、備忘録がわりに記事としました。

## 開発環境等
– MacBook Air (M1 2020)
– macOS Monterey Version 12.1
– Xcode Version 13.2.1 (13C100)
– iOS 15.0

## 基本的な使い方

`NavigationLink(destination: ,isActive:)` の典型的な使い方は次のとおりです。

“`swift:ContentView.s

元記事を表示

スマホでリアルタイムで物体を認識したいなら、CoreMLモデルにカメラフィードを食わせるだけでOK

#iPhoneのカメラでリアルタイムで物体認識をする方法です
![Jan-10-2022 13-44-52.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/59552d75-749b-820e-4e79-d605d9573c12.gif)

#スマホのカメラで物体認識をするのはかんたんなのか?
スマホのカメラにうつるものがリアルタイムで判別できれば、色々なアプリに応用できそう。
しかし、物体認識は機械学習でおこなうが、ちょっとややこしそうな気もする。
しかも、1枚の画像ならまだしも、リアルタイムでカメラの映像を認識するのは設定が多そう。

#CoreMLモデルにCaptureOutputを食わせるだけ
実は、それほどたくさんコードが必要なわけではない。
CoreMLモデルさえあれば、AVFoundationで取得したフレームをモデルに与えるだけで、リアルタイム物体認識ができる。

#手法

まずはCoreMLの画像認識モデルを入手する。
ネット上から入手できるので、好みのものを使おう。
[*

元記事を表示

Missing Purpose String in Info.plist File.

#はじめに
本業のアプリをAppStoreConnectにアップロードした際にリジェクトを喰らいました。

>Missing Purpose String in Info.plist File. Your app’s code references one or more APIs that access sensitive user data. The app’s Info.plist file should contain a NSLocationWhenInUseUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data.

簡単に訳すと、`Info.plistにNSLocationWhenInUseUsageDescription keyを追加してくれ!`と書いてます。

[NSLocationWhenInUseUsageDescription](https://developer.apple.com/do

元記事を表示

[iOS初心者向け]SnapKitとは

#概要
SnapKitの役割を、一言で表すと「調整」です。

調整というのは、ビューレイアウトのパディングや制約を簡単に設定できます。
こちらは、公式のライブラリではなくサードパティとなります。

https://github.com/SnapKit/SnapKit

#使い方
READMEのコードをお借りしますと

“`swift
import SnapKit

class MyViewController: UIViewController {

lazy var box = UIView()

override func viewDidLoad() {
super.viewDidLoad()

self.view.addSubview(box)
box.backgroundColor = .green
box.snp.makeConstraints { (make) -> Void in
make.width.height.equalTo(50)
make

元記事を表示

集中力を維持するためのポモドーロタイマー

学内の学生主体で進めるプロジェクトで「ユーザの集中力を持続させるシステム」を構築する機会がありました。

その際にポモドーロタイマーを用いて休憩時間を管理してくれるアプリを作成致しましたので、その内容について少しだけ触れさせて頂きます。

まず今回使用したのはReact Nativeです。iosとandroidの双方に対応できるクロスプラットフォームフレームワークを使用したいという理由から使用しました。

![Screenshot_20220110-015520_project1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2488482/7170aeca-6619-6bd5-c219-5c5e1918db46.jpeg)

上の画像が実際のアプリ画面です。
左上にタスクに取り組む時間を、右上に休憩時間を打ち込み、開始ボタンを押します。

指定した時間が過ぎると端末が振動し、テキストが変化します。

![Screenshot_20220110-015956_project1.jpg](https://

元記事を表示

Flutter pod install エラー

# Exception: Error running pod install
> Error: CocoaPods’s specs repository is too out-of-date to satisfy dependencies.
To update the CocoaPods specs, run:
pod repo update
>
> Exception: Error running pod install

iOSビルド時のエラー。dependencies updateすると発生することが多い。
クリーンしてうまくいくときもあれば、そうでない場合もあったが、これやっとけば正解な手順がわかったのでメモ。

# 手順

1. `ios/Pods/` と `ios/Podfile` `ios/Podfile.lock`手動で削除
1. (`sudo arch -x86_64 gem install ffi`), `arch -x86_64 pod install –repo-update` # M1 mac
1. `flutter clean`
1. `flutte

元記事を表示

[SwiftUI]Firebase Authenticationで認証機能を実装する方法[SPM]

## 実装する機能
今回はFirebaseを使用して認証機能を実装していく方法をご紹介します。
FirebaseはGoogleが提供するmobile Backend as a ServiceでmBaaS(エムバース)と呼ばれており、データの管理や認証周りを簡単に実装する事ができます。
今回はFirebaseを利用して、アプリへの認証記録やアカウント管理を端末側では行わず、Firebase側に任せた実装を行なっていきます。

https://firebase.google.com/?hl=ja

## 環境
・ macOS: Monterey
・ Xcode: 13.1
・ SDK Version: iOS 8.10.0

## 内容
・Firebaseへの登録
・FirebaseをSwift Package Managerでインストール方法
・Firebase Authenticationで認証機能を設定
・メールアドレスとパスワードによる実装
 ・Sign Inの実装
 ・Sign Upの実装
 ・Sign Outの実装
 ・パスワードのリセット(変更方法)
以上です。
#### 認

元記事を表示

[iOS初学者向け]UILabelとは?

##UILabelとは?
ドキュメントの文言をお借りすると、1行以上のテキストを表示するビューのことです。

##詳細
ドキュメントに色々書かれていて、何のことかわかりにくいかなと個人的には思ったのですが、要はテキストを表示するビューのことです。

Android的には、TextView的な。

こちらの型のプロパティを宣言し、さまざまなプロパティやメソッドを用いて値をセットし望みのViewにしていきます。

部分的な具体例ですが、下記を参考にしてみて下さい。

“`swift
private let hogeLabel: UILabel = {
let label = UILabel()
label.text = “文字をセット”
label.font = UIFont.systemFont(ofSize: 16.0)
label.textColor = UIColor.red
return label
}()
“`

#終わり
他にも色々なプロパティがあるので、調べながら使うと細かい調整ができそうです。

##参考
https:

元記事を表示

OTHERカテゴリの最新記事