iOS関連のことを調べてみた2021年09月19日

iOS関連のことを調べてみた2021年09月19日
目次

static let とは? 数行で解説

#static let に用いられる「static」とは
型のインスタンスではなく、
型自身に結びついているプロパティである。

同じstructからできた、インスタンス間で
同じプロパティの値を保持することが可能である。

スタティックプロパティは、宣言時に必ず初期値をもたせる必要がある。
持っていなければ、エラーが生じる。

##注意点は二点
・最初の宣言時に値を持たせる必要性がある。
・型自身に結びついているので、

“`
構造体.スタティックプロパティ
“`

で呼び出しが可能

###勉強したことをすぐ忘れるので、記しておきます。

元記事を表示

iOSDC Japan 2021 day1 参加セッションの感想

# はじめに
[iOSDC Japan 2021 前夜祭をタイムシフトで追いかけて](https://qiita.com/Sab_swiftlin/items/27a50a4e0970866e1a0b)
上記の記事に引き続き、iOSDC Japan 2021に参加した感想を書いていきます。
セッションの内容はアーカイブを見たいただきたいと思いますので、タイムシフトで見るセッションを決める参考にしていただけると幸いです。

# シームレスな体験を実現する本人確認フローの構築 〜家計簿プリカB/43でのeKYC開発実例〜

現在の業務では本人確認を行うことはないのですが、**シームレスな体験**というワードが気になって視聴しました。
元々ドコモショップで働いていた事もあり、本人確認という

オンラインで完結する本人確認をeKYCという事を初めて知ったので、それだけで知見でしたが、設計思想も興味深かったです。

外部SDKがいくつかある中で、ユーザーのリテラシーを考えて自前実装に踏み切ったの

元記事を表示

iOSDC Japan 2021 前夜祭をタイムシフトで追いかけて

![スクリーンショット 2021-09-18 9.37.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172991/4162088d-1f6b-7166-d709-9099acb644cd.png)

# はじめに
今年もこの季節がやってまいりましたね。
昨年に引き続きオンライン開催ですが、事前に[ノベルティ](https://photos.google.com/share/AF1QipNgMcolccO2Drjljj9sjjPTxWkkxupGIRGaP9NcVrSo3eoVqEOasjXPqlDDmmZeog?key=RTdlcnA3U3VaT2QzZHZoTjBlU3BBMlJQLVF0d2xB)が届いたりして相変わらずお祭り気分満載です。

残念ながら今回の前夜祭は仕事やプライベートでバタバタしていてリアルタイムに視聴できなかったので、夜中にタイムシフトで気になるセッションだけ急ぎ追いかけてみました。
その感想を雑に書いてみます。

# agoraを使ってライブ配信機能を1ヶ月半でリリー

元記事を表示

iOSDC 2021セッション資料まとめ

![iosdc.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188222/ce696294-d4c8-a8e1-bebb-adcb5748e6cb.jpeg)

iOSDC2021登壇資料、スライドのまとめです。
Twitter等で見つけ次第掲載しますが、もし資料を見かけた方or資料を公開した登壇者の方がいらっしゃいましたら、コメント等でお声がけください。
スライドや資料のリンクが見つかった場合はタイトルにリンクをつけてありますので、タイトルがリンクになっていない場合はまだ資料が見つかっていないものになります。
適宜更新を入れていく予定です。

# Day 0
## Track A
### [大規模リファクタリングの極意](https://speakerdeck.com/imairi/da-gui-mo-rihuakutaringufalseji-yi)

[fort

元記事を表示

kivy-iosのインストールでtoolchain build kivy python が途中までコンパイルできるのにエラーが出る時

#URLリンク切れかも
その場合、以下のディレクトリのファイルをいじる。
“作業ディレクトリ/lib/python3.x/site-packages/kivy-ios/recipes/freetype/\_\_init__.py”の8行目URLを
“http://download.savannah.gnu.org/releases/freetype/freetype-{version}.tar.bz2”
から
“http://download.savannah.gnu.org/releases/freetype/freetype-old/freetype-{version}.tar.bz2”
に変更すればコンパイルできる。

#アーキテクチャがarm64かも(m1 mac)
armになっていると、コンパイルが通らない。
homebrewのパッケージインストールからx86_64に切り替えてやり直す。(環境をどちらか一方に固定する場合)

armとx86_64環境を切り替えて使用したい場合は、下記リンクのようにするといいかもしれない。

https://zenn.dev/_lambda31

元記事を表示

【Flutter】ListViewでD&Dソートに対応しつつ並び順を保存する

###はじめに
Flutterだとドラッグアンドドロップで並べ替え可能なListView自体はかなり楽に実装できるのですが、ネイティブ同様(?)並び順の保存に関しては自前で作る必要があります(たぶん)。
もし適当に保存しようものなら並べ替えやアイテムの追加・削除でごちゃごちゃになってしまいます(経験済み)。
なんとなく一番簡単そうな方法を書き綴っておきますので良ければ参考にしてみてください(もっといい方法があればコメント頂けると嬉しいです)。
因みにFlutterは始めたばかりなのでおかしなところがあるかも知れません。

それとListView自体の実装とSQL関連の詳細説明は省略しますので適宜調べて貰えると幸いです。

###前提
ListViewに並べるアイテムはDBに実装済みのものとします。
今回は以下のアイテムを用意して進めます。

“`dart:item.dart
class Item {
var id;
var title;
var sort;
//その他省略
}
“`

###実装

#####ListViewの実装
先ずはD&Dソート可能なListV

元記事を表示

【React Native】ただ写真ライブラリから写真を取得するだけでなく、加工して表示させる方法

#写真ライブラリから写真を取得し、自分の好きなサイズに加工して表示させる

ReactNativeで写真ライブラリから写真を取得する方法はいくつかありますが、その中で加工や編集も行えるライブラリを紹介します。
ライブラリのGitHub https://github.com/ivpusic/react-native-image-crop-picker

もともとreact-native-image-pickerというライブラリがあり、それを使えば「カメラを起動させるか」「写真ライブラリを開くか」の選択欄も出て、どちらも実装できる便利なものがありましたが、最近のアップデートで選択欄が出なくなったり何かと使いにくなりました。
image-pickerのGitHub https://github.com/react-native-image-picker/react-native-image-picker

またこのライブラリで写真を取得してもそのまま表示されるため、実際にアプリに入れてみないと調整が難しいです。
例えば、アイコンを設定する際に写真全体を表示するのではなく、右下の一部分だけを

元記事を表示

【React Native】AlertやらDialogやらmodalやら似たようなやつのそれぞれ特徴をまとめました。

#似たような使い方をするAlertとDialogとModalの違い
ログインに失敗した時のエラーメッセージやユーザーに確認をとる時に使われるUIの作り方は何種類かあります。
その中で今回はReactNativeの標準に入っているAlert、ModalとライブラリのDialogの三つのそれぞれの違いをまとめました。
基本的にこの三つはほとんど同じUIで挙動や実装方法も同じです。ただ、Dialogじゃないとできないことなどもありましたので資料にしました。

#ライブラリをインストール
###dialog
“`yarn add react-native-dialog“`
Github:https://github.com/mmazzarolo/react-native-dialog

#実装
プロジェクトを作成し、各ライブラリをインポートします。

“`javascript
import React from ‘react’;
import {Alert, Button, View,Modal} from ‘react-native’;
import Dialog from “rea

元記事を表示

Swift CustomNSErrorを利用して、より詳しいエラー情報を定義する

## 概要
`CustomNSError` を使ってより詳細なエラーを定義します。

## はじめに
Swiftでコーディングするとき、何かの失敗を表すときに `Error` を使うことがよくあるかと思います。

“`swift
enum MyError: Error {
case one
case two
}
“`

エラーを見て何が起こったかを調べて問題を解決していくことがあると思いますが、
例えば次の `analyzeError` のような、MyErrorに限らず何のエラーが来るかわからない`Error` を引数に取った場合、一度`NSError` に変換することによってdomainやcodeなど、より詳しい情報を得ることが可能です。

“`swift
enum MyError: Error {
case one
case two
}

func analyzeError(error: Error) {
let nsError: NSError = error as NSError
print(nsError.domain)

元記事を表示

[Swift] typealiasって?

#はじめに
typealiasという文字をを見たときなんか、ふわっとエイリアンの顔が頭に浮かんだのは僕だけでしょうか。多分仲間がいると思っています。
typealiasは今までにも見たことはあったのですが、どういう場面で使えるのか分かっていなかったので調べてみました。この記事では使い方の一部をご紹介します。

#ざっくり理解するtypealias
typealiasはざっくり、IntやStringなどの型に自分用の名前をつけて使えるよー。というものです。
例えばInt型の数値を扱うときにIntっていう型の名前はちょっとダサいな。と思ったとしましょう。
そこでtypealiasの出番です。これを使うとIntの性能を持ったあなた好みの名前の型を作れます。
以下に例を示します。

“`
typealias Explosion = Int // これでIntの性能を持ったExplosionという型が作れました!

// ExplosioinはIntと同じ特徴なので当然整数を代入することができます。
let num1: Explosion = 3
let num2: Explosion = 5

元記事を表示

[Swift]修飾子のLazyとは?

#はじめに
最近はコードでUIを作るのにハマっています。その中で、Lazyが必要な場面が出てきたので備忘録的にまとめておきます。

#どんなときに使えるの?
結論、一つの用法として、コードでUIを作っていくときなどに使えることがあります。
例えば、UIButtonであれば以下のコードのように書けます。
このコードは”Lazy”を付けなくても問題なくUIButtonを生成することができます。

“`
let button: UIButton = {
let button = UIButton()
button.setTitle(“tap”, for: .normal)
button.backgroundColor = .blue
return button
}()
“`
では、いつ”Lazy”が必要になるのか、それはCollectionViewやTableViewでdelegate、dataSourceをselfに設定するときです。
“Lazy”をつけることで、delegateやdataSourceにselfを

元記事を表示

iPhone13を発表したAppleEventメモ

本日(2021/09/15)の Apple Event(iPhone13発表)のメモになります。

https://www.apple.com/jp/apple-events/september-2021/


# Apple TV+
Apple TV+ でのコンテンツ紹介

# iPad(第9世代)
iPadOS15搭載
A13Bionic
CPUやカメラがアップグレード
**センターフレームに対応(今回発表した全機種)**
329ドル(64GB)から
色はシルバーとグレイ
**本日受付開始**
**販売は来週**

# iPad mini(第6世代)
色:パープル、ピンク、スターライト、スペースグレイ
画面は8.3インチに拡大
**Touch IDが画面上部の電源ボタンに移動**
物理的なホームボタンは廃止
コネクタはUSB-C
カメラやオーディオもアップグレード
4K, 12MP, センターフレームに対応
横向きでのスピーカーに対応
Apple Pencilにも対応
**本日受付開始**
**販売は来週**
全てのラインナップで100%再生アルミニウムの筐体を使用

#

元記事を表示

Flutterで手書きを実装する

# 実装する機能

今回実装する機能は、

– 自由に画面をなぞると特定の範囲内で手書きで絵が描けるようにする
– ひとつ戻る(undo)ひとつ進む(redo)ボタンの実装
– 全部消すボタンの実装

になります。類似した機能が入ったアプリだと消しゴムが入っていますが、今回のアプリではそこまで必要性を感じなかったため実装しません。

# パッケージ・バージョン

Flutterのバージョンは`2.2.0`です。

使用するパッケージは状態管理のために`hooks_riverpod`と`statenotifier`、`freezed`を使います。
特にそれ以外のパッケージは使用しません。
バージョンは以下の通りです。

“`yaml:pubspec.yaml
dependencies:
flutter_hooks: ^0.17.0
freezed_annotation:
hooks_riverpod: ^0.14.0+4

dev_dependencies:
build_runner:
freezed:
“`

# 手書きの実装

## 土台の作成

本題の実装に

元記事を表示

FlutterがiOSシミュレータを認識しなかった話

## 前置き

経緯の説明から。

XCodeをApp Storeから入れていたのですが、容量が大きすぎるので一度削除しました。代わりにApple Developerサイトからコマンドラインツールをダウンロードして入れたのですが、今度はシミュレータを入れれず。

色々試したあと、入れてからシミュレータを厳選する作戦を思いつき、Apple DeveloperからXCodeをダウンロードしました。

## 症状

XCodeを入れているのに、iOSシミュレータを認識しませんでした。シミュレータを起動して

“`
Flutter devices
“`

と入力しても、デバイスが出てきません。そこで調べていると、以下を見つけました。

https://stackoverflow.com/questions/64944483/flutter-doctor-xcode-installation-is-incomplete

## 手順

XCodeを開く

メニューバー > Xcode > Preferance > Location > Command Line Toolsが空白になっていたら

元記事を表示

【Swift】Int型 ⇄ 16進数文字列 ⇄ バイト配列(UInt8配列) を相互変換する

# はじめに
BLE通信などを実装していると、Write / Read のタイミングでバイト型を扱うと思います。
業務でファームウェアの仕様に合わせ、Int型 ⇄ 16進数文字列 ⇄ バイト配列 で相互変換する必要がありました。
ここら辺は忘れやすいかなと思い、まとめることにしました!

# 環境
– Xcode12.5
– Swift5

# 変換していく
今回は、以下のデータを変換していきます。

| Int型 | 16進数文字列 | バイト配列(UInt8配列) |
| :—: | :—: | :—: |
| 123456789 | “075BCD15” | [7, 91, 205, 21] |

### 16進数文字列 -> Byte配列
ごりごり加工していくので、別途 extension に関数を定義しています。

“`swift
extension String {
func toBytes() -> [UInt8]? {

var hexString = self

if hexSt

元記事を表示

iOS 開発の頑張らないビルド用 Swift CLI ツール管理

## TL;DR

どうせ macOS 上でしか開発できないので、 直接ビルドツールの実行バイナリをダウンロードして利用する。

## モチベーション

– XcodeGen
– SwiftLint
– LicensePlist

といった最終成果物には含まれないが、ビルドプロセスで利用する Swift 製 CLI ツールの管理について、 [Mint](https://github.com/yonaskolb/Mint) を利用してプロジェクトでバージョンを固定+開発者のローカルマシンに依存させないといった設定をよく実施するかと思います。

https://qiita.com/usamik26/items/be813a224a2146daffb7

https://dev.classmethod.jp/articles/package_management_by_mint/

これまでは特に問題がなかったのですが、 Apple Silicon ( M1 Mac ) の登場によって、[Homebrew 経由でインストールしたものを Build Phases で実行する際に PATH を

元記事を表示

【Swift】ボイスチェンジャーアプリでBluetoothイヤホンを使用して録音再生できるようにしてみた

「おばけだぞう」と子供がしつこく言うので、変声機アプリを作ってみた。

#サンプル画像:
![RPReplay_Final1631489151.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/715627/bd07fb63-7aa5-59e7-49b7-5db7208e06a7.gif)

#アプリ概要:
-「Record」ボタンで音声を録音
-スライダー「Speed」「Pitch」、スイッチ「Echo」「Reverb」で声のエフェクトをかける
-「Play」ボタンで再生、モーダルに画面遷移してお化けアイコンの表示

参考サイト:
[[Swift4.2]蝶ネクタイ型変声期作ってみた](https://qiita.com/tosh_3/items/95e9e41279ba0ffcd3f4)

#課題:
再生時に「音量」が上がらない。
Bluetoothイヤホンを接続すると「録音・再生」が機能しない。

下記のサイトを参考:
[AVAudioSessionで録音する際に、音はbluetoothイヤホ

元記事を表示

【Swift】アプリ内でダークモード/ライトモードを設定したい

## やりたいこと

アプリ内で、OS設定によらずライトモード/ダークモードを設定したい。

##設定方法

1行加えるだけで、即時にアプリ全体に反映されます。

* ダークモードに設定する場合

“`swift:ViewController.swift
UIApplication.shared.windows.first?.overrideUserInterfaceStyle = .dark
“`

* ライトモードに設定する場合

“`swift:ViewController.swift
UIApplication.shared.windows.first?.overrideUserInterfaceStyle = .light
“`

* OS設定に従う場合

“`swift:ViewController.swift
UIApplication.shared.windows.first?.overrideUserInterfaceStyle = .unspecified
“`

起動時に設定する場合は、initial view controllerの viewDi

元記事を表示

1年間Flutterで開発していてわかったアクセシビリティの問題(iOS編)

この1年コンスタントにFlutterでコーディングをしていてわかった_スクリーンリーダー(VoiceOver)_の問題についての記録です。
Androidについては[1年間Flutterで開発をしていてわかったアクセシビリティの問題(Android編)](https://qiita.com/yama_1983/items/6c51e83b980c512019ab?utm_campaign=post_article&utm_medium=twitter&utm_source=twitter_share)をご覧ください。

—–

## 1. 項目を選択したときのガイドアナウンスが読み上げられない
ボタンや項目などを選択したときには通常
_開くにはダブルタップします_
のようなアナウンスがあります。
これによりユーザは項目が操作可能かどうかを知ることができます。

## 2. リストをスクロールしたときの度合いを読み上げない
通常リストをスクロールさせた場合

* リストの総数
* 表示されている項目の開始位置
* 表示終了位置


_全50行中10行目から20行目まで_
のよう

元記事を表示

[Xcode] iosアプリ開発で通知が表示されない

## どゆこと

ionic + angularでiosアプリ開発を少し勉強していたところ,通知がどうやっても表示されない問題に遭遇しました.

初めはコードに問題があると思い,色々と調査を行いましたがどうやら原因はそうではなかったようです.

iosアプリはApple IDがあれば無料で開発することができますが,有料のApple Developer Program(ADP)というメンバシップが存在し,その有料のメンバシップに入っている開発者でないと使えない機能が存在するようです.

今回私が詰まっていた通知機能は有料会員でないと使えない機能でした.

なので有料会員にならないと試せないようです.

有料会員でないと使えない機能及び無料会員でも使える機能は以下のページにまとまっています.

https://help.apple.com/developer-account/#/dev21218dfd6

![参考](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401124/b462e83d-52a7-c03

元記事を表示

OTHERカテゴリの最新記事