- 1. 別のFirebaseプロジェクトにアクセスしたい場合
- 2. 【iOS】新型コロナ(COVID19)についてのアプリは作ってはいけないって話
- 3. 【iOS × アーキテクチャ】iOSにおける、GUI/システムアーキテクチャとは?
- 4. SwiftUIで画面遷移を実装する
- 5. 【iPhone】一定秒数で切り替わる壁紙スライドショーをつくる【ショートカット】
- 6. 【RealityKit2】Object Captureを試してみよう!
- 7. SwiftUIアプリにダークモード設定を追加する
- 8. iPhoneのカメラでリアルタイム物体検出 CoreMLモデルをつかえばかんたん
- 9. RealmSwift の deprecated warning に対応した
- 10. Swift, iOSでGraphQLクライアントを導入する
- 11. SwiftUI内でUIViewControllerを使おう
- 12. Firebase Remote Configで強制アップデート
- 13. Mac + iOS で Charles を使う
- 14. DispatchGroupを使っていたら、「Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)」が発生
- 15. 視覚拡張だけがARじゃない! -音のAR-
- 16. CoreLocationのauthorizationStatus備忘録
- 17. データセット用の顔画像をすぐに用意したい iPhoneの写真から、顔だけを数秒で100枚切り出す
- 18. [Swift]MKLocalSearchCompleterをPOIフィルタリングして改善してみる!
- 19. SwiftUI ScrollView でスナップ動作を実装
- 20. 最短で画像判別アプリを作成する(Swift)
別のFirebaseプロジェクトにアクセスしたい場合
# この記事を書いた理由
大体のアプリではクラッシュログとかを拾うためにFirebaseを組み込んでいるアプリが多いと思います。その場合は通常アプリ=Firebaseプロジェクトとなっていますが、例えば他のアプリとデータを共有したいとか別のFirebaseのプロジェクトにアクセスしたい場合が発生したので、共有のために貼っておきます。
ニーズが少ないのかあまり情報がなかったので、ちょっと苦労しました。と言っても数時間ではありますが。
# やり方
今回は事情があってObjective-Cのコードですが、Swiftの人は置き換えてみてください。
流れとしては、別のプロジェクトを指定するためには、GoogleService-Info.plistをまるっと使います。「OtherApp.plist」とでもリネームしてプロジェクトに取り込んでください。
そして、「OtherApp.plist」へのファイルパスを指定して、FIRAppのインスタンスを作成します。
こんな感じです。“`objectivec
@property (nonatomic, retain) FIRAuth *a
【iOS】新型コロナ(COVID19)についてのアプリは作ってはいけないって話
今年の年末年始にアプリを作ってAppStoreに公開しようとしたら見事に玉砕したので供養として、またiOSアプリ開発ビギナーが同じ目にあって欲しくないと思い、投稿します。
# はじめに
今年の年末年始に新型コロナウイルスについての簡単なアプリを作りました。どのようなアプリかというと、累計感染者数と重症者数、死亡者数等を画面に表示。体調管理や都道府県ごとの感染者数を調べてみることができるというアプリでした。
作成後、AppStoreに提出。次の日にAppStoreConnectで確認するとリジェクトされていました。
![スクリーンショット 2022-01-15 17.16.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/4f09951a-7da1-5a5f-3f32-67f3a0417100.png)# リジェクトとその内容
リジェクトされるのは、よくあること(?)なので特に驚きはしませんでした。なんなら、「お!やっぱ来たか」くらい。問題はその内容
>We found in
【iOS × アーキテクチャ】iOSにおける、GUI/システムアーキテクチャとは?
# 目的
`GUIアーキテクチャ` `システムアーキテクチャ` についてまとめること# 流れ
0. そもそも、アーキテクチャ とは?
1. GUIアーキテクチャ の例
2. GUIアーキテクチャ とは?
3. システムアーキテクチャ の例
4. システムアーキテクチャ とは?
5. モバイルアプリ開発における問題点
6. 5を解決するアーキテクチャ# 0. そもそも、アーキテクチャ とは?
**アプリケーションを開発する上で、開発者同士の共通認識を行うためのもの**開発者同士の共通認識とは?
→ 3つある① : クラスなどの要素の関係性整理
② : 伝達順序の整理
③ : 開発の規則性
**根幹にあるものは?**
`Presentation Domain Separation : プレゼンテーション領域の分離 ` という考え。
「システム本来の関心領域(ドメイン)を、UI(プレゼンテーション)から引き離す」 ということ。
`プレゼンテーション( =View )`, `ドメイン( =Model )` を分けて考えましょうね。 というもの。
※ プレゼンテー
SwiftUIで画面遷移を実装する
## 環境
Xcode13.2.1
Swift 5.5.2##基本的な画面遷移方法
**1. NavigationLink**
**2. sheet**
**3. フラグによるViewの切り替え**#1. NavigationLink
NavigationLinkはiOSの基本的なpush遷移になります。
以下のように実装します。“`swift
NavigationLink(destination: 遷移先のView) {
任意のView(このViewをタップすると遷移先に指定したViewに遷移する)
}
“`##実装例
### Viewのタップで遷移する方法
NavigationLinkの末尾のクロージャに追加したViewをタップすることで遷移するやり方です。
追加したViewは最初からタップ可能になっています。“`swift
struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink(destina
【iPhone】一定秒数で切り替わる壁紙スライドショーをつくる【ショートカット】
# 本当に普通の壁紙スライドショー
この記事は**普通の壁紙スライドショー**を探していた**iPhoneユーザ**に向けられたものです。_iPhone 壁紙 スライドショー_ とググったときに散見される、オートメーションを利用した擬似的な仕組みではありません。タイムアウトと再帰処理を利用しただけの**本当に普通の壁紙スライドショー**です。![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2167550/87675bd0-9254-6247-1ba0-a159a8f6967f.png)
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2167550/04b9844c-21ac-bbff-afe2-92674fccb760.png)
SwiftUIアプリにダークモード設定を追加する
SwiftUIアプリに、ユーザーがダークモードの設定を選ぶことができるプリファレンス設定を加えることができます:システムのスタイルに従うか、常にダークモードを使用するか、常にライトモードを使用するかを選択できます。
## ユーザーデフォルトへのユーザーの環境設定の保存(`@AppStorage`を使用)
ユーザーは、iOSシステムに追従するダークモード、常にダークモード、または常にライトモードを設定できます。
“`swift
enum DarkModeSetting: Int {
case followSystem = 0
case darkMode = 1
case lightMode = 2
}
“`ユーザーのプリファレンス設定を確定したり取得したりするには、`appearanceM
iPhoneのカメラでリアルタイム物体検出 CoreMLモデルをつかえばかんたん
#iPhoneのカメラで機械学習モデルによる物体検出をします
![Jan-14-2022 11-20-28.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/b394c085-e990-7db4-686d-3baed4acce06.gif)
#スマホで物体検出できれば、色々つかえそう。でも、難しいそう
機械学習ってむずかしいのでは?#手軽に使えるCoreMLモデルで今すぐやってみれる
アップルはiPhoneでかんたんに使えるCoreMLという形式を用意してくれています。
#手順
[アップルの公式モデルズー](https://developer.apple.com/jp/machine-learning/models/)や[CoreML-Models](https://github.com/john-rocky/CoreML-Models)などから物体検出モデルをダウンロード。
https://developer.apple.com/jp/machine-learning/mo
RealmSwift の deprecated warning に対応した
## 事象
先日、久しぶりに RealmSwift のバージョンアップをしたところ、下記のような警告が出るようになってしまいました。
“`swift
‘RealmOptional’ is deprecated: RealmOptionalhas been deprecated, use RealmProperty instead.
Use ‘RealmProperty’ instead
“`上記の警告を見て、`RealmProperty` の使い方を覚える必要があるかと思いましたが、実際はもっと良い解決方法が実装されていました。
## 解決方法
次のようなクラスがあったとした場合、
“`swift
class Sample {
let index = RealmOptional() // ここで警告が出る
}
“`下記のように直します。
“`swift
class Sample {
@Persisted var index: Int?
}
“`また、主キーにしたい場合や インデックスをつけたい場合は下記のように宣言で
Swift, iOSでGraphQLクライアントを導入する
# この記事について
iOSアプリでGraphQLサーバにアクセスするためのクライアントを実装するための導入を書きます。サーバ機能ではなく、クライアント機能の説明です。
– Swift
– iOS15
– Xcode13なお、サーバ側の実装については[【Go言語】はじめてのGraphQLサーバ実装 | gqlgen](https://qiita.com/hiroyky/items/4d7764172e73ff54f18b)も記述したのでご覧下さい。
# 手順
## Apollo-iosパッケージのインストールGraphQLのライブラリではおなじみのapolloを利用します。
XcodeのFile -> Add Packages を開き、apollo-iosを検索してインストールします。## スキーマ定義のダウンロード
### apolloコマンドのインストール
`apollo`コマンドがインストールされていなければインストールします。インストールにはnode.jsやJavaScriptでの開発でパッケージ管理でおなじみの`npm`を使います。(npmコマンドのインス
SwiftUI内でUIViewControllerを使おう
# 概要
SwiftUIがだんだんと使われてきている印象を受けますが、まだまだ世間ではUIViewControllerが使われているのも事実です。
ただ単にUIKitベースの画面を表示したいのであれば `UIViewControllerRepresentable` などを使えばいいのですが、
特にサードパーティがリリースしている広告SDKなどはUIViewControllerが必要な実装が行われているので、SwiftUI内で広告を出そうとする場合、工夫が必要になります。# SwiftUI内でUIViewControllerを取得
なるべくSwiftUIっぽくViewControllerを使おうと考え、以下のような形になりました。
ContainerViewがViewControllerを返してくれて、それを使って広告など、ViewControllerが必要なビューを表示していきます。“`swift
struct SwiftUIView: View {
var body: some View {
ContainerView { viewControl
Firebase Remote Configで強制アップデート
FirebaseのRemote Configを使用して強制アップデートを実装したので記事にします。
# 強制アップデートとは
アプリの新しいバージョンをリリースした時に、ユーザに必ずアップデートをして欲しい場合があります。
例えば、以下のような場合です。– 既存の機能に大幅な変更が加わった場合
– 致命的なバグを修正した場合この時、ユーザがアプリを立ち上げた際、ユーザにアップデートを促しアップデートを完了させるまでアプリの使用を事実上不可能にする処理が強制アップデートです。
アプリの使用を不可能にする処理としては、以下のようなアラートを出し、アプリストアへの遷移以外できなくすることなどが挙げられます。(ストアからアップデートせずに戻ってきても再度表示される)
![スクリーンショット 2022-01-12 20.12.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/383380/72fa482a-180c-9e5c-f1ee-d85ad176d3ef.png)
また、強制アップデート
Mac + iOS で Charles を使う
## 概要
AdMobが表示されない原因調査のために、Charlesを使ったので手順を残しておきます。
## [Mac] Charlesをダウンロード&インストール
https://www.charlesproxy.com/latest-release/download.do
## [Mac: Charles] Proxy Settings
Proxy – Proxy Settings の HTTP Proxy を確認する。必要に応じて変える。
## [Mac: Charles] SSL Settings
SSL – SSL Proxy Settings の SSL Proxying の include に `*:*` を追加する。
## [Mac: Charles] Local IP Address
Help – Local IP Address の IP Address を控えておく。
## [iOS: Safari] 証明書ダウンロード
以下へアクセスし証明書をダウンロードする。
http://chls.pro/ssl
## [iOS: 設定] 証明書イ
DispatchGroupを使っていたら、「Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)」が発生
SwiftのDispatchなんちゃらで毎回詰まっていますが、今回もまた詰まったので
記録に残しておきます。多分記事にしておくくらいの苦労をしないと、また数ヶ月後にまた同じことで詰まる気がとてもしているからです!
(って自信持っていうことじゃないが笑)原因は単純ミスです。
# 発生していたこと
DispatchGroupを使用していたところ、
`Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)`
というエラーが発生・・・実際にプロジェクトで詰まったコードに似たサンプルを作りました。
Playgroundで実行できます。`Thread.sleep(forTimeInterval: 0.5)`の部分は実際はAPIがリクエストされている箇所でしたが、
今回はsleepに差し替えています。“`swift
import UIKitfunc getItems(
itemIds: [String],
completionHandler: @escaping ([String]
視覚拡張だけがARじゃない! -音のAR-
音をAR表現してみました。
昨年末に作ったコンテンツですが、せっかくなので共有します。# 音のAR
最近AirPodsProを使い始めたのですが、**ヘッドトラッキング機能**に驚きました。
右側を向くと正面から聞こえていた音が左側から聞こえます。映画を観ている時、どんなに頭を動かしてもディスプレイから音が聞こえてきます。**音の定位がずっと固定されているので、”その場にいる感”があり臨場感が高まります。**
(加速度センサーから頭の動きをトラッキングしているのですが、あの小ささの中に加速度センサーが載っているなんて驚きです…)頭の回転運動を検出して音の定位を固定できますが、**歩き回った時にも音の定位を固定できたら面白そう**だと思い、音のARを作りました。
ちょうどショッピングモールで、クリスマスツリーのイルミネーションやライトアップがされていたのでここに仮想音源を配置し、音のARを作りました。
![5.1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1006690/9f4
CoreLocationのauthorizationStatus備忘録
# はじめに
記事にするまでもないけど、よく忘れてしまうのでメモ。# 環境
– iOS15
– Xcode13.1# authorizationStatus
– kCLAuthorizationStatusNotDetermined
– 許可していない状態(初回インストール直後等)
– 次回確認でもこのケース
– この状態じゃないとOS標準ダイアログが表示されない
– kCLAuthorizationStatusRestricted
– iPadとかiPod等でGPS機能がついていない端末はこれが返される(らしい)
– kCLAuthorizationStatusDenied
– 設定→各アプリ→位置情報で「なし」を設定した時に返される
– 設定→プライバシー→位置情報サービスをOFFにした場合も返される
– どっちの設定起因で不許可になるか判別ができない
– 余談だがアプリからプライバシーまで一気に飛ぶスキームは無い(はず)
– kCLAuthorizationStatusAuthorizedAlways
データセット用の顔画像をすぐに用意したい iPhoneの写真から、顔だけを数秒で100枚切り出す
#iPhoneのフォトライブラリから、顔だけを切り出す方法です
#データセットを用意するのは大変
たとえば機械学習などで、データセットとして顔写真や人体の写真が数千枚必要なケースがあります。
しかし、手動で顔写真を切り出すのは大変です。#手元のiPhoneの写真が使えたら便利
たいていの人のiPhoneには、人の写っている写真が数百〜数千枚はあるでしょう。
それらの写真の顔だけを抽出できれば、迅速なデータセット作成に活かせそうです。#[SemanticImage](https://github.com/john-rocky/SemanticImage)でiPhoneの写真を高速処理できる
[**SemanticImage**](https://github.com/john-rocky/SemanticImage)というラ
[Swift]MKLocalSearchCompleterをPOIフィルタリングして改善してみる!
#はじめに
唐突ですが、あなたはパン屋を検索できるアプリを作っているとします。
オートコンプリートで簡単に検索できる機能を実装しようとしますが、関係のないお店が出てきてしまうかもしれません。
今回はパン屋のみを検索できるように改善してみようと思います。**参考:WWDC19 What’s New in MapKit and MapKit JS**
https://developer.apple.com/videos/play/wwdc2019/236/#開発環境
Xcode 13.0
Swift 5.5#オートコンプリートとは
文字を途中まで入力すると、候補を出してくれる機能のことです。
Mapkitの[MKLocalSearchCompleter](https://developer.apple.com/documentation/mapkit/mklocalsearchcompleter)で簡単に実装できます。
#POIとは
Point Of Interestの略で、学校や動物園などの場所のことを示します。
![スクリーンショット 2022-01-11 23.27.45
SwiftUI ScrollView でスナップ動作を実装
## 背景と宣伝
諸般の事情でカルーセルやスライドショー的なパーツを SwiftUI で実装する必要があったのですが、思ったより手軽に実装できなかったので、対応内容をまとめてみました。
今回の対応をベースに ScrollView + スナップ動作を簡単に実現するためのライブラリも作成しているので、とりあえずお試しといった場合は、こちらをどうぞ。
https://github.com/hugehoge/Snappable
## ゴール
![goal.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178830/37883ca3-1b0c-c22a-3132-9abdb0419abf.gif)
のようなスナップ動作を SwiftUI の ScrollView で実現します。
動作環境については、 iOS 15.0 以上の想定で進めます。
## 前準備
スナップ動作を実装する前に、横方向にスクロール可能な View 実装を用意します。
“`swift:前準備
struct Carousel
最短で画像判別アプリを作成する(Swift)
#雲を判別したい
素人が見た目から何の雲かを判別するのは難しい。
雲が分かれば現在の天気や今後の天気がわかる。
気象学的に雲は10種類に分けることができます。これを十種雲形と言います。今回最小限の労力・最短での画像判別アプリ作成を目標とします。
>![スクリーンショット 2022-01-11 18.24.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1261100/cf79623b-2ae7-09fc-3a4a-095e9b487332.png)
日本気協会HPより#CoreMLで雲画像の機械学習モデルを作成
CoreMLの詳細は下記の記事を参照。
>https://qiita.com/PearlEarringMinion/items/a703eb3525e4aec6c46d以下の分類でモデルを作成しました。
googleや気象研究者のtwitterから画像を収集し、1分類につき画像は15〜20枚学習させました。
![スクリーンショット 2022-01-11 18.27.34.