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

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

[Swift] Alamofire+RxSwiftでUpload APIクライアントを作る

# はじめに

**アプリ内に画像のアップロード機能を実装したことがあるでしょうか?**

だいぶ前に書いた「[Alamofire+RxSwift+CodableでAPIクライアントを作る](https://qiita.com/H_Crane/items/d2d316b086745417ffae)」において、
**アップロードのクライアント**に関しては、触れただけで説明していませんでした。

というわけで、実際に作る必要に迫られたので、せっかくなので延長としてここにまとめておきます。

# 導入

## 1. 準備

「[Alamofire+RxSwift+CodableでAPIクライアントを作る](https://qiita.com/H_Crane/items/d2d316b086745417ffae)」の記事内で行なっている

“`
1. ライブラリのインストール
2. ネットワークプロトコルの作成
“`

上記までを必ず行なってください。
(次の手順と続いているため)

## 2. Upload Request用のProtocolを作成

**「1. 準備」**が完了し

元記事を表示

[iOS] Host Applicationを無効化してユニットテストを爆速化する

# はじめに

iOSアプリ開発において、テスト駆動開発(TDD)を採用していたり、ユニットテストを部分的に採用しているプロジェクトではユニットテストの実行速度が生産性に大きく影響します。

本記事ではHost Applicationを無効化してユニットテストの実行時間を短縮するためのTipsをご紹介します。

# ユニットテストの実行プロセス

ユニットテストの主な実行プロセスは以下のようになっています。

1. テストターゲットのビルド
2. シミュレータ起動
3. **テスト対象のアプリケーションの起動**
4. ユニットテスト実行

テスト対象のアプリケーション起動には数十秒かかりますが、実はこのプロセスは省略することが可能です。

# アプリケーションの起動プロセスを省略する

ユニットテスト時にアプリケーションの起動プロセスを省略するには

– **テスト対象のコードのEmbededd Frameworkへの切り出し**と
– **Host Applicationの無効化**

をする必要があります。

Embededd Frameworkへの切り出し方法は以下の記事が

元記事を表示

iOSアプリの配布方法まとめ

### はじめに

調べていくといろんな配信方法があったのでまとめてみました。

### 丸腰

| 配布方法| 詳細 |
| — | — |
| 実機デバッグ(開発用配布) | 開発中のアプリを Mac と iOSデバイスを直接 USBで繋いで Xcode 経由でインストールする方法 |

### Apple Developer Program $99/年

| 配布方法| 詳細 | 具体的なやり方 |
| — | — | — |
| Ad-Hoc(評価用配布) | 限られた数のユーザーのAppleデバイスに Appを直接インストールしてもらいテストする方法
iPhone (年間メンバーシップあたり100台)
iPad (年間メンバーシップあたり100台)
iPod touch (年間メンバーシップあたり100台)
App Storeを介すことなく、URLでアプリ配布が可能。
Apple Developer Plogram に登録していれば追加の費用はかからない。
デバイス追加の都度、UDID登録、プロビジョニングファイル

元記事を表示

iOSアプリのDEBUGビルドを高速にしてみた

##はじめに

現在開発中のiOSアプリ、xcodeでnativeで作ってるんですが、ビルドが遅くて耐えられない。
ほんのちょっとの修正でもデバイスで実行されるまで40秒かかったりする。

androidは大幅に修正してもせいぜい5秒程度なのに・・・。
くそが。

androidStuido 3.5は超偉い。

##実行に移す
そこで結構面倒だけど、前から考えてた方法をやってみることにした。それは・・・。

フレームワークをできるだけ外す。

以上。

・・・ではなんなので、具体的に説明すると、

– 空プロジェクト作って、ソース等全部ぶちこむ。しがらみが色々あるので、新規の方が苦労しなさそうなので。
– 開発に必要な最低限のフレームワークは追加する。
– DEBUGビルドのマクロに本番/開発の識別フラグを追加して、ソース上の、無いフレームワークが必要な箇所をコンパイルされないようにしたり。#if !xxflag/#endif ね。
– ほぼ空のダミークラスを、フレームワークのヘッダを元に作って、何もしないようにしたり。

を全部やると、きっとできる。
開発中に必要なのまでやると、動

元記事を表示

【iOS】APNS証明書登録手順 2020年版

# 概要
定期的にUIが変わってどれをどう選んで良いのか分からなく
なる場合もあるので2020年版の登録手順についてまとめました。

# 登録手順

## 1. キーチェーンで証明書署名要求の作成

こちらは他にいっぱい記事があると思うので割愛。

## 2. iOS Dev Centerで作成

### Apple Push Notification service SSL (Sandbox & Production)を選ぶ

もはやここを書きたくて記事にしたと言っても過言ではない。
どれを選べば良いのか分からなかったのですが、こちらです。
![スクリーンショット 2020-01-27 11.57.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11800/1fd1d17d-188f-973e-6c34-0c3fb9368f36.png)

### 対象となるApp IDを選択
![スクリーンショット_2020-01-27_11_57_43.png](https://qiita-image-sto

元記事を表示

CoreNFCのFelica(NFC Type F)

#はじめに
[前回](https://qiita.com/HAL27241/items/a2e04cf1a6ade2f7d2af)までで一応、NFC Type F のリードまではできるようになっていました。
今回はちょっとだけ補足とまとめをしますね。

#処理の流れ
##Session
まずは CoreNFC のセッションを作成します。

“`swift
let session = NFCTagReaderSession(pollingOption: [.iso14443, .iso18092],
delegate: self)
session?.begin()
“`

このとき、Type F 以外にも Type A/B も同時にスキャンしたい時はこんな感じになります。
もちろん、Type F だけで良い場合は `.iso18092` を指定すれば OK です。

スキャンして NFC タグが見つかったら、デリゲートが呼び出されます。
Type A/B/F でスキャンしている場合は、TypeA/B と Type F

元記事を表示

Swift(iOS)でイケてるトースト・バナー・ポップアップを導入する (SwiftEntryKit)

# SwiftEntryKit

トーストやポップアップ、プッシュ通知のようなビューを簡単に導入できるすごいライブラリ [SwiftEntryKit](https://github.com/huri000/SwiftEntryKit) をこの記事で紹介する。いくつか同様のライブラリ([Toast-Swift](https://github.com/scalessec/Toast-Swift)など)を試したが、SwiftEntryKitが圧倒的にイケてるUIUXを作れると感じた。イメージは以下の通り。

| Toasts | Notes | Floats | Popups |
| — | — | — | — |
| ![toasts_example](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122365/41fbd3bf-5e71-1eb4-982c-d52896800712.gif) | ![notes_example](https://qiita-image-store.s3.ap-nor

元記事を表示

【香川県】App Storeのガイドラインに抵触しない「ゲーム依存症対策条例案」対応を実装してみた【Unity】

![タイトルなし3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55365/3f8fe2e6-9d10-511e-d1eb-9cdc8b5ac610.gif)

## はじめに

香川県議会による「**ネット・ゲーム依存症対策条例案**」が話題になっています。

これは18歳以下の子どもがネット・ゲーム依存状態になることを防ぐ目的で、ゲームのプレイ時間を平日は60分(休日は90分)までに制限する項目が盛り込まれています。

問題は、ゲームソフトを提供する事業者等に対しても上記の条例に対して協力する義務を課せられる可能性があります。可決されたら**令和2年4月1日より施行**されるため、開発者としては早急に今後必要な対策が気になるところです。

スクリーンショット 2020-01-24 1.02.50.pngiOS, Androidアプリの強制アップデート(サーバーレス)

# はじめに
[文字列→塩基配列の相互変換ツールをつくってみた(アプリ版)](https://qiita.com/am10/items/3ecac20451c82133e900)でつくったアプリ

* [Mac](https://apps.apple.com/jp/app/dna%E5%A4%89%E6%8F%9B/id1494127578?mt=12)
* [iOS](https://apps.apple.com/jp/app/id1493994947)
* [Android](https://play.google.com/store/apps/details?id=am10.dnaconverter)

これに強制アップデート機能(半強制で抜け道あり)をつけてみました。

特に必要なわけではないですがこの記事([[iOS]アプリに強制アップデート機能を導入すべき理由と、簡単に実装する方法](https://qiita.com/kazu0620/items/f2f6c711c8800d127eb2))をみてやりたいと思い実装してみました。

が!!サーバーを用意するのはめんどくさい

元記事を表示

iosのgoodreaderでsftpのprivate-keyが読み込めない問題

これはmacのssh-keygenで作成されるコマンドの出力が変更されているので、昔作ったキーでは読み込めますが、新しく作ったキーは読み込めません。よって、キーを作り直すか、キー自体を編集しましょう。

“`shell
# 公開鍵、秘密鍵の作成
$ ssh-keygen -t rsa -b 4096 -m PEM -f ~/.ssh/goodreader

# serverにpublic-keyを登録
$ ssh-copy-id -i ~/.ssh/goodreader.pub user@192.168.1.11 -p 22

# ~/.ssh/goodreader
# (private-key)をiosのgoodreaderに持っていく
““

元記事を表示

【Swift】Lazyプロパティの使い方に気をつける(ドキュメントの確認は大事)

普段使っているものの
実は注意しないと予期せぬ動作を起こしてしまう可能性があるものは
意外とたくさんあると感じています。

そういう時
Swiftのドキュメントを見てみると
注意書(NOTE)があったりして役に立ちます。

今回は一つの例として
`lazy`のついたプロパティについて見てみたいと思います。

# Lazy Stored Property(遅延格納プロパティ)とは?

Swiftでは
`lazy`という修飾子を使うことで
最初に利用されるまで
初期化処理を走らなくさせることができます。

これを
Lazy Stored Property(遅延格納プロパティ)
と呼びます。

# どういうときに使う?

下記のような場合に役に立ちます。

– 初期値がインスタンス生成後の状態(他のプロパティなど)に依存している
– セットアップが複雑で重く、使われるまでは生成する必要がない

例えば
下記のようなCalendarクラスを考えてみます。

“`swift

class Calendar {
private lazy var formatter: DateFormat

元記事を表示

UIKitでNeumorphismのデザインを構築するライブラリ

Neumorphism(ニューモーフィズム)は、UIデザインの次のトレンドになるかもしれないと昨年末あたりから言われ出している表現手法です。本当にそうなるかどうかは分かりませんが、実験としてiOS用のライブラリ [EMTNeumorphicView](https://github.com/hirokimu/EMTNeumorphicView) を作ってみました。ここではその実装アプローチについて書きます。

#Neumorphismとは
フラットデザインやMaterial Designから、かつて流行したスキューモーフィックデザインに少し回帰したようなデザインといえばわかりやすいと思います。
EMTNeumorphicView screenshot

詳細は下記にあります。

– [Neumorphism in u

元記事を表示

意外と簡単、iOSアプリへAppleWatchアプリを繋ぎこみ!!

# はじめに
AppleWatchは発売からすでに5年が経過しようとしていますが、
アプリの作成に関する記事、事柄というのはまだあまり世の中に出回っていない認識です。
「今iOS向けに作成しているアプリに、AppleWatchのアプリを紐づけて配信したいけど、どんな手順が必要なんだろう?」
といったことでお困りの方も多いのではないかと多います。

本記事はそんな方向けに、**既存のiOSアプリへAppleWatchプロジェクトを紐づける際の手順・注意点を記載します。**

# 手順
※以下はすでにiOSアプリが存在する前提で話を進めていきますが、
仮にAppleWatch単体で動くアプリを作りたい!という場合にも、概ね参考にはなるかと思います。

## AppleWatchプロジェクトの作成
– なにはともあれ、まずはXCodeを開きます。
– 次に、Xcode上部の `File → New → Target…` を選択します。
下記のようなウィンドウが開くので、[Watch App for iOS App] を選択し、[Next]を押下します。
※ち

元記事を表示

[Swift]アクセスレベル

今回はアクセスレベルについて書いていきたいと思います?
よく変数や関数の前にPrivateといったのを見たことはありませんか?それの事です?

対象はSwift5です。
公式ドキュメントは[こちら](https://docs.swift.org/swift-book/LanguageGuide/AccessControl.html)

##アクセスレベルとは
簡単に言うと宣言した変数やメソッドなどを何処でも使えるようにするか、又は制限した範囲でのみ使用可能にするか設定することです。

全部で5つあり、それぞれ特徴があります。

| アクセスレベル | 説明 |
|:——————–|:——————|
| Private |宣言したコードブロック内でのみアクセス可能(これの中→{}) |
| FilePrivate |宣言されたファイル内でのみアクセス可能 |
| Internal |アプリのモジュール

元記事を表示

【Swift】touchesMovedが実行される最小移動量について【Tips】

連続的なジェスチャーの検知に使われる `touchesMoved` が実行されるタイミングに関して調査してみたので簡単にまとめる。

# 検証環境
– Swift5.0
– iPhone6s(iOS13.3)

# 検証方法
以下の様なコードでコンソールに測定した位置を出力することで検証した。

“`
override func touchesMoved(_ touches: Set, with event: UIEvent) {
let latestTouch = touches.first
let newPoint: CGPoint = (newTouch?.location(in: view))!
// previousPointはクラスのプロパティとして保持
let translation = CGPoint(x: previousPoint.x – newPoint.x, y: previousPoint.y – newPoint.y)
previousPoint = newPoint
print(translati

元記事を表示

mediapipeをiOSアプリに組み込む

# mediapipeとは

Googleの開発しているML推定のパイプラインを簡単に設定できるライブラリ。Windowsを初めiOSやAndroidなどマルチプラットフォームに対応している。

https://github.com/google/mediapipe

mediapipeにはプリセットで手や関節の位置推定や顔の位置推定のモデルがバンドルされていてexampleで確認することができます。
https://github.com/google/mediapipe/tree/master/mediapipe/models

![sample.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24979/91e9bd2a-8d3f-0e6f-f59d-c370e91b6eed.gif)

# iOSアプリにmediapipeを組み込む

iOSアプリにmediapipeで作ったパイプラインを組み込むには、一度フレームワークとしてビルドするかiOSアプリをbazelで管理する必要があります。
ここでは

元記事を表示

チェインオブレスポンシビリティをSwift5で実装する

※この記事は「全デザインパターンをSwift5で実装する」https://qiita.com/satoru_pripara/items/3aa80dab8e80052796c6 の一部です。

###The Chain Of Responsibility(チェインオブレスポンシビリティ)

####0. チェインオブレスポンシビリティの意義

あるリクエストを処理する複数のオブジェクト(レシーバーまたはレスポンダーという)がある場合、レシーバーを線形リストで繋げてリクエストを処理させるパターンをChain of Responsibilityという。

各レシーバーは次のレシーバーへの参照を持っており、あるリクエストを処理するのに適切なレシーバーが見つかるまで(あるいはレシーバーがなくなるまで)リクエストを次のレシーバーへ渡していく。

このレシーバーを組み合わせた「鎖」をプログラム実行時に動的に作ることもでき、柔軟な処理が可能となる。

例えばiOSにおいては、画面をタップした時の処理がこのパターンによって処理されている。

リクエストを処理するレシーバが1, 2個しかない場合などは、

元記事を表示

appiumをiOSの実機で使うまでの手順・方法

appiumをiOSの実機で動かすまでの手順です。

### 使用環境

使用環境は以下の通りです。
Xcode, command line toolsはインストール済とします。

Mac OS Catalina(10.15.2)
Xcode 11.2.1
appium v1.15.1

### Appiumのダウンロード

公式サイトより環境にあった物をDLする。
http://appium.io/

### Appium側の設定

ダウンロードしたら起動をし、Start Serverをクリック

スクリーンショット 2020-01-23 13.04.00.png

Start Serverをクリックするとログが出る画面になるので虫眼鏡ボタンをクリック

スクリーンシ</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>test</div>
<div class='tag-cloud-link'>WebDriver</div>
<div class='tag-cloud-link'>iOS</div>
<div class='tag-cloud-link'>appium</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/tatetate55/items/dcdc2633cf8ab5ced113'>元記事を表示</a></div>
<h3 id=UISearchBarのキャンセルボタンをアニメーション付きで表示したい話

UISearchBarをタップして編集状態中だけキャンセルボタンを表示したいと、
ちょびっと悩んだので備忘録として書いときます。

↓こんな感じのやつ
![qqytl-ojzlm.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542129/ad6d45db-b35f-7f6e-dc42-8b66beb6c2c0.gif)

# アニメーション無しの場合

showsCancelButtonを使うことで表示の制御はできますが、アニメーションはありません。

“`swift
searchBar.showsCancelButton = true
“`

# アニメーション有りの場合

setShowsCancelButtonを使いましょう

“`swift
searchBar.setShowsCancelButton(true, animated: true)
“`

# 実装例

コピペをこよなく愛する者たちへの贈り物です?

“`swift
import UIKit

class ViewCo

元記事を表示

UITextFieldで文字を入力した後にキーボードをしまう方法

## 今回の記事を書く理由

初学者に多い気がしますが、UITextFieldで文字を入力した後、キーボードが勝手に閉じてくれないのでそのためのコードを書く必要があります。

意外と何回も調べていたりしていたためメモの代わりに書きます。

今回は説明を交えながら書いてきます。

## xcodeでreturnの文字を変更

まずxcodeでreturnの文字を変更することができます。

スクリーンショット 2020-01-22 14.11.32.png

## ソースを追加

### 全体像

この後説明していきます。

“`swift
class ViewController : UIViewController, UITextFieldDelegate {
@IBOutlet var textFiel

元記事を表示

OTHERカテゴリの最新記事