- 1. RxSwift MVVM における ViewModel 設計
- 2. apple好きやiOSエンジニアが活用したいよく見る情報リソース
- 3. 【Swift】Arrayからユニークな順序付きリストへの変換を超絶シンプルに書く
- 4. [はじめてのiOSアプリ]xcodeで地図アプリを作成(その6)
- 5. 【Xcode11対応】画面が全画面で表示されなくなってしまったのでその対応を行った(Xcodeのキャプチャ付き)
- 6. Appleの機械学習がヤバい
- 7. 【XCUITest】UITextFieldの値の削除と入力(Xcode11対応)
- 8. 【iOSアプリ開発メモ】JSON Serverを使ってiOSアプリ開発する時のATS無効化手順(Xcodeのキャプチャ付き)
- 9. [iOS] アプリクラッシュでリジェクトされた際のクラッシュレポート復元方法
- 10. 【Xcode】複数プロジェクトでのソースの共通化
- 11. iOSで開発/本番環境を分けてFirebaseを運用するTips
- 12. [SwiftUI]sheetで遷移するView間で値を引き渡す
- 13. [Pythonista]iPhone単体でAPN構成プロファイル作るやつ作った
- 14. 去年の自分にマサカリを投げる
- 15. 新卒エンジニアがSwiftUIで個人アプリをリリースしました?
- 16. AppleSearchAdsAPIを使おうとしたら人参で詰んだ件
- 17. NFC には A, B, F… がある【iOS Core NFC】
- 18. XLPagerTabStrip でページ切り替えイベントを正しく判定する
- 19. リリースしようと思ったらValidate Appでエラーが発生してハマった
- 20. iOS リアルタイム入力でハッシュタグ形式に文字装飾するTIPS
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]を絞り込む
【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時間半ぐらいで作った
なのでちゃんと動くか分からない## こんな感じ
iPhone単体でAPNのプロファイル作るやつできた
要Pythonistahttps://t.co/IG7VQxyGOc pic.twitter.com/5HyxOSOpyh— ᴜᴢᴋ (@uzk17) December 2, 2019
去年の自分にマサカリを投げる
# まえがき
こんにちはrenです。
世間は12月。すっかりアドカレの季節ですね。アドカレといえば去年のアドカレではこんな記事を書きました。
[iOSアプリでよく見るチュートリアル画面を作成する](https://qiita.com/renchild8/items/8fd870d5bfed0f0b360b)え、なにこれ。
読みづらすぎる。ということで、去年の自分にマサカリを投げることにしました。
# 本編
まず、前回のコードを見返してみましょう。## ViewController.swift
```Swift
// ViewController.swift
import UIKitclass ViewController: UIViewController{
var tutorialCollectionView: UICollectionView!
var layout: UICollectionViewFlowLayout!override func viewDidLoad() {
super.vi
新卒エンジニアがSwiftUIで個人アプリをリリースしました?
みかんが美味しい季節になってきましたね
どうも新卒新米エンジニアの[@tsuzuki817](https://twitter.com/tsuzuki817)です??
読書した本の金額を管理できるアプリをSwiftUIを使って作りました?
[BookBank 〜読書銀行〜 ](https://apps.apple.com/jp/app/bookbank-%E8%AA%AD%E6%9B%B8%E9%8A%80%E8%A1%8C/id1487377681)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171702/00ceef29-8d84-6e46-e50f-304a7f69ccc4.png)自分は技術書などを主に読むのですが、技術書というものは値段が高いのが常です。
そこで自分が今までにどれくらい本を購入しているのか気になって作ろうと思いました。
NFC には A, B, F… がある【iOS Core NFC】
Core NFC Advent Calendar 2019、私としては2回目の記事になります。
iOS 13 で大幅に機能が追加され、実用的になった Core NFC ですが、そもそも NFC には大きく3つのタイプがあります。
# 3つの通信規格
この記事でいう NFC の3つのタイプとは、- NFC-A
- NFC-B
- NFC-Fのことを指します。また、NFC-A には MIFARE、NFC-F には FeliCa という呼称もあります。
記事タイトルと噛み合いませんが、この記事は Core NFC Advent Calendar に属するので NFC のより詳しい説明は[こちらの Qiita 記事「NFC関係用語と解説」](https://qiita.com/gpsnmeajp/items/49db2212e632869edaf8)が詳しいです。
これら3つのタイプにあうプロトコルが Core NFC では提供されており、読み書きしたいタグ(カード)の規格がどのタイプなのかに合わせてコーディングしていくことになります。
# それぞれのカードがどのタイプなのか
XLPagerTabStrip でページ切り替えイベントを正しく判定する
iOS で UISegmentedControl ライクでリッチな上タブを実現するライブラリはいくつかありますが、Swift 5 にも対応していて最も有名なもののひとつ、XLPagerTabStrip。
このライブラリを使ってページを切り替えたときのイベントを処理する際に困ったので、備忘録として残しておきます。
前提として、`ButtonBarPagerTabStripViewController` のサブクラスで実装するとします。
## 問題: `moveToViewController(at:animated:)` はスワイプ時に呼ばれない
ページを切り替える操作は、以下の2パターンがあると思います。
**1. ページラベルを直接タップする**
**2. スワイプで隣のページに移動する**上記のうち、**2. スワイプで隣のページに移動する** とき、`moveToViewController(at:animated:)` が呼ばれません。
したがって、このメソッドの中でページ切り替え時の処理を書くと、ラベルを直接タップしてページ切り替えをしたときにした期待した動作
リリースしようと思ったらValidate Appでエラーが発生してハマった
#エラー内容
リリースしようと思いValidate Appを実施した所次の3つのエラーが発生した。`・Unsupported Architectures. The executable for XXX.framework contains unsupported architectures '[x86_64, i386]'.`
`・Invalid Segment Alignment. The app binary at 'XXX.framework' does not have proper segment alignment. Try rebuilding the app with the latest Xcode version.`
`・The binary is invalid. The encryption info in the LC_ENCRYPTION_INFO load command is either missing or invalid, or the binary is already encrypted. This binary does not se
iOS リアルタイム入力でハッシュタグ形式に文字装飾するTIPS
# 本稿の目的
`#`から始まるハッシュタグの部分の色が変わり、タップするとハッシュタグの内容に応じたフィードの検索などを行う機能は最近ではあたりまえのUXになっています。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125724/8e1385cf-052a-7e93-ede3-8c520df845a8.png)
iOSでの文字装飾は`NSAttributedString`で行うことが一般的ですが、文字装飾した部分をクリックできるようにしたり、TwitterやFacebookのようにリアルタイムで入力した内容に応じて文字装飾を行うためにはどのように実装するべきかを説明します。
[Androidについても記述しています。よろしければどうぞ。](https://qiita.com/nosaka/items/aeb3ae8c0a3a187dd7a4)
# ラベルにハッシュタグの形式に相当する部分を文字装飾する&クリックできるようにする
## ハッシュタグの形式に相当する部分を正規表