- 1. UniVRM使用時に色空間をGammaに設定すると設定変更を促すダイアログを閉じれなくなる問題対策
- 2. クリスマスも寂しくない!?会話AIアプリを作った
- 3. SnapshotTestingでURLで取得するリモートの画像の代替品としてAsset Catalogの画像を使用する
- 4. SwiftUIでSpriteKit
- 5. Ionic Frameworkを使ってモバイル画面の限られたスペースで複数のコンテンツを表示する4個の方法
- 6. SwiftUI x Firestoreで無限スクロールをしてみた
- 7. [Swift] Combine/RxSwift と Concurrency をシームレスに繋ぐオペレータで拡張する②
- 8. [Delphi] WorkArea / SafeArea / DisplayCutout に対応する
- 9. FlutterでHiveをいい感じに使う
- 10. 【Bluetooth(BLE) / Swift】iOSからBluetoothのON/OFF状態を確認する
- 11. toggle(トグル)の使用方法
- 12. React Nativeを実機で動かす(iOS)
- 13. 【個人開発】飲み会の後二次会会場を爆速で決定するiOS/Androidアプリ開発(Flutter)
- 14. 【Flutter】flutter build iosの使い道整理
- 15. 【Swift】手動でSPMをインポートする
- 16. 【SwiftUI】ControlGroup触ってみた
- 17. failed to prepare device for developmentエラーを解決した
- 18. 【SwiftUI】iOS16で追加されたTableを使ってみた
- 19. クロージャーのキャプチャをバリ簡単にまとめてみた#1
- 20. iOS UIScene.willEnterForegroundNotificationやUIScene.didEnterBackgroundNotificationはアプリスイッチャーに行った・から戻った 時は呼ばれない
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
【SwiftUI】ControlGroup触ってみた
# はじめに
iOS15から[ControlGroup](https://developer.apple.com/documentation/swiftui/controlgroup)というUIコンポーネントが使えるようになってました。
見た目はPickerのsegmentedスタイルと同じだったので何が違うのか調査してみました。# 実装
“`swift
import SwiftUIstruct ContentView: View {
private let animals: [String] = [“ライオン”, “ネコ”, “キリン”]
var body: some View {
ControlGroup {
ForEach(0..
failed to prepare device for developmentエラーを解決した
## 概要
業務で実装を確かめるために実機ビルドした時に、「failed to prepare device for development」というメチャクチャ漠然としたエラーが発生したので、解決方法を備忘録として残しておきます。
ちなみに、実機の設定やiOSのバージョン、Macの設定も何1つ変更していないので、「実機のバージョンと新たなバージョンがリリースされたXcodeの相性が悪いのかな〜」と仮説を立てて調べることにしました。## 調べたこと
上記のエラー文以外にも、「The run destination “ユーザー名”のiPhone is not valid for Running the scheme ‘ビルドスキーム名’.」というようなエラーが出ていました。
とりあえずは、エラー文を何も考えずコピペして検索することにしました。
有力な記事もあり、どれも解決したとの文言があったので一番状況が近い下二つの記事を参考にさせていただきました。https://negichou.com/troubleshooting-xcode-failed-to-prepare-device
【SwiftUI】iOS16で追加されたTableを使ってみた
# はじめに
iOS16でTableとTableColumnという機能が追加されていました。
気になったので使ってみました。# 完成形
![simulator_screenshot_49C9D741-D7CB-4689-A43A-09F424546461.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/a8f4a4be-793e-ebfb-b724-5f3d3259a7d8.png)# 今回使用するModel
“`swift
struct SoccerPlayer: Identifiable {
let id = UUID()
let name: String
let age: Int
let position: SoccerPosition
}enum SoccerPosition: String {
case gk = “GK”
case df = “DF”
case mf = “MF”
case fw =
クロージャーのキャプチャをバリ簡単にまとめてみた#1
## はじめに
「クロージャ内」では「スコープ外」の変数や定数の値を参照し保持する機能がある。という一部の機能に関しての記事である。## 対象者
この記事は下記のような人を対象にしている。– プログラミング初学者
– クロージャーを聞いたことがある人## 詳細
1. 「クロージャー内」では「スコープ外」の変数や定数の値を参照し保持する機能がある。
2. (ちなみに)キャプチャするのは値のことではなく、スコープ外にあるキャプチャされた変数や定数自身をキャプチャする
“`swift:Swift
let greeting: (String) -> String//doは新しくスコープを作る機能がある。
do {
//doスコープの中の定数symbol。そのため、本来、doスコープ外では値を参照できないはず。
let symbol = “!”//定数greeting(クロージャーの型定義)はグローバル定数なためどこからでもアクセス可能
greeting = { user in
//ここに注目
//greeti
iOS UIScene.willEnterForegroundNotificationやUIScene.didEnterBackgroundNotificationはアプリスイッチャーに行った・から戻った 時は呼ばれない
A. アプリをアプリスイッチャーに移しただけで端末のホーム画面まで行ってない時は、UIScene.didEnterBackgroundNotificationが呼ばれずUIScene.willDeactivateNotificationのみ呼ばれる。またアプリスイッチャーからアプリを前面に戻した時は、UIScene.willEnterForegroundNotificationが呼ばれずUIScene.didActivateNotificationのみ呼ばれる
-> そのため、UIScene.willEnterForegroundNotificationやUIScene.didEnterBackgroundNotificationを購読しているだけでは、うまく通知を受け取れないことに注意。
B. アプリをバックグラウンドまで戻し端末のホームまで戻ると、UIScene.didEnterBackgroundNotificationとUIScene.willDeactivateNotificationが両方呼ばれる。アプリを端末のホーム画面から全面に戻した時は、UISce