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

iOS関連のことを調べてみた2019年12月04日
目次

RxSwift MVVM における ViewModel 設計

自分は RxSwift で ViewModel はどうやって設計していくか下記三つ分けて書いていこうと思います。

– Immutable
– テストのしやすさ
– プロトコルの読み取りやすさ

## Immutable

– 可変を避けるため struct を使う。
– Observable, PublishSubject など値が流れ流けど不可変にする。
– Protocol には var で定義されるが、struct では let で宣告します。

## テストのしやすさ

テストしやすく、 mock しやすくするため、 外部リソースはできれば全て DI できるようにします。
例えばデータ処理、API 叩きなどが書いてある struct や class らはコンストラクタの引数で渡します。
そして、 ViewModel 自身の中身に、全域的なオブジェクトやクラスを直接使用すること、できればしないようにします。

## プロトコルの読み取りやすさ

– インプットとアウトプットを分けて定義する

### RxSwift コンポーネントの使い分け

– インプットは Publis

元記事を表示

apple好きやiOSエンジニアが活用したいよく見る情報リソース

Androidも大切だが、iOSアプリなどは特にレギュレーションが変わったり仕様の変更が激しい。
そんな中で随時情報を追いかけるのは大切なことなので個人的に定期的に参考にしている情報リソースのメモです。
そしてapple好き・ガジェット好きとしての趣味も含まれる。そんな方にオススメ。

## [iPhone Mania](https://iphone-mania.jp/)
その名の通りiPhoneマニア
apple関連のニュースや、レギュレーションの変更、リーク情報、iPhoneの便利機能など満載

## [カミアプ](https://www.appps.jp/)
iPhoneの小技やニュースなど

## [gori.me](https://gori.me/)
iPhone/iPad/Macbookの使い方や最新ニュースなど

## [Akiba PC Watch](https://akiba-pc.watch.impress.co.jp/)
秋葉原のショップでapple商品のオトクな入荷情報など
ガジェット好きにはおすすめ

## [ITmedia News](https://www

元記事を表示

【Swift】Arrayからユニークな順序付きリストへの変換を超絶シンプルに書く

# SwiftでArrayから重複なしの順序を保ったままのリストを生成したい!
と思って調べてみると、この辺の記事が参考になりますが、reduce()を使って愚直に全てをなめていく実装が散見されます:eyes:

– [swiftで配列のユニーク – Qiita](https://qiita.com/shou8/items/fb1ef9e738f637726c76)
– [配列から重複要素を削除する – Qiita](https://qiita.com/sgr-ksmt/items/157e4c6e390944237253)

今回はもっとスマートさを求めてシンプルに書けないか考えていきます:muscle:
(よりシンプルに書くことに特化しているのでパフォーマンスは気にしてません:yum:)

# Setは使える?
SwiftにはSetがあります。が、答えはノーです。
なぜなら、Setは重複しない順序を持たないリストだからです。
やってみます。

“`swift
let array: [String] = [“hoge”, “fuga”, “hoge”, “piyo”, “piy

元記事を表示

[はじめてのiOSアプリ]xcodeで地図アプリを作成(その6)

# はじめに

iOSアプリを作ってみたいけど
何から始めて良いのかわからない

とりあえず、
「やってみました」記事を参考に
地図アプリを真似てみようと思う

という記事の6回目です。

今回は、拡大・縮小ボタンを追加します。

– ピンチイン・アウトあるから、拡大・縮小ボタンは不要では?
– Simulatorでピンチアウト(Ctrl+Option+Click)するのは直感的じゃなく忘れがちじゃない?
– 直感的なボタンがあれば、ピンチアウトの操作を忘れても影響ないから
– 「やってみました」記事だし、ボタンを配置してみたかったから

# ボタンを追加
1. ボタンを配置
– [Main storyboard]を表示する
– 【なぜ?】
– [MKMapView]の上にボタンを配置する前準備
– メニューから[View]-[Show Library]を選択、表示されるウインドウで [button] と入力し [Button]を絞り込む
LibButtonItem.png

元記事を表示

【Xcode11対応】画面が全画面で表示されなくなってしまったのでその対応を行った(Xcodeのキャプチャ付き)

# はじめに
iOSアプリ開発中に、Xcodeをバージョン10から11に上げたことで、**もともと全画面で表示されていた画面が、中央に小さく表示される**ようになってしまいました。

本記事ではその時の対応方法(「segueの設定による対応」と「コードによる対応方法」の2種類)を記載します。

# 前提
– Xcode Version 11.2

# 対応前の画面表示
画面の遷移先がこのように中央に小さく表示されてしまいます。

![スクリーンショット 2019-12-04 8.51.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145054/c13a4f6e-64d5-6b1e-b176-54a5cce846c7.png)

# 対応方法
Xcode10の際にSegueで画面遷移を行っていた箇所は「**対応方法1:segueの設定による対応**」で、コードで画面遷移を行っていた箇所は「**対応方法2:コードによる対応**」で対応する必要があります。

## 対応方法1: segueの設定によ

元記事を表示

Appleの機械学習がヤバい

近年、機械学習はさまざまな分野で利用され注目を高めてきました。また、Firebaseをはじめてとした様々なクラウドサービスで手軽に利用できるほど便利なものになりました。そんな中、今年発表されたAppleの機械学習フレームワークCoreML3がすごかったため、今回CoreML周辺の情報を簡単にですがまとめてみました。

## CoreMLとは?
Appleが2017年に発表した機械学習を扱うためのフレームワークであり、今年新たにCoreML3という名前で強力な機能の追加がなされた。機械学習モデルの仕様はオンデバイスで完結させることができ、さらに`CreateML`というFrameworkを使い機械学習モデルを超簡単に作成することが可能。モデルを作成するためのCreateMLアプリは[こちら](https://developer.apple.com/machine-learning/create-ml/)
下記の画像でCoreMLの上位レイヤー部分にあたるフレームワークがCoreML3にのFeatuesです。

【XCUITest】UITextFieldの値の削除と入力(Xcode11対応)

# はじめに
iOSアプリ開発でXCUITestを実装しており、その際に、「UITextFieldの値を削除し、そこに新しい値を入力する」という処理が必要になりました。
stack overflowのこちらの記事( [UI Test deleting text in text field](https://stackoverflow.com/questions/32821880/ui-test-deleting-text-in-text-field) )を参考に、XCUIElementのExtensionでclearAndEnterTextを作成することでXcode10では期待通り動いていたのですが、Xcode11に上げてからUITextFieldの値が削除されなくなってしまったので、その対応を行いました。その対応方法を記載します。

# 前提
– Xcode Version 11.2

# Xcode10では期待通りに動いていたclearAndEnterText
[UI Test deleting text in text field](https://stackoverflow

元記事を表示

【iOSアプリ開発メモ】JSON Serverを使ってiOSアプリ開発する時のATS無効化手順(Xcodeのキャプチャ付き)

# はじめに
まだ完成していないWebAPIを利用してiOSアプリ開発を行う必要があり、その際、ローカルPCにAPIモックサーバー(Node.jsのJSON Server)を立てて開発を進めました。
通常だとiOSアプリは**ATS(App Transport Security)によりHTTP通信が利用できない**ため、上記作業を行う際に「**ATS無効化の設定**」を行いました。本記事では、その時の手順をXcodeのキャプチャ付きでメモしておきます。

# 前提
– Xcode Version 11.2
– iOSアプリからは「localhost」でAPIサーバーへアクセスする
– (下記のXcodeのキャプチャはSingle View Appでprojectを作成した直後の状態)

# ATS無効化手順(1から8まで)
1. XcodeでInfo.plistを開く
![スクリーンショット 2019-12-04 4.08.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145054/a1b9a9

元記事を表示

[iOS] アプリクラッシュでリジェクトされた際のクラッシュレポート復元方法

# はじめに
iOSアプリのストア申請時、アプリがクラッシュするとリジェクトされますよね。
そこで添付されたクラッシュログを復元する方法に手間取ったので、どのように解決したかを紹介します。

# なぜ手間取ったか
調べると、dSYMからクラッシュログを復元する方法はたくさん出てきます。
私の環境では、CIでビルドからAppStoreConnectへのアップロードまで行っていた為、dSYMはAppStoreConnectからダウンロードしていました。
そのdSYMとアップルが送ってくれたクラッシュログの紐付けうまくいかず、手間取ってしまいました。

### 一般的には
クラッシュログ(xxx.crash)と、予め保存しておいたdSYM(アプリ名.app.dSYM)を、`symbolicatecrash`に食わせてやると、復元できます。

### 私の環境
AppStoreConnectからダウンロードしたdSYMは、`appDsyms.zip`というZIPファイルで、解凍すると中には`[ランダムな文字列?].dSYM`というファイルが多数入っています。
つまり、dSYMが複数あるような状

元記事を表示

【Xcode】複数プロジェクトでのソースの共通化

#複数のプロジェクトでソースを共通化する

Xcodeは英語だらけなのでシェアしておく

##共通化とは
ここでいう共通化は参照のことです。
元となるAというプロジェクトのソースを、他のプロジェクトBから参照する方法です。

##やり方
1. 参照先のプロジェクトを開く
2. ProjectNavigatorに参照元のプロジェクトから参照したいファイルをドラッグ&ドロップ
3. コピーするか参照するかを選択するダイアログがでるので「Create folder reference」にチェックをいれてfinishを押す
4. これで参照の設定が完了です。

ソースをいじった場合に、参照されているすべてのプロジェクトで変更がかかるようになります。
プロジェクトを複製してコピーアプリを作成する場合などに使いましょう。

元記事を表示

iOSで開発/本番環境を分けてFirebaseを運用するTips

iOS Advent Calendar 2019の4日目の[@shtnkgm](https://twitter.com/shtnkgm)です!

本記事ではiOSで開発/本番環境を分けてFirebaseを利用するTipsを紹介します。
環境を分けて利用したいユースケースは以下のようなものが挙げられます。

– **開発/本番環境によって運用者を分けたい**
例)開発環境と本番環境を利用するチームが異なる

– **開発環境を本番環境と区別することで本番環境に影響なく開発をしやすくしたい**
例)テスト時に開発環境へのPush通知を間違って本番環境に送らないようにしたい

– **本番環境の計測数値に開発時のものが含まれないようにしたい**
例)AnalyticsやPerformance Monitoring, Crashlyticsの分析精度を高めたい

# 実現方法

## Firebaseで開発/リリース環境を分ける

まずはFirebase側の環境を分ける必要があります。Firebase側の環境を分けるには、以下のいずれかの方法で実現できます。

– F

元記事を表示

[SwiftUI]sheetで遷移するView間で値を引き渡す

# はじめに
この記事は[ジーズアカデミーAdvent Calendar 2019](https://qiita.com/advent-calendar/2019/gsacademy?fbclid=IwAR2AtQw-j9Mln-KaSfmX_E2gNZeg2vbesJcbARuzccOFm_70Nqd9hfWnSEU) 3日目の記事です。
こんにちは!Dev(週末コース)8期の@Ryu0823といいます。
ジーズではWebコースで、最後のDemo dayも参加できなかったのですが、卒業してからもいろいろな言語をかじり、最近はSwiftUIでアプリを制作しています。
SwiftUIはSwiftより簡単かつわかりやすいと感じていますが、まだ新しい言語のためできないこともあったり、情報も少ないのが現状です。
そこで今回は、sheetで遷移する場合にView間で値を渡す方法を探すのに苦労したので、備忘録的に書いてみます。
完成形は↓
![Nov-24-2019 21-50-32.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaw

元記事を表示

[Pythonista]iPhone単体でAPN構成プロファイル作るやつ作った

# つくった
世の中にはAPNを頻繁に変える人もいるらしい
深夜に1時間半ぐらいで作った
なのでちゃんと動くか分からない

## こんな感じ