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

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

iOS 14:クリップボードにアクセスする前にその内容の種別を検知

iOS 14では、アプリがユーザーのクリップボードのコンテンツにアクセスするたびに、画面上部に警告が表示されます。

アプリがクリップボードのコンテンツにアクセスするのは、その中のコンテンツに気になる点があるかどうか知りたい場合があるためです。

この `UIPasteboard.general` の `detectPatterns` 機能を利用すると、クリップボードのコンテンツが次のカテゴリのいずれかに該当するかどうか検出することができます。

image

– 数字 `.number`
– URL `.probableWebURL`
– ウェブ検索クエリー `.probableWebSearch`

`detectPatterns` がコンテンツのタイプを判断できない時はいつも `.probableWebSea

元記事を表示

retina端末で画像アップロードする時のリサイズで注意するところ

iOS端末で、よく写真ををリサイズして、アップロードしたいことがある。

ただ、ちょっと注意しないと、Retina対応で画像が設定されたサイズで生成されないことがある。
これはUIGraphicsBeginImageContextWithOptions()メソットでscaleパラメーターで、期待されるサイズにならない場合があるほで、気をつけないといけない。
ここでは、scale 1.0を設定した実装で、実際リサイズしたいサイズでファイルが生成されるが確認される。

“`swift:UIImage+extension.swift

func resizeWithStorage(toWidth: CGFloat) -> UIImage {
let scale = toWidth / self.size.width
let toHeight = self.size.height * scale
let newSize = CGSize(width: toWidth, height: toHeight)
let rect

元記事を表示

Grand Central Dispatch (GCD) の理解を深める

### GCD とは?

macOS、iOS、watchOS、tvOS のマルチコアハードウェアでの並列実行タスクをするために提供されている言語機能で、開発者は `DispatchQueue` を使用してスレッドでの処理を管理することができます。また、GCD の Queue は追加されたタスクの順番ごとに処理を実行する FIFO(First In First Out) の性質を持っています。

### 一旦用語をまとめる

#### Process(プロセス)

アプリケーションの実行インスタンスであり、専用の仮想メモリ空間およびシステムのリソースが割り当てられる。また、プロセス内には複数のスレッドが含まれる。

#### Thread(スレッド)

プロセスが実行する処理などを格納した箱のようなもの。

#### Task(タスク)

スレッドに格納される具体的な処理の単位。

#### Queue(キュー)

アプリケーションに含まれるスレッドを管理するための高レベルな API で、Thread の作成・管理の役割を担っている。また、実際に処理される時にはシステムが効率的なタスクの

元記事を表示

Google Maps で吹き出しが表示されない

## 要件

Google Maps 上のマーカーをタップした際に吹き出しを表示してください。

## Google さんの教え

それ **info window** でできるよ。
https://developers.google.com/maps/documentation/ios-sdk/marker#add_an_info_window

`title` or `snippet` のどちらかを設定すれば、マーカーをタップした際に吹き出し( **info window** )が表示されるようです。
どちらも `null` もしくは空文字の場合は吹き出しは表示されません。

“`swift
let position = CLLocationCoordinate2D(latitude: 51.5, longitude: -0.127)
let marker = GMSMarker(position: position)
marker.title = “London”
marker.snippet = “Population: 8,174,100”
marker.map = map

元記事を表示

勢いでMacbook買ってから初めてのiPhoneアプリをリリースするまでのメモ

# はじめに
3月にMacbookProを購入し、独学でプログラミング(Swift)を学習し、8月に初めてのiOSアプリをリリースしました!
今回はアプリリリースまでにどうプログラミングを勉強したのか、どういう教材でアプリ開発を学んだのかを紹介します!

# リリースしたアプリ
思いっきり宣伝ですがこちらからダウンロードできます↓
https://apps.apple.com/jp/app/prophecy-%E4%BA%88%E8%A8%80%E3%83%9E%E3%82%B8%E3%83%83%E3%82%AF/id1528918453

記念すべき初のアプリは【手品アプリ】です!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620431/37ee5273-a6df-07b5-5f2e-9cde983777fc.png)

iPhoneでお客さんが選んだカードを当てる簡単なマジックです!
実演動画はYouTubeに載せています↓
https://www.youtube.com/w

元記事を表示

アプリで取り扱っている画像(UIImage)を端末に保存する

UIImageViewに表示したりするのに使っている画像(UIImage)を端末のアルバムに保存したかったのでやり方を調べました。

まず、Info.plistの``の中に`NSPhotoLibraryAddUsageDescription`があるか確認します。なかったら以下のように追加します。パーミッション要求時の文言は、アプリの内容に応じて指定します。

“`
NSPhotoLibraryAddUsageDescription
パーミッション要求時の文言
“`

そしたら、画像を保存しようとしているところで以下のような処理を実行します。

“`swift
func save(image: UIImage) {
// パーミッションを確認
PHPhotoLibrary.requestAuthorization { status in
guard status == .authorized else {
// 権限がない
return

元記事を表示

Xib で View を生成する時に知っておくといいこと

先日、うっかり `ViewClass` で指定した `Xib` で作成したカスタムビューのプロパティにアクセスし下記のように Error を出してしまいました。初心者の頃はよく分からずググったものコピペ なりで回避していましたが、そもそも何故これが Error になるのかを今回は紹介したいと思います。

“`swift
override func viewDidLoad() {
super.viewDidLoad()
hogeView.label.text = “hogehoge”
}
// Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
“`

## Xib で View を生成する方法

Xib で View を生成する方法は、大きく分けて `View Class` と `File’s Owner` を指定する2通りの方法があります。

### View Class

![image.pn

元記事を表示

[アプリ開発]DKImageViewControllerで写真共有アプリ作ってみた

![5568440d5934344ad6f605910ee9f3e1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679429/bb260802-cf93-1d92-fa30-5e030f525cf2.gif)
![464b0ad207bdce4da56f3c8461957761.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679429/afed0470-5448-a561-735c-e59b7cd8ab14.gif)

#作った経緯
初めて作ったファッションアプリが途中でできなかったので、なんかCollectionView使ってやりたいなーって思いましてインスタみたいな写真共有アプリ作ろうと決心して開発しました!
参考にしたアプリは`tabiori`さんです
>https://tabiori.com/

とりあえず作ってみた!
![スクリーンショット 2020-08-23 14.58.10.png](https:/

元記事を表示

【入門】iOS アプリ開発 #8【スペシャルターゲット・得点表示】

# はじめに

今回はスペシャルターゲット(くだもの類)、パックマンがそれを食べた時やゴーストを噛み付いた時の得点表示を作成していく。

イメージ図は下記の通り。スペシャルターゲット(サクランボ表示)と、それをパックマンが食べると得点が表示される。

![Image7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678332/ccec0087-7ddb-a262-c4ae-662ad6389fae.png)

# 仕様書

まずはスペシャルターゲットの仕様の確認。

![Image5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678332/996dbef8-f014-0308-a8bf-6c6f267cc4eb.png)

表示されている間にパックマンが食べると、得点が2秒だけ表示される(仕様にはないが実機確認)。

続いてパックマンがゴーストを噛み付いた時の得点表示の仕様は以下の通り。

![Image51.p

元記事を表示

CryptoKit を使って ECDSA を用いた署名を実装する

ECDSAでJWTによる電子署名を作成することがあったのでメモ :pencil:

## ECDSAとは
* [楕円曲線暗号 – Wikipedia](https://ja.wikipedia.org/wiki/%E6%A5%95%E5%86%86%E6%9B%B2%E7%B7%9A%E6%9A%97%E5%8F%B7) の一つ

> 楕円曲線暗号(だえんきょくせんあんごう、Elliptic Curve Cryptography、ECC)とは、 [楕円曲線](https://ja.wikipedia.org/wiki/%E6%A5%95%E5%86%86%E6%9B%B2%E7%B7%9A) 上の [離散対数問題](https://ja.wikipedia.org/wiki/%E9%9B%A2%E6%95%A3%E5%AF%BE%E6%95%B0%E5%95%8F%E9%A1%8C) (EC-DLP) の困難性を安全性の根拠とする [暗号](https://ja.wikipedia.org/wiki/%E6%9A%97%E5%8F%B7)。

* 暗号化と復号とで異なる2つの鍵を使

元記事を表示

Swift基礎文法書に付箋を貼ってみた

#Swiftの基礎文法書の復習
Swiftの基礎が学べる良書である[「絶対に挫折しない iPhoneアプリ開発「超」入門 第8版 【Xcode 11 & iOS 13】 完全対応」](https://www.sbcr.jp/product/4815604622/)を読み返しながら、開発していて**注意すべきところ**や**知らなかったところ**に付箋を貼ってみました。

## for文
知らなかったのですが、forの後に続くのは**定数**らしいです。

以下、コード例です。

“`swift:
for 定数 in 範囲 {
処理
}
“`

一見、範囲の値の回数だけ値が変わっているように見えるので変数ではないかと思っていたのですがどうやら違うみたいです。
>for文で使われている定数nは、for文が一度実行されるたびに寿命が切れて、メモリ上から消去され、そして次の文を実行する際に再度同名の定数nが新たに宣言されて・・・・・

##プロックとスコープ

以下のコードで{}で囲われたところを**ブロック**と呼びます。

“`swift:プロック
var count = 0

元記事を表示

【IOU】 Object Detection の性能指標【I/U】

ユニオン交差 Intersection Over Union (IOU) が一般的なようです。
![iou.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/edde1efc-834f-c528-8d71-202ac6106399.png)

**IOU = 正解boxと予測boxの重なりあう領域 / 正解boxと予測boxの重なり合っている部分と重なり合っていない部分の和**

つまり、IOUが100%であれば、完璧に正解と予測が一致しているということです。

CreateMLの正解率は、このIOUが50%を越えているもの(50%重なっているもの)を正解とみなして%表示しています。

I/U 50%
87%

というのは50%領域が重なっているケースが87%あったということです。

もう一つの指標、varied I/Uというのは、閾値を50%〜95%まで変化させた時の平均正解率。
これが低いと、重なっている部分はあるものの、重なる領域は狭い、ということになります(もちろん50%閾値の正解

元記事を表示

[Swift]ColorをRGBで指定する

## はじめに
SwiftでcolorをRGBで指定する方法を説明します。

## Swiftでのcolor指定
まず通常の指定方法は

“`swift:ViewController.swift
sampleView.backgroundColor = .blue

sampleView.backgroundColor = UIColor(red: 0.1, green: 0.5, blue: 1.0, alpha: 1.0)

sampleView.backgroundColor = UIColor(red: 30/255, green: 144/255, blue: 255/255, alpha: 1.0)
“`

下に載せている記事が参考になるかと思いますが、SwiftでRGB指定しようとすると全ての値を255で割って分数表記にしないといけないため、若干めんどくさいです。
@shu26 さんのQiita
https://qiita.com/shu26/items/bc0a8a06019b24d799d4

そこで、RGBの値をそのまま利用するためのextensionを作成しま

元記事を表示

セグメンテーションモデル(DeepLabV3)の結果をCore ML Helpersでラベルごとに振り分ける。

アップルの公式配布DeepLabV3のCore ML モデルは、(512,512)のML Multi Arrayを出力します。
各ピクセルは0~14のラベル値です。

0,’background’背景
1,’aeroplane’飛行機
2,’bicycle’自転車
3,’bird’鳥
4,’boat’ボート
5,’bottle’ボトル
6,’bus’バス
7,’car’車
8,’cat’猫
9,’chair’椅子
10,’cow’牛
11,’diningtable’テーブル
12,’dog’犬
13,’horse’馬
14,’motorbike’バイク
15,’person’人
16,’pottedplant’鉢植え
17,’sheep’羊
18,’sofa’ソファ
19,’train’電車
20,’tv’テレビ

出力結果をマスク画像として使いたい場合、ピクセルのラベル値を判別する必要があります。
[Core ML Helpers](https://qiita.com/john-rocky/items/bfa631aba3e7aabc2a66)でラベル値によって判別してマスク画像にで

元記事を表示

360度、デバイスの向きを測定する時の【Tips】

Core MotionのDevice MotionかARKitでデバイスの向きはとれます。

一周は6.28318531ラジアンです。

開始原点が0ラジアン。

デバイスのY軸を中心に回転させた場合、
右回りだとラジアンが加算。
左回りだとラジアンが減算されます。

**ただし、半周で+-が逆転します。**
右回りの場合、3.14ラジアンまで加算すると、次は-3.14ラジアンになります。

← -3.13 ← -3.14 ← **分水嶺** ← 3.14 ← 3.13

という具合です。

**条件式で右回りを判別する場合、加算しているかにくわえて、分水嶺の部分も判別しておく必要があります。**

“`swift
if rotation.y > recentRotation.y || (recentRotation.y > 3 && rotation.y < 0) { // 現在のラジアンが以前のラジアンより大きい、または、以前のラジアンが3以上で現在のラジアンがマイナス値の場合、右回り print("turning right!") } ``` 分水嶺を越えてしまえば、

元記事を表示

GoogleスプレッドシートとFastlaneでApp Store説明文を自動更新する方法

**大変なことはなるだけ機械に任せたい。**

当たり前ですが、iOSアプリを更新するにはアップデートの内容文なども更新する必要があります。

これまで自分は、運営さんがGoogleスプレッドシートに入力してくれたアプリ文言を、一個一個、App Store Connectにコピー&ペーストしていました。

たまになら問題ないですが、多くなってくるとちと大変です。自動化してラクしたい。ラクしたい。ラクできた!

というわけで、うまく行ったので、**GoogleスプレッドシートとFastlaneを使ってApp Store説明文の更新を自動化する手順を書いておきます。**

## 1. 用意するもの
– [App Store説明文を入力したGoogleスプレッドシート](https://qiita.com/drafts/0f15157e93b8b9339656/edit#2-app-store説明文を入力したgoogleスプレッドシートを作る)
– [fastlane v2.158.0](https://github.com/fastlane/fastlane)
– fastlaneは事

元記事を表示

TestFlight「”app name”をインストールできません あとでやり直してください」が起きて原因がキレそうだった件

## はじめに

タイトル通り、TestFlightにて急に昨日まで問題なかったインストールができなくなり、原因が謎過ぎて、今日7時間ぐらい使ってしまったのでキレそうになり、そのノリで書いてます。

## 原因

**接続しているノード(WiFi)が問題でした、、**
自宅のものでは問題なかったのですが、良くあるセキュアなWiFiではTestFlightからのインストールが出来ませんでした。
4Gに変えた瞬間解決しました(キレそう)

ただ、恐らくWiFiが問題と言うより、MacBook Proの方で先にWiFiにつないで認証した後だと、同じapple idを使っているiPhoneでは認証を求められなかった為だと思われます。

原因が分からなすぎて、冗談抜きで証明書50回ぐらい作り直して、試したので証明書周りはもう脳死で出来る様になりました?

後、試せる人が他にいればその人に試してもらうのが一番早いです!
その人が問題無ければ環境に違いって事に目付けれるので

## owari

何が言いたいかって、こんなものに時間を割いてるは本当にもったいないです、非合理的過ぎます。
と言う事で

元記事を表示

設計パターンMVCを学んだ

#設計について
まだまだ初学者なので、いろいろと学習の基礎が疎かです。特に今まで設計の学習全くしてこなかったので、[MENTA](https://menta.work/member/dash)で課題をだしていただき、ハンズオンで取り組みました。そこで学んだことを簡単にメモ書きします。
なお、学習したのは**MVCのみ**です。

##MVC: Modelにビジネスロジックを書く
MVCという設計について学習しました。
MVCそれぞれの頭文字は以下の略称です。
M:Model
V:View
C:Controller

今まで参考にしてきた学習教材が良くなかったのか、**Model**の役割をちゃんと理解していませんでした。Modelには主に**ビジネスロジック**を記述すると言われています。ビジネスロジックとは簡単に言えば、アプリやシステムで必要不可欠な処理(例えば、Firebaseの**ログインの処理**や**DBからの読み込み書き込み**、**API通信処理**など)を指しています。

参考

Viewは見た目の規定であり、ControllerはViewとModelの橋渡し的な役割で

元記事を表示

[初心者向け]DKimagePickerControllerのススメ

みなさんImagePickerController使ってますかー??
ライブラリから写真選択出来るヤツですね!!

でもImagePickerって写真一枚しか選択できないんですよね、、
オリジナルアプリ作りたかった僕は、なんとか複数選択出来るの探しました!

![8efce1b680fc1855f6785e8ba7b34374.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679429/7540910a-b99f-82d2-0b1a-1c4d42c390c7.gif)

はい、これです!!
僕は実際に触らないとわかんないのでこちらを参考に作ってみました。
https://github.com/metasmile/DKImagePickerController
https://teratail.com/questions/189732

![スクリーンショット 2020-09-08 18.15.12.png](https://qiita-image-store.s3.ap-northeast-1.ama

元記事を表示

【Flutter×Firebse】非エンジニアがパワーリフター向けアプリをリリースした話【個人開発】

# はじめに

最近、パワーリフター向けBIG3記録アプリ「LifterLog」をリリースしました。

[iOS版はこちら](https://t.co/AOEoEIMyEy?amp=1)
[android版はこちら](https://play.google.com/store/apps/details?id=jp.co.freadteam.lifterlog)

以前、Swiftで開発したアプリをFlutterで完全リニューアルしたのですが、
今回の開発→リリースまでの過程や得られた知見を共有したいと思います。

特にこれからアプリ開発やFlutterを始めようとしている人の参考になれば幸いです。
![lifterlog_screenshot_アートボード 1-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200520/7459183b-28bb-ad45-48a4-50a10ee6fe88.png)
※因みにパワリフターとは
[パワーリフティング](https://ja.wikipedia.or

元記事を表示

OTHERカテゴリの最新記事