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

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

Firebase Cloud Messaging (FCM) で iOS アプリに Silent Push できないときに確認すること

# 課題

プッシュ通知において、ユーザーに明示的に通知バナーなどを見せることなく、アプリに特定の処理をさせるための Silent Push (Silent Notification) を実現したい。今回はFCMを利用するが、公式のリファレンス通りではどう頑張ってもうまく行かず時間を溶かしてしまったのでメモ

# 現在地

一般的なバナーありのNotificationは正常に動作しているが、逆立ちしても Silent Push が実現できない

* 環境
* Swift 5
* iOS 15(13以降であれば同じ)

# 結論

## ① ペイロードが間違っている

Silent Push を実現するためには、ペイロードに以下が必要。

* `content-available: true`
* ヘッダの設定
* `apns-push-type: “background”`
* `apns-priority: “5”`

FIrebase Admin SDK (Node.js) で実装するなら、こんな感じになる

“`javascript
const

元記事を表示

【Swift】WKWebViewでJavaScriptを実行する方法

# はじめに
WKWebViewでJaveScriptを実行する方法を二つ紹介します。

# とりあえずWKWebViewを表示
以下がベースのコードです。
こちらに追加していきます。
“`swift
import UIKit
import WebKit

class ViewController: UIViewController {

var webView: WKWebView!

override func viewDidLoad() {
super.viewDidLoad()

webView = WKWebView(frame: view.frame)

view.addSubview(webView)

webView.load(URLRequest(url: URL(string: “”)!))

}

}
“`

# 方法1(読み込み開始時 or 読み込み終了時)
こちらの方法は読み込み開始時もしくは、読み込み終了時に実行されます。
使用用途としては、WebViewの設定や静的

元記事を表示

【ARKit】赤ちゃんの身長計測の技術

## はじめに
株式会社マイスター・ギルド新規事業部のヒツジーです。
弊社新規事業部では、新規サービスの立ち上げを目指して
日々、アイディアの検証やプロトタイプの作成などを行っています!

が!今回は自社開発した赤ちゃんの身長計測ができるiOSアプリ [BabyScale](https://www.m-gild.com/app/babyscale/) の裏側についてお話します!(こういうのもいいでしょう)
スマホ一つで簡単に身長計測できちゃうんですが、その原理って気になりませんか?
惜しみなく公開しちゃいます!

## 身長計測アプリの概要
下のスクショのように、寝ている赤ちゃんをカメラで撮影して、点を打つだけで身長計測が完了する優れものです!
では、この計測はどんな原理なのかを以降で紹介します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556658/9d734100-a36c-e4b3-73b9-02f9faf0f999.png)

## 身長計測の概要
身長計測には、
Appl

元記事を表示

【iOS】アプリアイコンは正方形でいい。

## ※メモ程度の記事です。内容ペラッペラ

そうなのかーと気づいたので、備忘録ってほどでもないけど、とりあえずメモ。

### Appleのガイドラインにも記載あり(2022/8月現在)

https://developer.apple.com/design/human-interface-guidelines/foundations/app-icons

> Design your icon as a full-bleed square image. On most platforms, the system applies a mask that automatically adjusts icon corners to match the platform’s aesthetic.

意訳すると、だいたいのOSがいい感じに角丸にするから、正方形でアイコン作ってねって感じ。

ちなみに、角丸でアプリアイコンを作ると、ホーム画面でアイコンを見た時に黒い線?(枠みたいな何か)が見えてしまう。

ガイドラインは定期的に読んだほうがいいですね:rolling_eyes:

元記事を表示

[iOSアプリ]Apple審査前の準備についての備忘録

iOSでアプリを数個リリースし、知見も少し溜まってきましたが
リリース前にやるべきことが多く度々忘れる部分もあるので備忘録がてら残しておきます。

リジェクトされやすい項目も上げておきます。

※証明書関連は本記事では説明しません

## スクリーンショット関連

解像度が一致すればシュミレーターの機種はなんでもいいのですが、
自分はいつも下記でやっています。

#### ・5.5インチ用(1枚以上用意)

サイズ:1242 x 2208
機種: iPhone8Plus

#### ・6.5インチ用(1枚以上用意)
サイズ:1242 x 2688
機種 iPhone13ProMax

※シュミレーターのスクショについて
・`Command + shift + 4 、Enter`を押しシュミレーターを選択する
・`option`を押しながら撮影する
そうすると、影がなくなるので加工時に便利です。

ReactiveSwift 主要コンポーネントまとめ

## この記事について
この記事は今更ですが、ReactiveSwiftの主要コンポーネントについてとても簡単にまとめたメモをQiitaに移植したものです。

## ReactiveSwiftを構成する主なコンポーネント
ReactiveSwiftを構成する主なコンポーネントは以下の6つです。
“`
    - Signal
    - SignalProducer
    - Property 
    - MutableProperty
    - バインディング演算子(<~)     - Action ``` ## Signal / SignalProducer - **Signal** SignalはEventのストリームを流し続ける(Hot) Failed/Completed/Interrupted”のどれかが流れるとストリームを終了する - **SignalProducer** SignalProducerは、購読されたらストリームを流す(Cold) ## Property / MutablePro

元記事を表示

【Swift5】NavigationBarのBackボタンを画像にする

## NavigationBarの< Backボタンを画像にする これを ![スクリーンショット 2022-08-03 23.08.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1161345/5e585a22-6109-79cd-7836-c90c8cdcdcaf.png) これにする ![スクリーンショット 2022-08-03 23.12.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1161345/342a5062-ffd9-4a79-b6bf-3397c3415ada.png) ## コード ```swift: ViewController.swift private func setNaviBackButton() { let backImage = UIImage(named: "backIcon")?.withRenderingMode(.alwaysOriginal

元記事を表示

【Xcode】プロジェクトからCocoaPodsを削除する方法

# はじめに
今回はこちらのプロジェクトからCocoaPodsを完全に削除します。
![スクリーンショット 2022-08-03 16.08.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/8126bb0c-e47b-53a6-2c88-6da2da1dbfbf.png)

私はCocoaPodsからSPMに移行する際に使用しました。

# 方法
## ディレクトの移動
“`:ターミナル
cd プロジェクトのパス
“`
![スクリーンショット 2022-08-03 16.13.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/4c262b73-b1cd-85a4-0d66-9af2a7cfaef0.png)

## Podsフォルダの削除
“`:ターミナル
pod deintegrate
“`
![スクリーンショット 2022-08-03 16.13.48.png](http

元記事を表示

Viewを常に右回転させたい

# 回転方向は最短

iOSで`transform`を使ってViewを回転させる場合、回転方向を指定することができない(指定するパラメタが無い)ことはご存知だろう。
回転の方向は、OSが現在の角度から指定された角度へ最短距離(角度)で移動できる方向に決まっているようだ。

以下、時計の針のような図形(View)を用いて説明する。

図形の最初の位置を0時とする。ここから3時の方向へ回転させると、**右**回転(**時計**回り)で回転する。

Flutter Badges の使い方

## 初めに
通知機能を実装しようとしていたときに、便利そうなパッケージを見つけて使ってみたので共有します!

## Badges とは
そもそも Badges ( 以下バッジ ) とは以下の画像のように通知の件数や重要な知らせをユーザに伝えるためのアイコンです。

## パッケージの準備
まずは [Badgesパッケージ](“https://pub.dev/packages/badges”) を pubspeck.yaml に記述し、Pub get します。

“`markdown: pubspeck.yaml
dependencies:
flutter:
sdk: flutter
badges: ^2.0.3
“`

次にバッジを使いたい画面でパッケージをインポートします。
“`dart: badge

100vhに指定しているのにスクロールが出てしまう原因と改善策

HTML、CSSのコーディングをしていて、htmlタグにheightを100vh指定して、スクロールが出ないようにしたいのに、iPhoneやiPadで確認すると、なぜかスクロールが出てしまう、どころか、なんか数ピクセル上に上がって表示されてしまう現象が開発していて起こりました。

この時の解決法を残します。

# 現象
htmlタグをcssでheightを100vhに指定する。

“`style.css
html {
max-height: 100vh;
}
“`

ブラウザのデバッグモードでは、スクロールはでず、きちんと想定内の表示が確認できる。

iOS端末のsafariやChromeアプリではなぜかスクロールバーが出てしまう!

# 原因

iOS端末は上部(もしくは下部)のアドレスバー込みが100vhとして計算されてしまっているため。

# 改善策

下記にサンプルコードを示す。
jsを組み合わせることによって実現できる。(なお、jqueryを用いています)

“`style.css
html {
max-height:

2年半でiOS個人アプリを4つリリースした反省と分析

# はじめに
2020年の1月にswiftを勉強しはじめ、2022年7月までの2年半で、4つ個人アプリをリリースしました。
しかし、不労所得を稼げるまで成功してないので、一度反省と分析をしようと思います。
あわよくば宣伝も兼ねてます。この記事でダウンロードが増えるといいなあ。

## Poemy ~古今和歌集~
 最初に作ったアプリです。2020年1月から3ヶ月間swiftの会社で研修を受けてました。自宅では復習を兼ねて、コードをそっくりそのまま自分のPCで再現しました。
 このころはバズろうという意識より、自分の趣味全開のアプリを作れるのが嬉しかった時期です。前職の関係で古今和歌集が好きだったので、古今和歌集の歌を楽しめるアプリです。当時知り合いが手紙やメールに和歌を添えてくれていたのですが、おしゃれなやりとりが嬉しい反面、返歌のための和歌を探すのが面倒だなーと思っていたので、今の自分の気分にピッタリな和歌を検索できるアプリが欲しいと思っていました。
「ニート」「長生き」「夏」など特定のキーワードから、それらのテーマにあった和歌を見つけることができます。

https://apps.

iOS 16から追加されたデベロッパモードが表示されない

# 困りごと
iOS 16から、Androidと同じように開発者向けのデベロッパーモードが追加され、これをONにしないと開発中アプリの実行やデバッグができなくなった。
↓公式ドキュメント
https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device

ドキュメントでは、
「設定」→「プライバシーとセキュリティ」に「デベロッパモード」という項目があるからこれをONにしてね。
と書いてあるのにそんなものは見当たらなくて困った。

# 解決法
一度MacとiPhoneを繋いでXcode上でアプリの実行ボタンを押し、以下のポップアップを表示させる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574728/edc1b2a1-c63a-4743-031f-1d078754c461.png)

※MacとiPhoneの接続時に以下のポップアップで「信頼」を選択するのを忘れないこと。
![ima

VoiceOver対応はどうやるのか

VoiceOverで、最低限対応したいものについてまとめました。

# アクセシビリティ要素の読み上げ内容を設定する
## そもそもどんな感じで読み上げられるのか
要素は`状態1` `accessibilityLabel` `accessibilityValue` `状態2` `accessibilityCustomActionの説明` `accessibilityHint`のように読み上げられる。この時読み上げられるのは設定されているものだけ。

状態1, 2にはそれぞれ`accessibilityTraits`や、要素の種類、状態によって適切なものが適切な位置に入る。

たとえばUIButtonで、`isSelected = true`, `title=”ほげ”`, `accessibilityValue=”ふが”`, `accessibilityHint=”ぴよ”`のような盛り盛り設定値の場合には画像のように読み上げられる。

IMG_0509.PNG (62.1 kB)【Swift】URLから画像を保存する

# はじめに
画像を保存する機能を作る機会があったので今後再利用することも考えて記事に残しておきます。

# 事前設定
Info.plistに以下を設定
`NSPhotoLibraryAddUsageDescription`

:::note warn
注意点
https://qiita.com/SNQ-2001/items/85528c59b2310dcc7a82
:::

# 実装
“`swift
class ViewModel: NSObject, ObservableObject {
// 画像保存
public func savingImage(url: String) {
guard let url = URL(string: url) else {
print(“エラー”)
return
}
do {
let data = try Data(contentsOf: url)
guard let image = U

Objective-C製フレームワークをSwiftPMで配布する

# はじめに

この記事では、Objective-Cで書かれたフレームワークをSwift Package Manager (SwiftPM)で配布する方法を紹介します。

ObjC製フレームワークをSwiftPMで配布することは可能なのか気になったのが事の発端です。SwiftPMは*Swift*と付くだけあって、Swift専用のパッケージマネージャーなのか、ObjC製フレームワークでも使えるのかどうか実験してみました。

結論から言うと、ObjC製フレームワークであってもSwiftPMで配布することは可能でした。
ただし、ObjCファイルのまま(オープンソースプロジェクトのまま)配布することはできず、**xcframeworkにビルドした状態で配布する**形に落ち着きました。
(ObjCファイルのまま配布する方法をいろいろ試行錯誤しましたが、上手くいかず。知っている方がいれば教えてください。)

今回の実験では、僕が以前作ったObjC製フレームワーク [LoggingViewKit](https://github.com/HituziANDO/LoggingViewKit)を使用しまし

【SwiftUI】Listをかっこよくアレンジ

# はじめに
標準のListスタイルはシンプルでかっこいいですが、
アプリのテーマカラーによっては合わない事があると思います。

そのような場合にListをかっこよくアレンジする方法を紹介します。

これをすることで見た目を自由に変更することが可能です。

# 完成形
![simulator_screenshot_F9C80956-9D24-4299-8EEC-B70C683625F8](https://user-images.githubusercontent.com/84154073/182028063-18d13f67-ea73-496f-97a0-e9c99e05caed.png)

# 使用データ
“`swift
struct Marvel: Identifiable {
let id = UUID()
let character: String
let icon: String
let text: String

let name: String
let height: String
let weight: Stri

[Flutter] DroidKaigi 2022 Flutter 応募まとめ

こんにちは、
久しぶりです。。

## はじめに
今回はDroidKaigi2022でFlutterで応募されたSessionを
まとめて見てみようよ思います。

## Flutter Session
– 249件の中で11件検索できた。
– どんどん増えていますね。

|No | Session title | Description | 受講対象者 | スピーカー / Speakers |
|:–:|:–|:–|:–|:–|
| 1 | FlutterをROS(ロボティクス)と一緒使ったらマジですごかった話| 通常、RoboticsではROSとAndroidまたはQTを組み合わせてユーザーアプリケーションを開発しています。今回Flutter3が発表され、デスクトップ、組み込み領域で使用できるように機能が拡張されました。生産性が高いユーザーアプリケーションを作成するためにロボットにFlutterを適用してみました。そのためには、ロボットとアプリ間通信するためのプロトコルライブラリの開発が必要です。パッケージ開発方法と物語、そして実務で使用している例示を通じて使用機を紹

【SwiftUI】初めてのUITest

# はじめに
最近、テストを書くようになりました。
そんなこともあり、ちょっと調べたので今の知識をまとめておきます。

# テストメソッド
“`swift
// ✅: なし
// ❌: 必ず失敗
XCTFail(value)

// ✅: valueがnilの場合
// ❌: valueがnilじゃない場合
XCTAssertNil(value)

// ✅: valueがnilじゃない場合
// ❌: valueがnilの場合
XCTAssertNotNil(value)

// ✅: valueがtrueの場合
// ❌: valueがfalseの場合
XCTAssert(value)

// ✅: valueがtrueの場合
// ❌: valueがfalseの場合
XCTAssertTrue(value)

// ✅: valueがfalseの場合
// ❌: valueがtrueの場合
XCTAssertFalse(value)

// ✅: value1 = value2
// ❌: value1 ≠ value2
XCTAssertEqual(value1, value

「Google Maps の検索結果から Yahoo! カーナビで経路案内できる iOS ショートカット」を再復活させた

@otchy さん、 @musubi05 さんが作られていた [Google Maps の検索結果から Yahoo! カーナビで経路案内できる iOS ショートカット](https://qiita.com/otchy/items/79184c6124c683509aeb) を再復活させました。

## Y!カーナビで経路案内 v5

「入力から住所を取得」を「場所」に置き換えました。

|入力から住所を取得|場所|
|:—|:—|
|||

以下のリンクからショー

view.transform = CGAffineTransform(rotationAngle: .pi / 180 * 90)
0時