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

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

[iOS]ゲーム開発 初心者の学び

## 自己紹介

iOSで開発経験が2年程度ありますが、ゲームは全く作ったことがありません。趣味でゲームを作ろうと思っています。前提知識を随時まとめてみます。書いたコードはこちらです [Github](https://github.com/Satoru-PriChan/IOS_Swift_GameDeveopment_Cookbook_Chapter1)

## アーキテクチャ

– `Entity-Component Architecture`
– ゲームで使うオブジェクト(`Entity`)に、様々な再利用可能な振る舞いを定義した部品(`Component`)を持たせる形で作っていく。`GameplayKit`の中の`GKComponent`を継承したクラスにより、`Component`を作成していく。
– 自前でこうした仕組みを作ることもできるが、`GameplayKit`を利用していくことで楽にできる。

– `GKEntity`
– 通常は特にサブクラス化せず、`addComponent(component:)`メソッドでコンポーネントを追加していく。

元記事を表示

Realm マイグレーションについて

## マイグレーションとは

Realmに保存しているモデルに変更があった際には、`Migration is required due to the following errors`などのエラーが発生する。

モデルに変更があると、コード上で変更されたモデルと、すでにディスクにある変更前のモデルで整合性が取れなくなるためである。

下記ページのようにマイグレーションを行うことになる。

[Realm doc – Migrations](https://realm.io/docs/objc/latest/#migrations)

他方、開発段階ではモデルの変更があるのはよくあることなので、一々マイグレーションを書くのではなく、ディスク上のデータを一回削除してから、コード上の新しいモデルを試せばよいだろう。

元記事を表示

iOS14でのIDFA取得

iOS14からユーザトラッキングなどに用いられているIDFA取得のオプトアウトの選択がアプリごとに強制されます。この記事ではiOS14でどのように挙動が変わるかを記載しています。

(2020/6/22公開のXcode12beta/iOS14betaによる調査です。)

# ダイジェスト

– iOS14ではトラッキングID取得前のユーザ確認ダイアログの実装が必須化されます
– **[重要]** 対応していないアプリでも挙動が変わり、IDFAが取得できなくなります

# IDFAとは

IDFAはIdentifier For Advertisingの略で、広告目的で用いられることを意図したiOSの端末固有のIDです。固有IDを用いることによって広告プラットフォームがユーザを特定し、ターゲット広告を表示できます。一般的にはトラッキングIDと呼ばれます。Androidでは同等のものとしてADID (Google Play Services ID for Android) が提供されています。
トラッキングIDはターゲット広告の他に、アプリ広告の効果計測や、再インストール(リセマラ)の検出

元記事を表示

Kobiton でスマートフォンのリモートテストを試してみた

# 概要

昨今のテレワーク推進の中、スマートフォン開発における課題となるのが実機による動作検証です。
多種多様なスマートフォン端末の準備・利用は、利用者それぞれがテレワークしていると難しくなります。

今回は上記課題を解決しうるリモート実機動作検証サービス [Kobiton](https://kobiton.com/) について調査しました。

## TL; DR

– Kobiton https://kobiton.com/ はリモート実機検証できるサービス
– ブラウザからリモートの実機を操作して手動・自動での動作検証が可能
– デスクトップアプリを利用すると、自分たちで用意した実機を使っての動作検証も可能
– 30日間無料トライアル

# リモートの実機による動作検証

Kobiton がクラウド上に用意した実機を使って動作確認を行うことができます。

## 利用可能な端末

利用可能な実機の一覧は以下のURLから参照できます。

https://docs.kobiton.com/devices-list/

2020年7月4日時点で208種類のAndroid・iOS端末を利用

元記事を表示

[RxSwift]flatMap系とcombineLatestの違い

### `flatMap`系

#### 使い方

`a.flatMap(b)`,`a.flatMapFirst(b)`, `a.flatMapLatest(b)`等

#### 特徴

`a`の`onNext`の処理に、`b`の`onNext`の全処理を掛け合わせていく。

`a`へのある要素への掛け合わせる処理が終わらないうちに、`a`へさらに次の要素が流れてきた場合、
`flatMapFirst`は次の要素を無視する
`flatMapLatest`は現在の要素をキャンセルし次の要素の処理を行う
`flatMap`は次の要素も現在の要素も両方行う。

### `combineLatest`

#### 使い方

`Observable.combineLatest(a, b) { $0 + $1 }`等

#### 特徴

`a`と`b`の最新の要素を掛け合わせる。

元記事を表示

iOS / Web版Twitterの指定したページへのリンクをホーム画面に追加する

# TL;DR
Web版Twitterをホーム画面に追加する
-> PWAになり追加時のURLが反映されない

別のページを経由して開けば解決
-> dataスキーム

# data URI scheme
– dataスキーム
– 外部リソースと同じようにデータを読み込む方法
– アドレスバーに入力する

iOSの「ホーム画面に追加」は後からURLを書き換えられない
-> 追加時用のTwitterを開かないパターンが必要
-> 端末がネットに繋がっているかで条件分岐(他にも方法はあると思う)

“`
data:text/html,

“`

# 実際の手順
1. 上記のdataスキームの「開くURL」部分を変更
2. オフラインの状態でブラウザのアドレスバーに入力
3. ホーム画面に追加

# 問題点
ホーム画面に表示されるアイコンが真っ白なので複数追加すると分かりにくい

↓↓↓

## ページに背景色を設定する

“`