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

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

SwiftUIで選択中のタブにViewをプッシュ表示する

[qnote Advent Calendar 2022](https://qiita.com/advent-calendar/2022/qnote) の3日目です。

iOS 16が登場しそろそろSwiftUIでの開発が行われる現場も増えてきたのではないでしょうか?
弊社ではFlutterでの開発案件があったのでFlutterの今後の動向も気になっています。

昨今のアプリでは大体下部にタブがあるものが多いと思います。今回プッシュ通知やスキーム、音楽系のプレイヤーの常駐しているView等の通常の遷移以外の画面や動作から選択中のタブでアプリのコンテンツ詳細画面を開く機能を実装するにあたり、Swiftに比べるとSwiftUIでの実装情報はまだまだ多くないのでどう実装するのが良いか迷うかと思います。

少し考えて出てきた案としては
1. 画面毎にNotificationCenterを登録して画面が表示中で通知を受け取った場合にNavigationLinkを有効にする
2. UINavigationControllerをどうにかして取得してそこにプッシュする

1の案は画面毎に通知と

元記事を表示

SpriteKitで2D横スクロールゲームをつくろう(その2)

![Xcode-14.1](https://img.shields.io/badge/Xcode-14.1-brightgreen) ![iOS-16.0](https://img.shields.io/badge/iOS-16.0-brightgreen)

## はじめに
[前回](https://qiita.com/am10/private/df42c1f0091e6c4705e2)の続きです。

今回はステージを作っていきます。

## 素材準備
背景(ちょっと適切なサイズがわからない。。。)

![background](https://user-images.githubusercontent.com/34936885/205078912-82c2dec2-d2c3-4c57-a23c-2fb45f3add58.jpg)

床ブロック

![tile_block](https://user-images.githubusercontent.com/34936885/205078848-2c4bdc61-dbc9-45f1-b961-48d475d72677.jpg)

#

元記事を表示

iOSでESP32のファームウェアをBLE経由で更新する

## はじめに
この記事は[N・S高等学校 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/n-s-highschool)の3日目です。
N高生です。今回はiOSでESP32のファームウェアをBLE経由で更新してみたいと思います。

リポジトリ: /* TODO */

## 環境
– MacOS12.5.1(モントレー)
– Xcode13.3
– ArduinoIDE2.0
– ボードマネージャー: esp32 v1.0.6
– iPhoneX (iOS15.5)
– ESP32 DevKitC_V4

※CoreBluetoothを扱うのでSimulatorでは動きません。

## 本題

以下の手順でファームウェアを送信、更新をしていきたいと思います。
![ble](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/437056/a9b880ac-90e0-a7f6-32bf-d2fed22e9a33.png)

とりあえずファ

元記事を表示

【SwiftUI】ATTの許可率を上げる方法

# はじめに
まず、こちらの記事を見てみてください。
[Appleのアプリのトラッキングの透明性でiOS開発者の収益が15%〜20%減](https://iphone-mania.jp/news-382414/)

これはかなり重大な問題です。

iOS14.5からAdMobで全画面広告(リワード広告やインタースティシャル広告)を表示する際はトラッキング許可ダイアログ(以下、ATT)の表示が必須になりました。
ユーザーが許可するか拒否するかで広告収益がかなり変わってきます。
なるべく許可してもらいたいですよね

今回はちょっとの手間で1%許可率を上げることができたので方法を紹介しようと思います。

# トラッキングの許可のリクエストについて
https://developer.apple.com/jp/app-store/user-privacy-and-data-use/

# どのくらい収益が変わるか
アプリによっても異なるのですが、このくらいの差がありました。
![スクリーンショット 2022-12-02 13.04.12.png](https://qiita-image-sto

元記事を表示

React Nativeを利用したアプリ開発でライブラリのライセンスをJSXで表示したい

# モチベーション

React Nativeを利用した開発で利用しているライブラリをAndroid, iOSごとにjson形式でまとめて、React NativeのViewから表示させたい。この仕組みを、できるところは自動化をさせたい。その手順や躓きポイントをまとめた。

### この記事について

[Unipos Advent Calendar 2022](https://qiita.com/advent-calendar/2022/unipos)の2日目の記事です。

## 用意するもの

### ライセンス出力で利用
– [react-native-oss-license](https://github.com/k-tomoyasu/react-native-oss-license)
– [LicensePlist](https://github.com/mono0926/LicensePlist)
– [LicenseToolsPlugin](https://github.com/cookpad/LicenseToolsPlugin)

※LicenseToolsPlugin

元記事を表示

SpriteKitで2D横スクロールゲームをつくろう(その1)

![Xcode-14.1](https://img.shields.io/badge/Xcode-14.1-brightgreen) ![iOS-16.0](https://img.shields.io/badge/iOS-16.0-brightgreen)

## はじめに
SpriteKit を使って 2D 横スクロールゲームをつくってみます。なぜ Unity を使わないんだ?と疑問を持つ方もいるかもしれませんがとくに意味はありません。なんか面白そうなので SpriteKit を使ってみます。

記事は3つくらいになる予定です(たぶん)。

今回は歩いたり跳ねたりするプレイヤーを実装していきます。

## 素材準備
クリスマスも近いのでチキンをプレイヤーにします:chicken:

歩き用

| c1 | c2 |
| — | — |
|![c1](https://user-images.githubusercontent.com/34936885/204984008-4f64e2c6-1727-4ac1-bb35-6042986234e9.png)|![c2](http

元記事を表示

SwiftUIでAdMobバナー広告を表示する

# 要約

SwiftUIで`UIViewRepresentable`を用いてAdMobのバナー広告を表示します。

# 環境
Xcode 14.1
Google-Mobile-Ads-SDK 9.13.0

# はじめに
SwiftUIでAdMobのネイティブ広告を表示します。いわゆるSwiftUI life cycleでの表示例です。
公式での実装ではないので何かしら問題が起こる可能性があります。
AdMobの導入が済んでいる事が前提となります。
https://developers.google.com/admob/ios/quick-start?hl=ja

以前にも[SwiftUIでAdMob対応(バナー編)](https://qiita.com/hyuga_amazia/items/c19fbce63a12231b85d5)というタイトルで投稿していますが、以前の記事が`UIViewControllerRepresentable`で作成したViewControllerにバナーを内包した形だったのに対し、今回のものはUIViewRepresentableとして独立したVie

元記事を表示

Unit test で LifeCycleメソッドを呼ぶ

参考:
[Testing for viewDidLoad in iOS](https://medium.com/fantageek/testing-for-viewdidload-in-ios-7808a155ccfc)
[[iOS、Swift] ユニットテストの時に、任意のタイミングでViewDidLoad()、ViewWill(Did)Appear()、ViewWill(Did)Disappear()を呼び出す方法 – Qiita](https://qiita.com/mii-chan/items/a9d8fd420d04b92a1c34)

# viewDidLoad

実装

“`swift
class ViewController: UIViewController {
var searchBar = UISearchBar()
override func viewDidLoad() {
searchBar.delegate = self
}
}

extension VIewController: UISearchBarDelegate {
public fu

元記事を表示

1年半で12個のサービスをリリースしてわかった個人開発に大切なこと

# 1, はじめに
私は私立文系大学に通う大学3年生です。
プログラミングを始めたのは大学に入学してからです。
「これから開発を始めようと思う人」や「個人開発をやっている人」に少しでも参考になれば嬉しいです。

# 2, どんなアプリを作ったの?
いくつか紹介します

### ShadowBird
TwitterのシャドウバンをチェックすることができるWebアプリです。

https://taishin-miyamoto.com/ShadowBan/

11月は月間150万PVでした。
![スクリーンショット 2022-12-01 11.24.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/850d87b2-4821-2d7f-d494-8004a6b20197.png)
色々な国の方が使用しています。
![スクリーンショット 2022-12-01 11.28.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.

元記事を表示

テストコードがローカルだと成功するのにBitrise上だと失敗する原因を特定する方法

これは [ZOZO Advent Calendar 2022](https://qiita.com/advent-calendar/2022/zozo) カレンダー Vol.7 の 1 日目の記事です。

なぜか、ローカルで走らせたテストだと上手くいくのに、Bitriseで実行すると失敗する時ってありますよね。

そんな時に限ってBitriseのログを見るとFailing testsと書かれているだけで、原因が出力されていない。。。

そんな時は、Bitrise CLIを使ってXcodeのxcresultを確認しましょう。

## 補足. Bitrise CLIとは
Bitrise CLIは、Bitriseのオープンソースランナー。
Bitrise環境をローカルで再現・実行することが可能で、ローカルだと上手くいくけどBitriseだと失敗する場合の原因特定に便利です。
ちなみに実行にBitriseアカウントは不要です。

https://devcenter.bitrise.io/ja/bitrise-cli.html

## 1. Bitrise CLIをインストール

Bitris

元記事を表示

UniVRM使用時に色空間をGammaに設定すると設定変更を促すダイアログを閉じれなくなる問題対策

# 初めに
UniVRMは色空間Linearでの使用を推奨されているため、gammaを設定しようとした際に以下の様なポップアップが表示されてしまいUnityEditorが操作できなくなってしまう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336886/5ebb937e-ce8e-0bc7-d701-4491e0e7fb7e.png)
モバイルでの対応端末を広げようとすると必然的にWebGL1.0を選択することになるが、その場合はgamma設定が必須となるため、このポップアップが非常に邪魔になってしまう。
※iOS15以降でWebGL2.0に対応しているがリリース後は不具合が多かったためiOS15でも動作しない可能性がある。

# ポップアップの消し方
ScriptingDefineSymbolsに以下のシンボルを追加し `Apply`を押す。
`UNIGLTF_USE_GAMMA_COLORSPACE`
![image.png](https://qiita-image-store

元記事を表示

クリスマスも寂しくない!?会話AIアプリを作った

会話できる人工知能を作成するiOSアプリ「Eveki」を[App Storeにてリリースしました](https://textcheckai.page.link/jofZ)。
今回は機能や開発の経緯についてご紹介します。

[![黄 鹿 イラスト ビジネス ロゴ Twitterヘッダー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/713689/8409d1b8-d1b2-ddf0-a9b8-fe488391d8c5.jpeg)](https://textcheckai.page.link/jofZ)

# Evekiについて

## 会話AI

Evekiの主な機能は会話可能なAIを作成するというものです。従来のサービスだと自然な会話を行うまでにユーザーがトレーニングをしたり調整する必要がありました。これでは不便なので、Evekiでは作ってすぐ話せるような応答を可能にしています。

## 個性の構築

![スクリーンショット 2022-11-30 23.18.13.png](https://qiit

元記事を表示

SnapshotTestingでURLで取得するリモートの画像の代替品としてAsset Catalogの画像を使用する

# はじめに
この記事はand factory.inc Advent Calendar 2022 1日目の記事です。

and factory iOSエンジニアのy-okuderaです!
最近、SwiftUIでSnapshotテストをやってみています。
非同期でリモートの画像を取得するコンポーネントを含むSnapshotテストをするときに外部に依存しないように、ローカルの画像を使う方法を調べてみました。

## 対象読者
Swiftで、非同期で画像を取得している画面のSnapshotテストをしている方もしくはこれからする方。

## 説明しないこと
本投稿の中に記載するソースコードは、一部TCA(The Composable Architecture)を使用していますが、TCAの詳細に関する説明はしません。
TCAのリポジトリにサンプルや説明が充実していますし、Qiitaにも良記事がたくさんありますので、それらを参考にしてください。

# swift-snapshot-testingでできること
iOSでSnapshotテストをするためのライブラリはいくつか有名なものがありますが、今回

元記事を表示

SwiftUIでSpriteKit

![Xcode-14.1](https://img.shields.io/badge/Xcode-14.1-brightgreen) ![iOS-16.0](https://img.shields.io/badge/iOS-16.0-brightgreen)

## はじめに
iOS 14 から [SpriteView](https://developer.apple.com/documentation/spritekit/spriteview) を使って SwiftUI でもかんたんに SpriteKit が使えるようになりました:clap:

## 簡易実装
下記のように実装すると `SKScene` を表示できます。

“`swift
struct ContentView: View {

var body: some View {
GeometryReader {
SpriteView(scene: FirstScene(size: $0.size))
}
}
}

final class FirstS

元記事を表示

Ionic Frameworkを使ってモバイル画面の限られたスペースで複数のコンテンツを表示する4個の方法

この記事は、 [Ionic Framework / Capacitor / Stencil Advent Calendar 2022](https://qiita.com/advent-calendar/2022/ionic_jp) の1日目の記事です。

さて、モバイル画面を設計していると、モバイル画面の限られたスペースに複数のコンテンツパターンを詰め込むことに悩むことも少なくないと思います。ハンバーガーメニューを用意して、縦にずらっとメニューを並べるようなことをすればその悩みからは開放されますが、逆にユーザからするとメニューが多すぎて何をどう使えばいいかわからないUIになります。そこで、タブをベースにしたメニューの考え方についてまとめようと思います。

# 整理のステップ
## 1. コンテンツを最大5つに絞り込む

> Use the minimum number of tabs required to help people navigate your app. Each additional tab increases the complexity of your app,

元記事を表示

SwiftUI x Firestoreで無限スクロールをしてみた

## はじめに

SwiftUI製のアプリをこれまで[15個](https://apps.apple.com/us/developer/ryo-tsudukihashi/id1320583602?ign-itscg=30200&ign-itsct=apps_box_link&see-all=i-phonei-pad-apps)ほどリリースしている[@tsuzuki817](https://twitter.com/tsuzuki817)です?
よろしくお願い致します!

まずSwiftUI Advent Calendar 2022を作ってくださった[@treastrain](https://qiita.com/treastrain)さんありがとうございます?

最高のアドベントカレンダーです?

最高のアドベントカレンダーですが、初っ端の一日目ということで軽く見ていただければと思います。
よろしくお願い致します?

## いきなり宣伝

Full SwiftUI(カメラ、アルバム周りは除く)で作ったアプリ[「TicketMania」](https://apps.apple.com/jp/

元記事を表示

[Swift] Combine/RxSwift と Concurrency をシームレスに繋ぐオペレータで拡張する②

# 前置き

前回の記事からの続きです。

https://qiita.com/hcrane/items/dd7d1cbe5a3d2acfe252

> アーキテクチャーに Combine/RxSwift などのリアクティブプログラミングを用いていると、後続のModelやRepositoryなどでも、接続部分をリアクティブプログラミングで書くことがあるでしょう。(連結が楽でコードが綺麗になるため)
>
> しかし、Concurrencyの登場によって、これが変わろうとしています。
>
> 今回は、一部の処理をConcurrencyに置き換えた際に、CombineからConcurrencyを呼ぶ必要が出てきたため、これを綺麗に書けないかと模索してみました。

# 初めに

前回の実装では `Task` がそのままだったため、処理をキャンセルできない状態になっていました。

今回はキャンセル処理を実装したので、新たに記事を書きました。
(前回の記事が長いので、分割する方が良いと考えた)

また、`Combine` のコミュニティで意見を求めたところ、`TaskPriority` が設定

元記事を表示

[Delphi] WorkArea / SafeArea / DisplayCutout に対応する

# WorkArea / SafeArea / Display cutout とは

iPhone ではカメラ部分にノッチ(切り欠き)があり(iPhone 14 でパンチホールになったけど)そのエリアを避ける事が推奨されています。
そして iPhone で味を占めたのか MacBook にもノッチを導入。
さらに iPhone に追随したいくつかの Android のメーカーがノッチを導入。
また、Windows でも TaskBar がある部分はアプリを表示できません。

ということで、どの OS でもアプリを表示できないエリアがあります。
その部分をそれぞれ WorkArea / SafeArea / DisplayCutout と呼びます。

|OS|呼び方|説明|備考|
|—|—|—|—|
|Windows|WorkArea|表示可能なエリア|TaskBarを除いた部分|
|macOS|SafeArea|表示可能なエリア|MacBook Pro 2021 よりノッチ対応|
|iOS|SafeArea|表示可能なエリア|全ての元凶|
|Android|Displa

元記事を表示

FlutterでHiveをいい感じに使う

# 基本実装

shared_preferencesを使っていたのだが、Hiveというpackageがあったのでこちらを使用してみました
shared_preferencesとは異なり様々な型が保存でき、速度も速いということで利便性はかなり高いかと思います

こちらが公式ページ

https://pub.dev/packages/hive

インストール用のコマンド
“`
flutter pub add hive
flutter pub add path_provider
“`

keyの管理をenumを使って行う
“`
enum HiveBox {
string,
int,
double,
bool,
dynamic,
listString,
map,
}
“`
Hiveを利用するためにインスタンスを宣言する
何度も取得する必要はないので起動時にでもinitializeHiveを読んであげればいいかと思います
また、Hiveには保存場所を指定することができるのでpath_providerを使用して指定します
“`
/// Hiveのインスタンス

元記事を表示

【Bluetooth(BLE) / Swift】iOSからBluetoothのON/OFF状態を確認する

# はじめに

エンジニア1年目のminnです!(普段はFlutterやっています)
最近、仕事でデバイス接続関連の担当していて、少し詰まったりしたので備忘録残しときます?

iOSでBluetoothのON/OFF状態を確認する方法です。

## 1. CoreBluetoothを作成

“`swift
import CoreBluetooth
“`

## 2. CentralManagerを使用する

“`swift
var centralManager: CBCentralManager!

init() {
centralManager = CBCentralManager(
delegate: nil,
queue: nil,
options: [“ShowPowerAlert” : false])
}
“`

:::note warn
注意
CentralManagerインスタンスを作成すると、自動的にBluetoothの許可ダイアログが表示されてしまいます。(Blue

元記事を表示

OTHERカテゴリの最新記事