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

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

【Swift】extensionを使おう

##はじめに

Swiftにはextensionという仕組みがあります。
クラスを継承せずとも、既存クラスに機能を追加できる、という大変便利な機能です。

開発するアプリに実装する処理内容が多くなってきても、extensionを有効活用することで簡潔なコードで表現しやすくなります。
脱初心者を目指す上で理解必須の仕組みだと思います。

##例1: Date型に日付文字列を生成するメソッドを追加

“`swift:DateExtension.swift
extension Date {
func getDateTimeString() -> String {
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: “en_US_POSIX”)
dateFormatter.timeZone = TimeZone.current
dateFormatter.dateFormat = “yyyy/MM/dd HH:mm:

元記事を表示

【Swift】Cのsprinftfみたいなことをしたい

##やりたいこと

指定したフォーマットに従って、指定した値を文字列にして表示したい。
要は C言語でいうところの下記みたいなことをしたい。

“`c:sprintf.c
sprintf(str, “%.2f”, pi)
“`

##実装方法

String型のイニシャライザに、format文字列を引数に取るものがあるので、それを使います。

“`swift:stringformat.swift
let pi = 3.14159
let str = String(format: “%.2f”, pi)
print(str)
“`

“`text:出力結果
3.14
“`

四捨五入して整数表記で表示する場合などにも利用できます。

“`swift:stringformat2.swift
let height = 182.9
let str = String(format: “%.0f”, height)
print(str)
“`

“`text:出力結果
183
“`

String型を引数に取ることもできます。
この場合にはフォーマット文字列は `%@` を使

元記事を表示

【Swift】あるモノを一意に識別するためのIDを生成する方法(UUIDの利用)

##やりたいこと
アプリ内であるモノを一意に識別するためのID(ユニークなID)が必要なシーンは比較的よくあると思います。
主に何かと何かを紐付ける必要がある場合、がそれにあたるかと思います。

このような場合、簡単に思いつくところだと、

* 連番をふる
* 時刻を使用した文字列を作る

などがありますが、処理の並列度が高い場合などはこれらの方法では必ずしも十分ではないかもしれません。

簡単に一意なIDを生成する方法があります。UUIDというものを使います。

##UUIDとは

ソフトウェア上でオブジェクトを一意に識別するための識別子で128bitの数値で表されます。
衝突を避けるような生成方法も含めて規格化されています。

文字列として表記する場合、`550e8400-e29b-41d4-a716-446655440000` のような16進数表記で表されます。

SwiftにもこのUUIDを生成する機能が標準で用意されています。

##UUIDの生成方法

UUIDを生成して、それを16進数表記文字列にして、プリントする処理は下記のように実装できます。

“`swift

元記事を表示

【Swift】クリップボードに文字列をコピーする

##やりたいこと

iOSアプリからクリップボードに文字列をコピーする。
アプリ開発していると時折必要となる要件かと思います。

##実装方法

実装方法は非常に簡単です。1行でできます。ライブラリのインポートも必要はありません。

“`swift:copy2clipboard.swift
UIPasteboard.general.string = “コピーしたい文字列”
“`

##動作確認環境
Xcode: 11.7
iOS: 13.7
Swiftバージョン: Swift5

以上

元記事を表示

【Xcode】Archive→ipa作成まで

キャプチャ多め
2020/10/30現在のキャプチャです
Xcode ver 11.3
#想定
動作確認をしたい人が遠方にいて
サクッと現状のアプリを試しに手元の端末で使ってみたい時。
ストア経由のAdHoc配布、Enterprise配布等ありますが、
今回は審査もなく手頃な方法の後述する**Development**で進めます。

#まずアーカイブ
ipaを作るにはアーカイブが必要なので実行します。
Xcodeの `Product → Archive `でアーカイブ実行できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/829684/644a4a82-d2f1-6c89-1037-884218e6c4bc.png)

**Archiveがグレーアウトして実行できない時**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/829684/cc79e775-ce0e-f51c-7f16-

元記事を表示

【Swift】Table View Cell、外部URLへ飛ぶ方法

#はじめに
TableViewCellを使用し、アプリに自分のホームページのリンクを貼りたいと思ったのですが、すぐに検索できなかったので覚え書きとして記載しておこうと思います。
※初学者のため、もし間違いがあれば教えていただけると幸いです。

#完成品
今回の説明ではTabelViewCellの「Google」をタップすると「Google」のページへ飛ぶようにしています。
※今回、Googleさんのページを見本に使わせていただきました。
![ezgif.com-gif-maker.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/683624/0134afa5-0cf9-935c-5c25-0810fe88841c.gif)

#Story boardにTable Viewをセット
![スクリーンショット 2020-10-30 6.24.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/683624/9118a0b9-9

元記事を表示

iOS14から始めるピクチャ・イン・ピクチャ

# 1. はじめに
iPadではすでに導入されていたピクチャ・イン・ピクチャがiOSにも対応しました。
これからアプリケーションに導入するに当たっての流れを記述します。

# 2. ピクチャ・イン・ピクチャについて
ピクチャ・イン・ピクチャを導入することにより、動画再生が他アプリ上でも可能になります。

また、アプリケーションがピクチャ・イン・ピクチャに対応しており、
自動再生が有効になっていればホームボタンを押した時に開始されるようになっています。

## 2-1. ピクチャ・イン・ピクチャの自動再生について
アプリケーションがピクチャ・イン・ピクチャに対応している場合、
視聴中にホームボタンを押した場合の挙動設定が設定アプリに存在します。

### 2-1-1. 設定アプリの項目追加箇所
iPhoneを利用している一般的なユーザーはなかなか気付いていないと思います。
設定アプリの2階層程潜った箇所に追加されています。

|項目|iOS14|iPadOS13|
|—|—|—|
|階層|設定 → 一般 → ピクチャ・イン・ピクチャ|設定 → ホーム画面とDock → マルチ

元記事を表示

【iOS】画像が一色に塗りつぶされてしまうときの対処法

NavigationBarにオリジナルの画像を置いて、少しリッチにしたいこと、ありますよね?
そのとき、いつものやり方でやろうとすると青一色で表示されてしまいます。

・理想

・現実

こうなることを回避するためにどうすればいいのか、備忘録的に残しておきたいと思います。

## いつものやり方

まずはいつもどおりにやってみます。コードで書くとこんな感じでしょうか

“`swift
override func viewDidLoad() {
su

元記事を表示

[Swift]Bool型について要約

## はじめに
今回は`Bool型`についてアウトプットします。というのも、`String型`や`Int型`については説明できるものの、Bool型については言語化できていなかったのでこの場で改めてアウトプット。

## Bool型とは
プログラミング言語の世界には`真理値`という概念が存在する。その真理値を表す方が`Bool型`である。
真理値を表すリテラルには、`true`と`false`があり、変数に`true`または`false`を代入すると暗黙の型として`Bool型`が割り当てられる。

“`
var sample = true //Bool型
“`

## Bool型の活用法
Bool型は`論理演算`に使用される。演算とはデータにあにかしらの加工を施してその結果の値を得ることです。

## 論理演算と演算子
|種類|内容|使用する演算子|
|——|—-|——-|
|否定|真理値の真偽を反対にする|前置演算子!
|論理和|複数の真理値のどちらかが真なら真|中値演算子|||
|論理積|複数の真理値のどちらも真なら真|中置演算子&&|

## 論理演算の例

元記事を表示

プロトコルとクラスと構造体の違いをざっくり理解しよう!

今回は、,プロトコル、クラス、構造体の違いについて学習したので、アウトプットしていきます
※以下の内容は、学習内容のアウトプット用のため、誤りがある場合があります。予めご了承ください

#プロトコルとは?
プロトコル(protocol)とは、直訳すると「条約」、「議定書」、「規約」のような意味になります。
Swiftの言語においては「開発者とSwift言語との約束ごと」を意味します.

まずは、宣言の書き方を見ていきましょう。

“`swift:qiita.rbvar
protocol <プロトコル名> {
}
“`
基本的にこのような形で宣言します。classとの違いは、「class」というキーワードが「protocol」になっただけです。
では、さらに深堀りしていきましょう。

#プロトコルでのメソッド
ここからが、プロトコルとクラスの明確な違いですが、***プロトコルではメソッドを書く時メソッドの中身を書きません。***
書き方は以下のようになります。

“`swift:qiita.rbvar
protocol <プロトコル名> {
func<メソッド名>()

元記事を表示

GitHubActionsにてCookiecutterで作ったiOS向けボイラープレートをCIしてみた

## はじめに

[以前投稿したCookiecutter用のiOS向けのボイラープレート](https://qiita.com/satoshin2071/items/82777dee4dbad5f04f94)を
今後も有効利用すべくGithubActionsで回してみた際の備忘録です。

**※GithubActions や Cookiecutter等の説明は省略します**

## GitHubActionsで設定しているyml

https://github.com/SatoshiN303/iOS-Blueprints-CleanArchitecture/blob/master/.github/workflows/swift.yml

![スクリーンショット 2020-10-30 0.17.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6691/9e96718c-a0a3-60b9-0d8d-05c8ad89aa4d.png)

### 前半部分: 実行環境の設定

前半部分でビルドをするため

元記事を表示

iOS(iPad/iPhone)Safariでのデスクトップ用ページの開き方と挙動の違い

iOS Safariでデスクトップ用サイトを表示する方法と、挙動についてまとめました。
## SafariからPC用ページを開く方法
SafariからPC用ページを開く方法は以下の2通りがあります。
 ① OSの設定 > Safari > デスクトップ用Webサイトを表示の項目をONにする
 ② SafariでWebページを開く > ヘッダーの「デスクトップ用Webサイトを表示」をTapする
 ※ スマホ用(モバイル用)を表示したいときは、↑の部分が「モバイル用Webサイトを表示」に変わっている

#### ① OSの設定 > Safari > デスクトップ用Webサイトを表示の項目をONにする
[![Image from Gyazo](https://i.gyazo.com/162ab3e56ee9029080ba501d7056a68b.png)](https://gyazo.com/162ab3e56ee9029080ba501d7056a68b)

#### ② SafariでWebページを開く > ヘッダーの「デスクトップ用Webサイトを表示」をTapする
[![Im

元記事を表示

【Core ML】YOLO v3をCoreMLに変換する方法

YOLO v3をCoreMLに変換してみたので手順を書きます。

YOLO v3は、物体を検出するアルゴリズムです。
YOLOをiOSで動作させるのに一番簡単な方法は、[Apple公式のCore MLモデル](https://developer.apple.com/jp/machine-learning/models/)をダウンロードして使用することですが、今回は手動で変換してみました。

[オリジナルのYOLOv3](https://pjreddie.com/darknet/yolo/)はDarknet構築されていますが、今回はこちらにあるKerasに変換したものを使用します。

qqwweee/keras-yolo3
https://github.com/qqwweee/keras-yolo3

### 手順

Google Colaboratoryでの手順を示します。

**1.必要なライブラリをインストール & インポートする**

“`Python:Notebook
!pip install tensorflow-gpu==1.14.0
!pip install -U co

元記事を表示

実機テストってどうやるの?

#やりたいこと
実機デバイス(iPad)の表示確認をしたい.

#条件
– プロキシの設定が必要

#手順

「設定」 -> 「Wi-Fi」 -> 対象のネットワークのℹ️ボタンを選択して詳細設定画面へ
![D282083E-0B1D-4E3D-BBB8-8A45BAB953B1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377231/bfb90eaf-3fae-15f3-1889-17455b5f15e4.png)

「プロキシ」 -> 「手動」 -> サーバとポート番号を設定
![62C24F1A-5437-4EAD-A777-06F27199900A (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377231/dcc82a9b-2a08-f11d-6f02-5eacb5ba9942.png)

「一般」 -> 「プロファイル」
![AB687199-12DA-44CB-B66D-BE31153

元記事を表示

[Swift]配列の要素数を取得する方法(超基礎)

“`ViewController.swift
//配列を定義
let fruitArray = [“パイナップ”, “キウイ”, “マンゴー”]

//ここで配列の要素数を取得
let length = fruitArray.count

//取得結果を表示
print(length) //結果(3)
“`
これで要素数の取得ができます。
要素数の取得ができるとその数で条件分岐などもできるので便利ですね。

“`ViewController.swift
//配列を定義
let fruitArray = [“パイナップ”, “キウイ”, “マンゴー”]

//ここで配列の要素数を取得
let length = fruitArray.count

//条件分岐例
if length == 1 {
//1の場合の処理を記述
} else if length == 2 {
//2の場合の処理を記述
} else if length == 3 {
//3の場合処理を記述
}
“`

元記事を表示

俺的RxSwiftまとめ⑤(Subjects/Relayとは?)

この記事は、[俺的RxSwiftまとめ①](https://qiita.com/_Masa_asaM_/items/5b15094e047633070b92),[俺的RxSwiftまとめ②](https://qiita.com/_Masa_asaM_/items/4c75b2be7e4074efec45),[俺的RxSwiftまとめ③(Observableとは何か? – その1)](https://qiita.com/_Masa_asaM_/items/17bf07d13aae320b464f),[俺的RxSwiftまとめ④(disposebagとは?)](https://qiita.com/_Masa_asaM_/items/0b1196940cb3f5fcfe0b)の続きです。

#Subjectとは何か?
`Subject`は`observer`としても`observable`としても動作するもの。
イベントの受け取って処理/イベントを発生させることができるものである。。

##PublishSubject
`PublishSubject`は、初期値無しの状態でスタートし、`su

元記事を表示

【Vison・Core ML】画像分類を行うiOS機械学習アプリのコード解説

# この記事は何?
Appleによるサンプルコード「[VisionとCore MLでの画像の分類](https://developer.apple.com/documentation/vision/classifying_images_with_vision_and_core_ml)」のソースコードを理解したかったので、整理しました。

###環境
macOS 10.15.7
Xcode 12.1
Swift 5.3

#ソースコード
###ビューコントローラーのコード
実際にダウンロードできるプロジェクトは、現在(2020.10.29)のXcodeではそのままビルドできませんでした。
そのため、Xcodeによる最適化を実行した上で、いくつかの部分を修正しました。
以下は、実装部分を省略したものです。

““swift:ImageClassificationViewController.swift
class ImageClassificationViewController: UIViewController {
// IBOutlets
@IBOutlet w

元記事を表示

Segmented Controlの使い方と注意ポイント

# 前提
Segmented Controlを使うときに、ミスをしがちな部分の備忘録です。
※実際、このミスに気づかず、Segmented Controlの導入を見送っていました。。。

# 使い方
##[1] パーツを配置
![スクリーンショット 2020-10-28 22.47.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/00c9dcde-d9a4-7f33-9fee-efde532284c7.png)
![スクリーンショット 2020-10-28 22.50.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/1e5f074b-3802-49e8-82a9-abc1241a8f80.png)

##[2] パーツを編集
![名称未設定2.001.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32

元記事を表示

iOS14のIDFA関連記事をまとめました

### [iOS 14における広告トラッキングの変更の適用延期について | Adjust](https://www.adjust.com/ja/blog/what-you-need-to-know-about-the-delay-to-ios-14-ad-tracking-changes/)

#### 概要

– App Tracking Transparencyフレームワーク用のAppleポップアップを表示しユーザーから許諾を得なくても、以前と同様にIDFAを取得できる。
– ユーザはアプリベースで個別にトラッキングを拒否できる。ユーザーが全てのアプリのトラッキングを拒否した場合、IDFAはリセットされる。
– アプリのrequestTrackingAuthorizationコードにより、ユーザーはアプリ毎にオプトアウトができる。
– requestTrackingAuthorizationのメソッドが呼び出され、ユーザーが同意のリクエストを拒否した場合、IDFAは取得できない。
– 上記の変更点は2021年初旬まで有効となる。

#### IDFAへのアクセス

– iOS 14

元記事を表示

生データの揺らぎをフィルタで整える

##フィルタリングの意義
センサにはノイズがつきものです。突然データがピンッと跳ねることがあります。
また人間は非常にアナログです。指を止めているつもりでもデータがブルブルと揺らいだりします。

これをそのままデジタルに用いると非常に不安定なシステムになってしまいます。
そこで生のデータを整えるフィルターが重要となります。

##フィルター
指数移動平均(EMA)フィルターを用います。[(参照)](https://ja.wikipedia.org/wiki/%E7%A7%BB%E5%8B%95%E5%B9%B3%E5%9D%87#%E6%8C%87%E6%95%B0%E7%A7%BB%E5%8B%95%E5%B9%B3%E5%9D%87)

“`math
S_t = α \times Y_{t-1} + (1-α) \times S_{t-1}
“`

αの値が大きいほど古い値の重みが小さくなります。逆も然り。

####ローパスフィルター
瞬間的な変動値を減衰します。ブルブルを抑えたデータが得られます。

“`swift
var lastVal: CGFloat = 0.0
v

元記事を表示

OTHERカテゴリの最新記事