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

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

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

元記事を表示

toggle(トグル)の使用方法

## 概要
ビデオ通話実装中に、マイク機能とスピーカー機能、カメラの反転機能の実装をしていた時に、switch文を用いてtrueとfalesを判別していました。しかし、その条件分岐を3つの機能にそれぞれ、記述しないといけなかったのでかなり可読性が低いコードになっていました。そこで、レビュー時にtoggle()というものを教えていただいたので、備忘録を残しておきます。

## 前提条件
「そもそも、toggleとは何ぞや?」ということで、Apple公式ドキュメントを調べてみました。
ドキュメントには、こう書かれていました。
> 「Use this method to toggle a Boolean value from true to false or from false to true.」
“`Apple.swift
var bools = [true, false]
bools[0].toggle()
// bools == [false, false]
“`
要するに、「変数が持っている現状のBool値を切り替えたい時に使えよ!(もちろん、定数ではない。)」とのことです。

元記事を表示

React Nativeを実機で動かす(iOS)

https://reactnative.dev/docs/running-on-device.html

要はこれ。
React NativeのプロジェクトをiPhoneで動かしてみたい。
※環境作りやらは[こっちの記事](https://qiita.com/NikiFutaki/items/3bf5338d7a0106bcd559)でやりました。(for Webだけど)

## バージョンとか
– iPhone: 12 mini
– iOS: 16.0
– Mac: Mac mini(M1)
– macOS: Ventura 13.0.1
– Xcode: 14.1
– npm(npx): 9.1.2

# プロジェクト作成
“`
npx react-native init [プロジェクト名]
npx react-native run-ios
“`

【個人開発】飲み会の後二次会会場を爆速で決定するiOS/Androidアプリ開発(Flutter)

モバイルエンジニアのEtsuwoです。

この度、Flutterを使用してモバイルアプリ開発を行いAndroid・iOSの両方に対応したアプリをリリースしました!
今までSwiftやKotlinを使用したアプリ開発の経験はありましたが、Flutterは**全くの初心者**なので0スタートです。
しかしこのFlutter、個人開発ではかなり使い勝手が良く、発案から2ヶ月・実装開始から1ヶ月程度という短期間で開発が完了しアプリリリースを行うことができました。

アプリ内容だけでなく、開発の流れや利用技術もざっくり記事にしています。
同じようにFlutterを使ってモバイル開発を考えている方に読んでいただけると嬉しいです。

# アプリ概要

この世の全ての酒飲みが経験したことあると思うのですが、

「二次会行きたいけどこの辺のいい感じの居酒屋知らんな…」
「この時間開いてる店どっかあったっけ…」
「しゃーなしでいつものとこ行っとくか…」

ってなることありませんか?
僕はこの寒空の下開いてる店を探すべくスマホをポチポチしてる時間が一番嫌いです。
でも二次会は行きたい。

この

元記事を表示

【Flutter】flutter build iosの使い道整理

## 記事を書くきっかけ
https://qiita.com/ikaruga/items/9dbc9f6bdec9c7979276

この記事でflutter build ipaの説明をしたので、続き

## 使い道
### 1. 前のやつ
https://qiita.com/ikaruga/items/9dbc9f6bdec9c7979276

これの1番のやつ

### 2. App Store Connectへのアップ(ipa作成含む)
“`
flutter build ios
“`
をした後、XcodeのarchiveでApp Store Connectにアップロードできる
(ipaを作成することもできる。)
これは完全に
“`
flutter build ipa
“`
の下位互換、、、

## 最後に
iOSアプリ開発をしています。
主にSwiftですが、最近は熱が入ってきてFlutterも?
色々やってます。もし良かったら見てってください。

https://sogablog.net/

元記事を表示

【Swift】手動でSPMをインポートする

# はじめに
この方法に意味があるのか知りませんが、なんか出来たので記録しておきます。

# 使用するライブラリ
今回はこちらのライブラリで試してみます。

https://github.com/SwiftUIX/SwiftUIX

# 方法
SPMに対応しているライブラリをダウンロードします。
もしくは、ローカルにクローンします。
今回はダウンロードしてみました。
![スクリーンショット 2022-11-29 22.01.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/85ffb508-ed97-5bcd-4f50-9d92fd8875e8.png)

ダウンロードした場合はZipを解凍します。
![スクリーンショット 2022-11-29 22.04.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/4996acc2-4e63-ed58-5e2f-694d40403b62.png

元記事を表示

OTHERカテゴリの最新記事