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

iOS関連のことを調べてみた2020年05月04日
目次

スマホと洗濯バサミでWebカメラのない人を救いたい

# DroidCamをインストール

WEBカメラをAndroidスマホで代用して、ZOOMミーティングに利用する方法

# 洗濯バサミでスマホを固定する!

![IMG_20200503_205700.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129639/9997da4b-6b38-9cf9-a636-9bce084b9939.jpeg)

モニターに指したり、ジャンプの上に置いたりして調節する。

良いビデオ会議ライフを

元記事を表示

オプショナルを分かりやすく一言で。。

###一言でオプショナルとは…

**オプショナル = 「空っぽ」の代入がokってこと**

(厳密には 「空っぽの状態=nil」 )

“`swift:オプショナルの操作
var a: String?
var b: Int!
//オプショナル型の変数宣言
var c: String
var d: Int
//非オプショナル型の変数宣言
a = nil
//実行できる
c = nil
//実行できない
“`

##なぜnilが必要か

例えばLINEでは 登録に名前は必須でも写真は任意の項目。つまり写真は登録してもしなくてもいい。
つまり「空っぽ」が存在する。この時nilが必要になる
(オプショナルがないと絶対写真登録してね!!ってなってちょい不便)
以上、一言でオプショナルでした。

元記事を表示

SwiftのCoreAnimationでカードを裏返すアニメーションを実装する

##はじめに。
Swiftを使って簡単なトランプゲームを作ろうとしたところ、トランプカードを裏返す実装が必要になりました。

アニメーションにも色々ありますがUIViewAnimationOptionsでは細かい設定が難しそうなので、CoreAnimationを使うことにしました。開発環境はXcode11,Swift5です。

##実装方法

0.1秒かけてラベルをY軸を中心に90度回した後に、ラベルの文字を変更し、さらに0.1秒かけてラベルを90度回転させます。

“`ChatView.swift
let cardAnimateDuration = 0.1
DispatchQueue.main.asyncAfter(deadline: .now() + cardAnimateDuration) {
//90度回した時点では画面に文字が描画されていません
self.cardLabel.text = “5”
}
//keyPathは文字列ですが指定できる値が決まっています。
let animation1 : C

元記事を表示

Apple Developer Programの証明書(Certificates)の種類まとめ

## はじめに
Apple Developer Program(以下、ADP)のポータルにある、
***Certificates, Identifiers & Profiles***から証明書を作成できると思いますが種類が結構あります。
スクリーンショット 2020-05-03 14.16.39.png
※上限に達しているやつはスルーで。。

ADPが無法地帯になっているので、管理せねばということで調べたことの記録。
あとADPのUIとか表記がよく変わるっぽいので、20年5月段階の情報としてご認識ください。

## TL;DR
いっぱいあるけどXcode11以降はApple Developmentを使う。(集約されました)
それ以前はiOSならiOS〜、MacならMac〜と記載の証明書を使おう。
Develop

元記事を表示

「Flutterについての下調べ」 ~私文男子の格闘第1話~

#はじめに
(2020/5/3 投稿)
Qiitaはじめて2日ですが、他のブログ媒体よりもView数がびっくりするほど伸びるので、ビビっている日々を過ごしております。どうも私文男子です。
本日は、**Flutterについて調べたこと**を書いておきたいと思います。

#Flutterとは?
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629658/a21bcb48-778c-0c96-30ae-2a637577c52a.png)
(画像:Flutter公式より)

Flutterは、Googleによって開発されたモバイルアプリケーションSDK (Software Development Kit)です。
以下はFlutter公式からの引用です。

>Flutter is Google’s UI toolkit for building beautiful, natively compiled applications for mobile, web, and desktop from a

元記事を表示

Swift5.1 Codableに対応したFirestoreでDocumentIDを取り扱う方法

本稿では,Swift(Swift5.1)を使ってFirestoreから取得したデータをデコードする際に@DocumentIDアトリビュートを使えばidの付加が簡単になるという話を紹介します.

昨年秋からFirebaseFirestoreSwiftを使用することで公式にCodableが使えるようになりました.それについては[こちらの記事「公式の方法でFirestoreでCodable #firebase #firestore #codable」](https://qiita.com/fromkk/items/33357fc6aa90e1098b48)で紹介されています.

# 問題:普通にDecodeするとDocument idを取ってこれない

Decode先の型にidを持たせた場合,通常Firestore側のフィールドにidは含まれていないと思うのでうまく行きません.そこで,DocumentSnapshot.documentIdで後からidを指定する必要がありました.

“`swift:
struct HogeModel: Codable {
v

元記事を表示

Firebase Hostingで、アプリ内で表示するWebページを作ってみた

# 作ったもの
iOSアプリの「設定画面」>「よくある質問」の先のWebページ。
スクリーンショット 2020-05-01 13.54.44.png

今後も頻度高く更新していきたいページなので、アプリ内に埋め込むのではなく、Webページとして置いておきたい気持ちがありました。
レンタルサーバーも検討しましたが、静的ページであることと、PV数も多くはないだろうということで、最終的に [Firebase Hosting](https://firebase.google.com/docs/hosting?hl=ja) を使ってみることにしました。
基本的に無料([従量課金制](https://firebase.google.com/pricing/))で使えて、SSL化もしてくれます。素敵。

# 手順
## Webペ

元記事を表示

TableViewでLINEと同じ順番でよろしくと言われたときに雑に対応する

# 結論
AffineTransformを使って逆向きにすればいい

# 準備

“`ReverseTableViewController.swift
import UIKit

class ReverseTableViewController: UIViewController {

@IBOutlet weak var tableView: UITableView! {
didSet {
self.tableView.rowHeight = 44
self.tableView.delegate = self
self.tableView.dataSource = self
}
}

private var data: [String] = []

override func viewDidLoad() {
super.viewDidLoad()
}

override func viewDi

元記事を表示

[iOS]R.swiftをSPMで導入

私はiOSアプリではほとんどR.swiftを使用しています。今まではCocoapodsによる導入がほとんどでした。Xcode11からSPM(Swift Package Manager)でR.swiftを導入することが増えてきました。

## R.swiftとは?

多くの記事で書かれていますので、割愛します。
https://github.com/mac-cain13/R.swift

## R.swiftの導入方法

大きく分けて3つのパートになります。

1. rswiftコマンドのインストール
1. R.generated.swiftの生成
1. R.swift.Libraryのインストール

### rswiftコマンドのインストール

rswiftコマンドはR.generated.swiftファイルを生成するためのCLIです。インストールするためには、HomebrewとMintの2通りがあります。

– Homebrewで:簡単だが、バージョン指定が出来ない
– Mint:バージョン指定ができるが、ビルド時間がかかり、特にCI環境で影響があります。

### Homebrew

元記事を表示

【Pyto】iPhoneのTaptic EngineをPythonで操作する

## はじめに
iPhoneの中にはTaptic Engineという装置が搭載されている機種があります。これは、ホームボタンが物理ボタンでなくなった代わりに押した感触を発生させる装置です。ホームボタン以外にも何かを長押しした時や支払いが完了した時などにクリック感が発生します。

このTaptic Engineを[Pyto](https://pyto.app)というアプリを用いて操作してみました。

## 環境
iPhone SE (2020)(iOS13.4.1)
Pyto(11.9)

## Taptic EngineとHaptic Feedback
私はTaptic Engineがクリック感を発生させる装置、そのクリック感をHaptic Feedback(触覚フィードバック)と理解しています。

## Haptic Feedbackの種類
iPhoneのHaptic Feedbackには3つの種類があります。[こちら](https://qiita.com/WorldDownTown/items/2b5a72e41a95763727bb)[1]のサイトを参考にしました。[こちら

元記事を表示

【Swift】UILabelテキストの色、文字サイズ、行間、整列…NSAttributedStringとおすすめextension

### NSAttributedStringとは
 テキストにいろんな属性を関連付けることができるもの。また、その属性を持つテキストのこと。属性の例としては、表示スタイル、ハイパーリンク、ユーザー補助データなどが挙げられます。
(Apple公式: https://developer.apple.com/documentation/foundation/nsattributedstring)

# はじめに
 Swiftでアプリ開発をしていると、テキストのサイズや色、フォントや行間隔などを変更したい場合が出てきます。
 多くの場合はStoryBoard上で設定することで解決できますが、コードで行いたい場合もあるでしょう。(StoryBoard上でattributedテキストをいじる→あれ、うまくいかないよ…というのも経験された方はいるのではないでしょうか?なんか動作が変な時ありませんかattributedTextにすると汗)

 本稿では、NSAttributedStringでできる一部の例を示します。また、私が便利だなと思っているextension(Stringクラスを拡張してNSAt

元記事を表示

【iOSアプリ開発】オンライン対戦のクイズアプリのリリースまでの流れ

## 概要
私事ではありますが、
先日4月30日、早押しクイズのオンライン対戦アプリをリリース致しました。
プロモーションを兼ねてリリースまでの流れや大変だった部分などを共有していきます。
よろしければ実際にアプリをインストールして触っていただければ嬉しいです?

## アプリ概要
Quizdom クイズ王 決定戦
https://apps.apple.com/jp/app/id1510223709
スクリーンショット 2020-05-01 20.48.33.png
スクリーンショット 2020-05-01 20.48.25.png【iOS】ErrorMessage レイアウトスレッド管理に注意!!

~~~ Error:ErrorMessage
This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes.
~~~
英訳をすると、
このアプリケーションは、メインスレッドからエンジンにアクセスした後、自動レイアウトエンジンをバックグラウンドスレッドから変更しています。これにより、エンジンの破損や奇妙なクラッシュが発生する可能性があります。

iOS13くらいから
レイアウト描画関係のスレッドを気にする必要があるようです。

iOS13にあげてからやたらと落ちる原因が増えたという方がいたらこの点確認してみてください。

例を挙げている記事がありました

[tableVeiw.reloadData()をバックグラウンドスレッドで実行してはいけない](https://qiita.com/ta

元記事を表示

ReSwiftを使うときに知っておくといいTips3選

# 前書き
最近AndroidでもiOSでもReduxアーキテクチャが気に入っており、アプリ開発時に(ごり押して)採用しているUroteaでございます。
Android向けReduxの記事も書いているので、Androidも書く人は読んでみてください。

# ReSwiftを使ってアプリを書いていて気が付いたTips集

機会があり、iOSアプリを書くことになりました。
ログインしたユーザの権限によってボタンを非表示にしたり、レイアウトを変えたりする必要があるため、状態管理に強いReSwiftを選択しました。
ある程度作り終わった今、この選択は正解だったと思っています。
また、ViewとのbindingのためにRxSwiftも併用しましたが、こちらも採用してよかったと思っています。
そんな中で気が付いたTipsを共有したいと思います。

## この記事で書くこと
– ReSwiftを使うときに、知っておくと便利なこと
– RxSwiftとどう連携したか

## この記事で書かないこと
– ReSwiftの概念、使い方
– RxSwiftの概念、使い方

## 対象読者
– iOS開発

元記事を表示

fastlaneで管理している場合にSign In with Appleの権限を追加する

# 結論
fastlane側にコマンドを追記して実行かと思っていたが、Developer Centerで権限を操作してprovisioning profileを再取得するだけだった。。。

# 手順

### 環境
Xcode: 11.1.0
fastlane: 2.145.0

### Xcodeで権限追加
Signing & Capabilitiesで権限を追加

スクリーンショット 2020-05-01 11.38.05.png

### Developer Centerで権限追加
Identifiers > 変更したいものを選択 > Sign In with Appleにチェック

スクリーンショット 2020-05-01 11.40.06.png【Swift】プロジェクト作成時に生成されるMain.storyboardを削除する

# はじめに
**Main.storyboard** を使わずに、
自分で作成した Storyboard から ViewController を生成してルートに設定したい時などで
最初に躓くのが **Main.storyboard** の削除とその後の設定だと思います。

その辺りの情報が少なかったので、自分がいつもやっていることをまとめます。

# 環境
Xcode 11.4
Swift5
iOS 13.4

# Main.storyboard を削除する
まずは早速 **Main.storyboard** を削除します。
それに加えて **ViewController.swift** も使用しないので削除します。

次に新しくルートに設定したい Storyboard と ViewController を作成します。
自分は RootViewController という Storyboard と ViewController を作成しました。

ではこのままの状態でビルドして実行してみます。
すると実行はできますが、こんな感じのエラーがでてクラッシュします。

“`
Termin

元記事を表示

エラーを蓄積できる“ResultNel”と数種類のViewから1つを返す型“CoproductView”を作る

# はじめに

Swift 5からは`Result`という他のプログラム言語では主に`Either`としても知られている型が入った。しかしiOSプログラミングをはじめてみると複数のエラーを同時に集めてきてUIに表示するという必要を感じるようになった。そこで`NonEmptyList`というデータ構造を使ってエラーを複数蓄積できるような`Result`である`ResultNel`を開発した。この記事の前半ではまずこの`ResultNel`について解説する。
またiOSプログラミングではUIの作成が必要になる。UI用のフレームワークである[SwiftUI](https://developer.apple.com/documentation/swiftui)を利用して画面を作る場合、`View`というプロトコルを適合した型の値がたとえばテキストや画像といった1つのUIパーツを表現しており、これを束ねて画面全体を構成していくことになる。SwiftUIはSwift 5.1から入った_Opaque Result Type_を使って返り値の型を「なんらかの`View`」と表現することが多いが、これは

元記事を表示

iPhoneアプリ開発が正常に実装できない

swiftによる地図検索アプリケーションを開発中で問題が生じました

下記リンクを参考にしながら、至ってシンプルな地図表示アプリを開発しているのですが、
https://developers.google.com/maps/documentation/ios-sdk/start?hl=ja

“`swift
import UIKit
import GoogleMaps

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
// Do any additional setup after loading the view.
// Create a GMSCameraPosition that tells the map to display the
// coordi

元記事を表示

HKHealthStoreのデータ読み取り権限があるかチェックする

結論から言うと読み取り権限があるかチェックすることはできません。
書き込み権限の有無は[authorizationStatus(for:)](https://developer.apple.com/documentation/healthkit/hkhealthstore/1614154-authorizationstatus)でチェックすることができます。

このメソッドのDiscussionに以下の説明がありました。

“`
This method checks the authorization status for saving data.

To help prevent possible leaks of sensitive health information, your app cannot determine whether or not a user has granted permission to read data. If you are not given permission, it simply appears as if there is no da

元記事を表示

iOSウィジェットにCO2濃度を表示する 【Raspberry Pi × CO2-mini × co2meter】

WFH、捗ってますでしょうか。

我が家の場合、机やモニターなど家で仕事をするのに十分な設備は元々整っていたのですが、たったひとつだけオフィスにはあって自宅にないものがありました。

CO2モニターです。

## 成果物
パッと目につくところに表示させたかったので、iOSのウィジェットに置くことにしました。
最終的にこんな感じでCO2濃度、ついでに室温が見えるようになりました。

### iPhone

### iPad
スクリーンショット 2020-04-26 22.34.59.png

  • OTHERカテゴリの最新記事