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

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

UIPanGestureRecognizer(パン)とUISwipeGestureRecognizer(スワイプ)をいっしょに使う

同じviewにパンとスワイプを同時に与えると、パンしか効かなくなる。
素早くスワイプした時だけスワイプを発火してそれ以外の時はパンするコードがこちら。
基本PanGestureで、Pan速度が一定を超えた時だけSwipeになります。
[スタックオーバーフローの記事の引用です。元記事には実際のジェスチャアニメーションの様子があります。](https://stackoverflow.com/questions/4875255/is-there-any-priority-condition-between-gesture-methods-pan-gesture-and-swipe-g/48235812#48235812)

“`swift
let minHeight: CGFloat = 100
let maxHeight: CGFloat = 700
let swipeVelocity: CGFloat = 500
var previousTranslationY: CGFloat = 0

@objc func didPan(_ sender: Any) {

guard let pa

元記事を表示

Self-Sizing(Auto Layoutによる高さの自動調整)機能について

##はじめに
この機能を知るきっかけとなったのは、セルのimageViewを誤って大きくしてしまったことでした。
オレンジが変更箇所になってます。この結果、チェックマークが表示された時にCellが縦に大きくなると言う現象が起きました。
この件を相談すると、Self-Sizingという機能が元々備わっていて、セルの表示に影響が出たと分かりました。
![スクリーンショット 2020-11-17 20.27.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755375/aa1b3555-0eaf-a2dc-3de3-d2621e082281.png)

##Self-Sizingとは
タイトルにもある通り、セルなどの高さを自動で調整してくれる機能です。
Xcode 9(iOS 11 SDK)でデフォルトになったみたいです。それ以前はコードで表示しなければいけなかったみたいです。
私はデフォルトになってからswiftの勉強を始めたので気にしたこともなかったです。

##最後に
今回の件は、
そりゃ、セルの

元記事を表示

【SwiftUI】Mapkitから取得した情報をFirebaseに保存する

# はじめに
SwiftUIでMapkitとFirebaseを使用し、位置情報をデータベースに保存することを目的とする。
前回記事までにSwiftUIで取得した現在地から逆ジオコーディングし、都道府県名と市区町村名を取得するところまでを記載した。
今回は取得した情報をFirebaseに保存するところを記載する。
Mapkitを使った逆コーデイングについては前回記事を参考にしてください。

**参考記事**
[【SwiftUI】Mapkitを使った位置情報の取得と逆ジオコーデイング](https://qiita.com/m37335/items/a18c0e8979f76a5ad271)

# 開発環境
OSX 10.15.7 (Catalina)
Xcode 12.2.0
CocoaPods 1.10.0

# 本日の記事内容まとめ
1. Mapkitを使用して取得した位置情報をfirebaseに保存する。
2. ボタンを押したときにデータベースを更新できるようにする
3. 異なるView間でのデータのやり取りをできるようにする

# 今回記事で実装・更新したところ
今回記事で更新、

元記事を表示

Flutter実装時にお世話になったページ 2020/11/17

## なにか

毎回、同じ問題に、同じ検索して、同じページで解決してるので。。。

## TabBarViewのスワイプによる切り替えを無効にしたかった

[Stack Overflow “disable swiping tabs in TabBar flutter”](https://stackoverflow.com/a/51523272)

## Firebase の Cloud Messaging による通知がiOSで受け取れなかった

公式ドキュメントをちゃんと読めってことですね。
iOS Integration のステップ2で、以下を読み落としてたのと
> Don’t follow the steps named “Add Firebase SDK” and “Add initialization code” in the Firebase assistant.

Dart/Flutter Integration のここを実装せずにテストしてました。(Androidは無くても届く)

“`
import ‘package:firebase_messaging/fireba

元記事を表示

Xcode12 + SwiftPM + Firebase iOS SDKの注意点

### はじめに
Firebase iOS SDK も Swift Package Manager (SwiftPM) 向けの対応が進み、2020/8/25にリリースされた[v6.31.0](https://firebase.google.com/support/release-notes/ios#version_6310_-_august_25_2020) からβ版として提供され始めました。

[Swift Package Manager for Firebase Beta](https://github.com/firebase/firebase-ios-sdk/blob/master/SwiftPackageManager.md) に利用方法が掲載されており、とても簡単に SwiftPM で Firebase iOS SKD を組み込むことができます。

### Archive を処理する時の問題
ただ、アプリを Archive して Organizer で Distribute App や Validate App を実行すると次のようなエラーが発生してしまいます。

– Fo

元記事を表示

Swift4で同期通信をする

今回は、Swift4で同期HTTP通信を実現します。
使いどきはあまりイメージできておりませんが、書き換えチャレンジです。

# 参考にしたSwift2のコード

まず、Swift4で同期HTTP通信をするためにこちらのサイトを参考にしました。
サイトに掲載されていたSwift2のコードも、勉強のため載せておきます。

> [https://53ningen.com/synchronous-http-request-swift/](https://53ningen.com/synchronous-http-request-swift/)

“`Swift
public class HttpClientImpl {
private let session: NSURLSession
public init(config: NSURLSessionConfiguration? = nil) {
self.session = config.map { NSURLSession(configuration: $0) } ?? NSURLSession.shar

元記事を表示

子供用の学習アプリケーションを作る(2) アニメーション編

# はじめに
以前作成したアプリの続きをしていきます。
[参考: 子供用の学習アプリケーションを作る(1)](https://qiita.com/yoshii0110/items/ba2bf4023c4a6caf3431)

今回は、コンテンツの選択画面にアニメーションを導入し、選択後の詳細画面を作成したので、その実装について記事にしていこうと思います。

# 動作
まずは、動作を見ていただければと思います。

![test3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563635/8a3b3ed2-689d-83f3-3255-fd42bc6fbb4d.gif)

# 実装
## 構成
構成は以下のようになっています。

“`
❯ pwd
/Users/yoshitaka.koitabashi/Desktop/iLearn/src/components

~/Desktop/iLearn/src/components
❯ tree .
.
├── a

元記事を表示

Realm Databaseのバックアップとリストア

# Realm Databaseのバックアップとリストア
あまりRealmのバックアップとリストアについての記事が見つからないので投稿します。

### 環境
|環境|バージョン|
|—|—|
|Xcode|12.0|
|Swift|5|
|MacOS|Big Sur(11.0.1)|

### Libraryディレクトリ直下にバックアップ
`defaults.realm_bk_yyyy-MM-dd-hh-mm-ss`というファイル名で
現在のdefaults.realm(Realm Database本体)をバックアップします。

“`swift:Hoge.swift

private func hoge() {
do {
let url = try FileManager.default.url(for: .libraryDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
let dateformater = DateFo

元記事を表示

[iOS] frameとboundsの違いを理解する

「frameとboundsの違いってなんやねん!」となったので調べました。

# そもそもframeとboundsは
UIViewのサブクラスが持っているプロパティ。CGRectを返す。

英単語の意味的には[Weblio英和辞書によると](https://ejje.weblio.jp/)
### frame
>a 窓枠.
b 額縁.
c 背景.
d (温床の)枠組み,フレーム,温床.
e (刺繍(ししゆう)などの)製作台,掛け枠.
f 複数形で(眼鏡の)枠,フレーム.
g (養蜂の取りはずし可能の)箱形のフレーム.

要するに”枠”という意味(?)

### bounds
>1境界,限界(内); 立ち入り許可区域.
2限度,範囲; 境界線,限界

という意味らしい

## CGRectとは
[公式ドキュメント](https://developer.apple.com/documentation/coregraphics/cgrect)によると
> A structure that contains the location and dimensions of a rectangle.

元記事を表示

【iOS】半強制アップデートの仕組みをカジュアルに実装する

# はじめに

この記事では、**アプリを起動したとき、新バージョンがリリースされていることをユーザに伝え、アップデートを促す仕組み(この記事では半強制アップデートと呼ぶ)**の実装方法を紹介します。

強制アップデートはゲームアプリなどでよく見る仕組みです。アップデートするまでアプリを利用できなくすることで、常に最新バージョンで動かすことができます。ただ、必ずしもユーザがアップデートできる通信環境にいるとは限らないため、すぐに使いたいという時に使えないのは不便です。そういった使い勝手の観点から、僕はアップデートを促すまでに留めた半強制くらいが好みです。

さて、ユーザにインストールされているアプリのバージョンに乖離が生じると、最新機能を提供できないのはもちろんのこと、既存機能を改修しづらくなってきます。例えば、DBのマイグレーションを何世代かに渡って行っているとき、バージョンが飛んでいると思わぬバグを踏んだりします。

ユーザには常に最新バージョンを使ってもらうのが望ましく、アップデートを促す仕組みは積極的に取り入れた方が良いと考えています。

# iTunes Search API

元記事を表示

FirebaseでiOSのプッシュ通知を実装

#始めに
iOS アプリでプッシュ通知機能を実装しようと思ったら、想定より苦戦したので、振り返ってみようと思います。
#Firebase プロジェクトを作成する
[Firebase コンソール](https://console.firebase.google.com/?hl=ja “Firebase コンソール”)で [プロジェクトを追加] をクリックし、 [プロジェクト名] を選択して、新しいプロジェクト名を入力します。
#アプリを Firebase に登録する
1. Firebase プロジェクトを作成したら、プロジェクトに iOS アプリを追加できます。
[Firebase コンソール](https://console.firebase.google.com/?hl=ja “Firebase コンソール”)から、 [プロジェクトページ] に移動して、中央にある iOS アイコンをクリックして設定ワークフローを起動します。
2. アプリのバンドル ID を [iOS バンドル ID] フィールドに入力します。このバンドル ID を探すには、 XCode でアプリを開き、最上位のディ

元記事を表示

[Swift5]複雑なJSONの解析をおこない、条件を満たす要素のindexを取得する方法

## はじめに
JSON解析についてわからない方はコチラ▼の記事を参考にしてください。

**[Swift5]ライブラリ ‘SwiftyJSON’ を使ってJSONから配列(個別)の情報を取得する**
https://qiita.com/nkekisasa222/items/84c40bbfacfaca9f38a9

## JSONデータの確認

“`joyCountArray.
[{
“document_tone” : {
“tones” : [
{
“tone_name” : “Joy”,
“score” : 0.53749899999999995,
“tone_id” : “joy”
}
]
}
}, {
“document_tone” : {
“tones” : [

]
},
“sentences_tone” : [
{
“tones” : [

],
“text” : “Kozai \”Aza\” Haru

元記事を表示

【SwiftUI】Mapkitを使った位置情報の取得と逆ジオコーデイング

# はじめに
SwiftUIでMapkitとFirebaseを使用し、位置情報をデータベースに保存することを目的とする。
今回はSwiftUIで取得した現在地から逆ジオコーディングし、都道府県名と市区町村名を取得するところまでを記載。
Mapkitを使って現在置を取得する方法は前回記事を参考にしてください。

**参考記事**
[【SwiftUI】Mapkitを使った位置情報の取得とピンの表示](https://qiita.com/m37335/items/4592f4fc40a1d2b7da05)

# 開発環境
OSX 10.15.7 (Catalina)
Xcode 12.0.1
CocoaPods 1.10.0

# 取得した現在地から逆ジオコーディングを実行する

追加するのは“`makeCoordinator“`の下部に“`title“`と“`subtitle“`を定義します。

“`swift:ContentView.swift
func makeCoordinator() -> mapView.Coordinator {

元記事を表示

Unity Device Simulator のインストール方法

##背景
Device Simulatorのインストール方法が変わったようなので、忘却録として。。。

##開発環境
PC:macOS Catalina
Unity:2020.1.10f1

##内容
「Unity Device Simulator インストール」で検索すると、
同じような検索結果が出てくる。
メニューのwindowからPackage ManagerをクリックするとPackage Managerのダイアログが表示される。
ダイアログのAdvancedからshow preview pakagesにチェックを入れて、Device Simulatorで検索すれば見つかる、、、が肝心のAdvancedがない。

調べてみると、Unity 2020.1以降からインストール方法が変わったらしい。(参考のUnity 日本語ヘルプデスクに書いてあります)

書いてある通りにやれば、無事インストールでき、GameタブにGameとSimulatorを選択できるようになる。
Safe Areaを表示したり、回転することもできる。

![スクリーンショット 2020-11-16 2.17.5

元記事を表示

iOS14からIDFA取得がオプトイン形式になる理由と今後予想される動き

iOS14でも様々な機能で仕様変更がありましたね。
デフォルトブラウザを選択できるようになったので、Chromeに変更してみました。

そんなある日、ふとあることに気がつきます。
開発しているアプリでWebViewが開かないじゃないですか…!?

調査をしたところ、`LSApplicationQueriesSchemes`にURLスキームを追加していないのが原因でした。
そうしないと`UIApplication`の`canOpenURL`は常に`false`を返す仕様になっていました。

> you must declare the URL schemes you pass to this method by adding the LSApplicationQueriesSchemes key to your app’s Info.plist file. This method always returns false for undeclared schemes, whether or not an appropriate app is installed.
>
> 引用:[c

元記事を表示

初めてのiOS開発

今度会社の業務としてiOSアプリの開発を行うので事前に勉強しておこうと思いまして、今回の記事を書きました。自分の備忘録としてささっと作成したのでわかりにくいところが多々あるかと思います。そのうちちゃんと書こうと思います。

# xcodeのインストール
### Xcodeとは
XcodeはMac、iPhone、iPad、Apple Watch、Apple TV向けのアプリを開発できる環境を提供してくれるIDE(統合開発環境)です。
Xcodeを利用することで画面やコードの作成、デバック、App Storeへのアプリの提出ができるようになります。
SwiftやObjective-Cを使用して開発できます。
### インストール方法
App Storeからxcodeをインストールするか、下記のURLから直接xcodeのインストーラをダウンロードする方法があります。
https://developer.apple.com/download/more/
僕の場合,App Storeからインストールしようとするとxcodeの容量が大きいのかインストールできませんでした。
なので、xcodeのイン

元記事を表示

swift実践入門output Chapter5  後編

# 制御構文
条件分岐、繰り返し、遅延実行、パターンマッチ
プログラムの実行フローを制御する構文。制御フローの制御には条件分岐や繰り返しなどがあり、それを組み合わせ実行し自在に操る

###for-in文 シーケンスの要素の列挙
“`chapter5.swift
let array = [1,2,3]
for element in array {
print(element)
}
“`

###Dictionary
“`chapter5.swift
let dictionary = [“a”: 1, “b”: 2]
for (key,value) in dictionary {
print(“Key: \(key), vlue: \(value)”)
}

“`

###while文 継続条件による繰り返

“`chapter5.swift
var f = 1
while f < 4 { print(f) f += 1 } ``` ###repeat while文 while文は実行前に条件式を評価するため、場合によっては一

元記事を表示

swift実践入門output Chapter5

#制御構文
条件分岐、繰り返し、遅延実行、パターンマッチ
プログラムの実行フローを制御する構文。制御フローの制御には条件分岐や繰り返しなどがあり、それを組み合わせ実行し自在に操る

###if 文 条件の成否による分岐

“`chapter5.swift
let value = 5

if value <= 4 { print("valueは4以下") }else { print("valueは5以上") } ``` ###if let文 値の有無による分岐 オプショナル型とは変数にnilの代入を許容するデータ型で、反対に非オプショナル型はnilを代入できません。オプショナル型の変数にはデータ型の最後に「?」か「!」をつけます。 ```chapter5.swift let optionalA = Optional(1) if let a = optionalA { print("値は\(a)です") }else { print("値は存在しません") } let optionalB = Optional("b") let optionalC

元記事を表示

TableViewでのデータの読込・リフレッシュ・更新についての処理

# はじめに
Qiitaが提供しているAPIを使用して、`TableView`に記事を表示する際に、データの__読込__・__リフレッシュ__・__更新__について実装しましたので備忘録として投稿します。

# 概要
1. `QiitaAPI`の初期取得
2. 取得している`QiitaAPI`のリフレッシュ
3. `TableView`下部までスクロールした際に`QiitaAPI`追加取得

※上記にフォーカスをあたて説明になります。

# 動作環境
【Xcode】Version 12.0.1
【Swift】Version 5.3

# 実装コード

“`swift:CustomTableView.swift
import UIKit

class CustomTableView: UITableView {

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}

override init(fram

元記事を表示

iOSで動作する異常検知モデルを作った

## 背景

農業x深層学習のアプリケーションが作りたい!

という動機のもと、例えば作物の画像を入力してその健康状態を診断するようなアプリが作れるんじゃないかと考えてます。

病気を判定できるすごいモデルのせたアプリを作ったとして、ユーザが対象の作物の画像を正しく入力してくれるかどうかは、そのアプリの信頼性を担保する上で重要な問題になります。

例えば、上記の稲の病気を診断してくれるアプリを作ったとして、ユーザが雑草の画像を入力したとしてもそれっぽい結果を出力してしまえば、そのアプリの診断結果自体が疑わしいものになってしまいます。

![IMG_0168.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494791/b3a5cebf-2c4d-0655-6931-b14160465f41.png)

この問題に対処するため、メインとなるモデルの前段に入力画像の異常画像検知モデルを置いておけばよいのでは、と考えました。

![IMG_0169.PNG](https://qiita-image-store

元記事を表示

OTHERカテゴリの最新記事