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

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

[WIP][iOS]テストケース作成

#### 異常系テスト

典型的には通信処理(API呼び出し処理)の失敗時など。

Moyaの[StubProvider](https://qiita.com/satoru_pripara/items/6b637ebf7dddd7cbad67#stubproviderの利用)を使うと良い。

#### 同値分割

同値分割とは「入力を意味のあるグループ(同値クラス)に分け、各グループから代表値を選ぶ方法」。数値の入力値のほか、その他にも応用はできる。

##### 画像サイズ

iPhoneの[画像サイズ](https://qiita.com/pe-ta/items/b3b754bde584abc98f44)は11種類くらいあるので、使う中で最小、最大、中くらいのサイズの端末で試すなどし、レイアウト崩れがないか試す事が考えられる。

##### OSバージョン

対象となるバージョンで最低一個ずつ試す(iOS12, 13, 14)など。

#### 参考

[WRブログ – テストケース作成のポイント](https://webrage.jp/techblog/testcase_p

元記事を表示

UICollectionViewでUITableViewのようなUIを実現する。ただし#available(iOS 14.0, *)

# はじめに
この記事は2020年の[RevCommアドベントカレンダー](https://qiita.com/advent-calendar/2020/revcomm)6日目の記事です。5日目はmojajaさんの「[ApolloServerでGraphQLを体験する](https://qiita.com/mojaja/items/c2ea0e42be4fb022fc8b)」でした。

こんにちは。RevCommでスマフォアプリを担当している[@sohichiro](https://qiita.com/sohichiro)です。

Twitterを眺めていると、ふと目にしたつぶやきがありました。

Ethereumでガチャりたい!

## はじめに
**Ethereum** のゲーム **dApps** を眺めていると、トークンの売り方として「**セール形式**」が多い印象です。

セール形式とは、運営さんが事前に発行しておいたトークン(キャラやカード)を販売する形式で、「**超強いキャラは値段を高く**」、「**そこそこの強さであれば安く**」といった売り方です。
![cut01](https://user-images.githubusercontent.com/13220051/100993600-f5331980-3598-11eb-9918-27d4000e7f58.png)
一方で、スマホアプリでよくあるのが「**ガチャ形式**」です。

ガチャ形式とは、プレイヤーがガチャを引くたびにトークンが発行される形式で、トークンには内容に応じた確率が設定されます。
1回の値段は抑えめにしておき、「**超強いキャラは低確率で排出**」、「**そこそこの強さであれば高確率で排出**」といった売り方です。
![cut02](https://user-images.githubusercontent.com/13220

元記事を表示

iOS14 で実装された PIP の操作感を UIKit で再現してみた

# はじめに
今回は、 iOS14 で実装された純正ピクチャ・イン・ピクチャ(PIP と表現)の挙動を再現するにあたってこだわったアニメーション周りの処理についてご紹介いたします。
ご紹介する挙動を皆さんにもより早く体感していただけるよう、この度**自作PIPの実装をサポートライブラリを作成** いたしました! iOS14 未満でもPIPをプロダクトで利用することが可能となりますので、ぜひそちらも参考にしてみてください。

[?FloatingShowable](https://github.com/AkkeyLab/FloatingShowable)

# 前提条件
この記事は [FloatingShowable](https://github.com/AkkeyLab/FloatingShowable) を軸に執筆いたしました。このライブラリの機能を簡潔にご紹介いたします。

– UIViewController を FloatingShowable に準拠させるだけでPIPに対応
– 上下左右の4箇所に静止
– PIP から指を離した時、加速度を加味して静止位置を決定
– PIP

元記事を表示

登山アプリについてメモ(2020年の年末)

#登山アプリ
昔はケータイのGPSになんて頼るなんて考えもしませんでしたが、もう位置情報などはスマホアプリで確認するような時代になりつつありますね。
なかなか登山アプリも発展してきて面白そうだなぁと思う今日この頃です。
自分のアプリ開発にも役に立ちそうなので、今現在の登山アプリについてそれぞれ軽くメモしておこうと思います。

ヤマレコ
マップ表示及び山行記録ができます
Webサービスとしてのヤマレコは以前から山行記録サービスとして有名(お世話になりました)
無料だと地図は一度に2つまで
プレミアムプラン(年3400円または4900円)もあり
日記などSNSもあり
App内広告あり
地図はGoogle Map(国土地理院地図)など
(ヤマレコAPIもあります)

YAMAP
マップ表示及び山行記録ができます
ライト層にも使いやすい、初心者に優しい?
シンプルで今風なデザイン(結構なお金かけてそう)
タイムラインとかフォロワーとかSNS的な面も多い
YAMAP STOREもありアウトドアグッズが買える
無料だと地図は一度に5つまで
プレミアムプラン(月480円ま

元記事を表示

[iOS]Storyboardを使わずにアプリを初期化する

皆さんはStoryboardを使わずにアプリをiOSアプリを開発したことはありますか?

今までRubyやReactなどのWeb系の言語を使って開発してきた僕にとってはGUIを使ってアプリを構築することに少し違和感があったと同時に、全部コードで実装したいと思っていました。
Storyboardを使わずにアプリを初期化することで、Interface Builderが裏で行っている事、Interface Builder及びStoryboardのありがたみに気付く事が出来たのでまとめます。

# 対象読者
– Storyboardを使った開発はある程度慣れてきた人

# バージョン
Swift 5.3
Xcode 12.2
iOS 14.2

# 事前知識
Storyboard無しで開発する上で、アプリの描画周りのクラスについて知っておいたほうが良いと思うので軽く説明しておきます。

## UIView
UIViewはUIを配置するベースとなる要素です。また画面に配置するすべてのUI(ボタン、ラベルなど)が継承するクラスです。
プロジェクトを初期化すると生成されるViewController

元記事を表示

SwiftConfettiViewを使って紙吹雪を降らしてみた

#はじめに
現在開発中のプロダクトで紙吹雪のアニメーションを入れたいと考えライブラリを探したところ、とても利用しやすいライブライだったので、もし「紙吹雪を降らして画面を豪華にしたいなー」と考えている方がいれば少しでも参考になれいいなと言う気持ちを込めて記事を書きました。
#完成形
ezgif-6-9dfc727a8702.gif
#使用したライブラリ
[SwiftConfettiView](https://github.com/ugurethemaydin/SwiftConfettiView)
#準備
プロジェクトを作成し、Storyboardに以下のようにパーツを配置してください。
スクリーンショット 2020-12-05 20.48.06.pnSwiftのバグを報告する方法

##はじめに
Swiftのバグを報告する機会があったので、その方法について簡単にまとめます。
一応参考:
[Jiraにて私が報告したバグ](https://bugs.swift.org/browse/SR-13922?filter=-5)
[報告したバグについてのQiita記事](https://qiita.com/aphananthe42/items/242c3b1a842ec550bfd8)

当然ですがswift.orgに全て詳しく載っているので、原典にあたりたい方は以下からどうぞ
https://swift.org/contributing/#reporting-bugs

##必要なもの

* Jiraアカウント
* 報告するバグのテストケース
* XcodeとSwiftのバージョン情報
* (若干の)英語

##手順

###1. Jiraにアクセスする
Swiftのバグ報告にはJiraというタスク管理ツールが使われています。
バグ報告のためにJiraアカウントを作る必要があるので、持っていない方は以下リンクからアカウント作成してください。
https://bugs.swi

元記事を表示

Flutterの2DゲームエンジンFlameはドット絵ゲーム作成におすすめ?

本記事は[Flutter #2 Advent Calendar 2020の5日目](https://qiita.com/advent-calendar/2020/flutter-2)の記事です:santa:

# はじめに
2020年はゲームギアミクロ、ミニテトリス、ゲーム&ウォッチなど携帯ゲームがいっぱい発売されました!

というわけでゲームギアミクロと同じくらいのサイズのAndroidスマホ、Jelly Pro向けにゲーム&ウォッチ風アプリを作ってみました。(上の大きく見えるのはPixel4です)

iOSアプリのリリース申請をけっこう丁寧に記事にしてみた

#あいさつ
iOSアプリのリリース申請を最近行いました。(他のアプリと差別化をしてくださいとリジェクトされましたがw)
リリース申請が結構めんどくさくて、手順を自分用にメモしました。
間違ってるところあったらごめんなさい。

※プッシュ通知などがアプリに実装されている場合、追加で設定を行う必要があります。本記事は対応しておりませんのでご注意ください。
※アプリのリリースはApple developerプログラムへの加入が必須です。(有料)

参考記事:
[[2020年版]AppleにIOSアプリを申請する方法](https://qiita.com/kaneko77/items/ce918317e94c9f36441f#appid%E4%BD%9C%E6%88%90)

#Certificateを作成しよう
やること

* キーチェーンアクセス.appを開く
* Certificate作成のための準備
* Apple developerサイトにアクセス
* Certificateの作成

##キーチェーンアクセス.appを開く
虫眼鏡アイコンをクリック後、キーチェンアクセス.appを開き

元記事を表示

プログラムで制約を作成する時の注意点

#結論
`translatesAutoresizingMaskIntoConstraints`を`false`にすることです!

#制約のコード
以下の様にコードでviewの制約を設定するとします。
このままだと、立ち上げても反映されていません。

“`swift
let margins = view.layoutMarginsGuide
redView.leadingAnchor.constraint(equalTo: margins.leadingAnchor).isActive = true
redView.trailingAnchor.constraint(equalTo: margins.trailingAnchor).isActive = true
redView.heightAnchor.constraint(equalTo: redView.widthAnchor, multiplier: 2.0).isActive = true
“`
そこで`translatesAutoresizingMaskIntoCons

元記事を表示

数値型について【Swift】

# 数値型とは
数値型は、名前の通り数値を表します。
Swiftの数値型を大きく分類すると`整数型`と`浮動小数点型`に分けることができます。

# 整数型
整数型は、整数を表す型になります。主に`Int型`、`UInt型`があります。

### 1. 整数型の最大値と最小値
スタティックプロパティ(型に紐づくプロパティ)が用意されています。

“`Swift
// 最小値
let a = Int8.min // -128
// 最大値
let b = Int8.max // 127
“`
### 2. 整数型の範囲
| | 範囲 |
| —- | —– |
| Int( 実行環境32bit ) | -2147483648 〜 2147483647 |
| Int( 実行環境64bit ) | -9223372036854775808 〜 9223372036854775807 |
| Int8 | -128 〜 127 |
| Int16 | -32768 〜 32767 |
| Int32 | -2147483648 〜 2147483647 |
| In

元記事を表示

【Swift】初めてDelegateを実装する方向けの、サンプルと解説

#この記事の対象者
・まずはDelegateの必要最低限のコードを知りたい。という方。
・一通り関連記事を読んだが
 → Delegate実装に「必要/不必要なコード」の区別がつかず難して挫折しそうな方
 → 必要なコードは分かったけど「記述場所」が掴めきれず困っている方

主に下の絵の様な(Delegate初実装時の私)状態のかた向けです。

![Frame 3 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/461535/44ee65ba-e990-38fa-6c3b-24aea9d840f3.png)

#この記事の非対象者
Delegateについて深く理解したい方
Dlegateの利用方法/活用場面(どんな時に使うの?)を知りたい方
エンジニアとして現場で活躍している方(←の方は特に読まないでください)

#実装コード
今回は下記の絵の場面を実装します
![Frame 2 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazo

元記事を表示

React Native の Native Module を Swift で書く

この記事は [React Native アドベントカレンダー](https://qiita.com/advent-calendar/2020/react-native) の 5 日目の記事です。

この度、iOS 14 で新しく追加された機能である、UIButton に追加できる UIMenu を React Native で使う為の Native Component を作成しました。

[react-native-menu/menu](https://github.com/react-native-menu/menu) で見る事ができて、自分が現在携わっているプロダクトでも活用しています。

今回、このモジュールを Swift で書いたのですが、Swift で Native Module を書くための資料が自分の観測範囲ではかなり少ないので、学びを共有します。

なお、自分は Objective-C や Swift の経験が皆無に等しいので、間違っている箇所がある場合は指摘いただけると助かります。

## プロジェクトのセットアップ

Native Module を新しく作成するため

元記事を表示

Intrinsic SizeのPlaceholder

#Placeholderとは
実行時のサイズは決まってないが、とりあえずレイアウトを作成しておきたい時にサイズ設定などを保留できるものだそうです。
#使ってみた
画像のように`ImageView`を置いてTopとLeadingの制約だけ追加した状態にします。
今の段階だと、WidthとHeightが決まっていないのでエラーになっています。
![スクリーンショット 2020-12-05 12.32.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755375/78fb2162-e754-0f81-44c0-7613891876c4.png)
そこでPlaceholderの出番です。
右下にある`Intrinsic Size`をPlaceholderに設定します。
![スクリーンショット 2020-12-05 12.35.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755375/cc00ab6a-22a6-6f2

元記事を表示

プログラミング初心者的にFlutterで分かりづらいことまとめ

##はじめに
僕はプログラミングで最初に触ったのがFlutterです。
Flutterを始めたのは、2020年3月。
執筆している現在は2020/12月。

初心者向けの記事になるかなと思います。
また、Flutterに限らず、プログラミングの共通の基礎的な内容が含まれます。

##用語
用語も「大体こんな感じだろう」と、具体的にどの部分なのかきっちり説明できないことが多い気がする。
しかも、用語の意味が分からないせいでインプットの効率が落ちる。

###クラス
クラスはわかりやすい。classって書いてあるので。
クラス名は大文字で始める。

“`
class MyApp{
//中身
}
“`

###インスタンス(インスタンス変数)
クラス内で使用する変数。
下の例で言うと、text,countのこと。

“`
class MyApp {
String text; //ここ
int count = 1; //ここ

//中身
}
“`
**インスタンス化** は、自分で与えた変数を何か定義すること。
例えば以下のように、整数countは1ですよ。っていうイン

元記事を表示

SwiftでCodableの実装を爆速でする方法

## はじめに
– サーバとの通信処理ではResponseの値をmappingやparseして、Swiftで扱いやすいように変換する処理をよく書きます。JSONからSwiftの値に変換するときにはCodableを使うと楽に実装できます。そんなCodableの実装もAPIが増えるごとにたくさん実装、メンテする必要がでてきます。そんな実装を爆速でするための方法について、まとめました。

## JSONの型とSwiftで使う型の変換
“`json
{ “name”: “Tanaka”, “age”: “26”, “gender”: “0” }
“`
– このようなJSONあるときに実装で扱いやすい型に変換するときに苦労した経験があります。(String <-> Intの変換など)
Codableで逐次変換処理を書くと可読性が落ちて、メンテし辛いコードが出来上がります。それを克服するためにDTOを使って、可読性の高いコードにしてみます。

## DTOを使ったCodableの処理
#### DTOとは
– `Data Transfer Object`を省略したものです。
– Layer間の

元記事を表示

[事例報告] Instance method ‘didTapMessage(in:)’ nearly matches defaulted requirement ‘didTapMessage(in:)’ of protocol ‘MessageCellDelegate’

本事例はMessageKitで起きた問題ですが、一般に起こりうるのでメモしておきます。

下記のようなプロトコルがあり

“`swift
public protocol MessageCellDelegate: MessageLabelDelegate {
func didTapMessage(in cell: MessageCollectionViewCell)
}

public extension MessageCellDelegate {
func didTapBackground(in cell: MessageCollectionViewCell) {}
}

“`

これを実装しようとすると

“`swift
Instance method ‘didTapMessage(in:)’ nearly matches defaulted requirement ‘didTapMessage(in:)’ of protocol ‘MessageCellDelegate’
“`
と怒られます。

原因がはMessageKitで用意されているMessageCollect

元記事を表示

アプリバックグラウンド時にiBeaconレンジングを継続的に行う方法【iOS14.2】

#iBeaconの情報取得方式
– iOSの[CLLocationManager](https://developer.apple.com/documentation/corelocation/cllocationmanager)によるiBeaconの情報取得方法には**リージョン監視**と**レンジング**の2つの方式がある。両者を比較すると、後述のように**レンジングでしか実現できないユースケースがある**。
– リージョン監視はアプリがバックグラウンドでも動作するのに対し、レンジングはフォアグラウンドでのみ動作するとしている記事がよくみられる。しかし少なくとも後述の環境ではバックグラウンドでのレンジングが成功した。
– 本稿ではユーザによる画面オフやホーム画面への遷移によって**アプリがバックグラウンド状態になった後も継続してiBeaconのレンジングを行う方法**を記載する。

###リージョン監視
– IDで指定したビーコンの電波をiOS端末が検知できる範囲を「リージョン」と定義し、ユーザによるリージョンへの出入りやある時点でユーザがリージョン内外のどちらにいるのかを通知する

元記事を表示

OTHERカテゴリの最新記事