- 1. RealityKitで顔と重なったオブジェクトを表示する(FaceMeshを非表示にする)
- 2. Ubuntu20.04LTSでReact NativeとExpoを試す
- 3. アプリのアップデートメッセージを眺めてみた
- 4. [iOS]Xcode13・iOS15・Storyboardから設定したUIButtonに設定した画像がうまく設定されない。
- 5. [Swift] Combine の flatMap で failure になると、以降は値が流れなくなる問題に対処する
- 6. 【?炎上、解消。】荒れたコメントや記事を見たくない人のためのアプリとその仕組み
- 7. [SwiftUI]ScrollViewの副作用を抑制する
- 8. SwiftUIでUIKitのビューの装飾をするためにUIAppearanceを使うのは間違っている
- 9. iOSアプリでFirebaseによるGoogleサインインの実装方法(初心者向け)
- 10. 【Swift】仕様変更が怖くなくなるif文の書き方 〜 enumを使ってSwiftらしく書く 〜
- 11. Xcode 13でSwiftプロジェクトをローカライズ(翻訳)
- 12. Fastlaneでアプリのスクリーンショットを自動化してみた
- 13. expoでiOSシュミレーターが開けない
- 14. iPhone iOS 15.1 の出力音質を引き上げる設定
- 15. UIViewのドラッグ (生)
- 16. UIViewのドラッグ (UIGestureRecognizer)
- 17. UIViewControllerのviewにxibを使用する
- 18. ios概論: View
- 19. iOS概論
- 20. コードで作るContainer View Controller
RealityKitで顔と重なったオブジェクトを表示する(FaceMeshを非表示にする)
RealityKitでFaceAnchorを使うと、顔より後ろのARオブジェクトが透過されます。
この深度オクルージョンをオフにするには、“`swift
arView.renderOptions.insert(.disableFaceOcclusions)// iOS15からは.disableFaceMesh
“`
?
****
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.comCore MLやARKit
Ubuntu20.04LTSでReact NativeとExpoを試す
#はじめに
React Nativeを業務で使うことになったのですが、Macが届くまでUbuntuでReact Nativeの勉強をする必要が出てきたました。そのためwebやモバイル上での勉強環境構築と動作確認を行っていきたいと思います。#前提
nodejsをインストール済み
unixコマンドを扱える
Reactが一通り扱える#環境
nodejs v16.13.0
npm 8.1.0#React Nativeとは
Facebookが開発したクロスプラットフォームのアプリ開発用フレームワーク。Reactでios、android両方書けて嬉しいよねってやつです。Flutterなども人気が出てきていますが、React NativeはReactの知識をベースにして書けるので、webのノウハウをある程度流用できて開発効率が良いのかなと思います。#Expoとは
ReactNativeを使ったアプリケーション開発をサポートしているフレームワークです。windows,macOS,Linux関係なくiOS,AndroidどちらもQRコードを介して実機での動作確認が可能です。またwebでの
アプリのアップデートメッセージを眺めてみた
# はじめに
iPhoneでしばらくアプリのアップデートをしていなかったら、33アプリのアップデートがありました。
アップデートのメッセージを眺めていると、今後の参考になりそうだったので一覧にしてみました。# アップデートメッセージ
* 細かい調整をしました。
* 機能を改修しました。
* 軽微な修正を行いました。
* 軽微な改修を行いました。
* 軽微な不具合を行いました。
* 軽微な不具合を修正しました。
* 軽微な不具合に対応いたしました。
* 不具合を修正しました。
* 不具合な修正を行いました。
* いくつかの改良や修正をしました。
* 操作性の向上とバグの修正
* UI改善、軽微なバグの改修を行いました。
* バグの修正や安定性の向上などさまざまな改善を行いました。
* 一部不具合の修正とパフォーマンスの改善を行いました。
* 最新バージョンでは各種不具合が修正され、パフォーマンスも向上しています。
* アプリがクラッシュする問題が修正され、機能の読み込み速度が改善されました。
* このアップデートには、操作性および安定性の改善が含まれます。「軽微な」って結構いいか
[iOS]Xcode13・iOS15・Storyboardから設定したUIButtonに設定した画像がうまく設定されない。
Xcode13でStoryboardからUIButtonを設定すると、iOS15からの`UIButton.Configuration` (https://developer.apple.com/documentation/uikit/uibutton/configuration )= plain, filled, gray, tintedの4つのうちのplainが最初から設定された状態になり、iOS14以前のUIButtonと違う感じになる。
従来と同じ感じで使いたい場合は、Attributes Inspector > UIButton > Style > Default に設定すると、元に戻る。
意図せずplain設定になっており、設定した画像や文字が想定と違って表示されてしまい、少し混乱してしまった。
[Swift] Combine の flatMap で failure になると、以降は値が流れなくなる問題に対処する
# 初めに
タイトル通りですが、`Combine`の`flatMap`で行う処理が、一度でも`failure`になると、それ以降は値が流れなくなるという困った挙動があります。
かなり前から`Swift Forums`とかでも上がっていますが、現在もなお直っていません。
https://forums.swift.org/t/combine-flatmap-can-result-in-values-after-failure-bug/27834
ということで、色々と対応方法を調べたので掲載しておきます。
## 前提
実装に先立ち、まずは問題の発生したコード例で紹介します。
### 1. Combine を使ったネットワークコード例
`Combine`を用いて、以下のような簡単な API クライアントとレスポンス例を用意しました。
“`.swift
final class Repository: NSObject {static func fetch() -> AnyPublisher
{
URLSessio
【?炎上、解消。】荒れたコメントや記事を見たくない人のためのアプリとその仕組み
#はじめに
**技術的な内容のみをご覧になりたい方は[こちら](#技術的なポイント)からどうぞ**
ポエム的な内容は一応[こちらのnote]()に載せてます。[](https://tokiwaproject.page.link/mute)
[以前の記事](https://qiita.com/KokumaruGarasu/items/3ca4c0c7f8bc83b28645)でも紹介したアプリ「ミュート」に**Yahooニュースなど各種サイトでのコメント欄非表示**の機能を追加しました。コメントでの誹謗中傷は話題になっていたのでそれに対応した形になります。今回はその詳細と、以前の記事で伝えきれていなかった部分をご紹介したいと思います。
**ダウンロードはこちらから**
https://tokiwaproject.page.
[SwiftUI]ScrollViewの副作用を抑制する
## 0. 概要
SwiftUIのScrollViewには副作用があり、ビューの配置の仕方によって周囲のビューの動作が決定します。
例えば、次のようなコードはScrollViewの中のTextのみならずNaviagtionのタイトルも連動してスクロールするようになります。“`swift
struct ContentView: View {
var body: some View {
NavigationView {
ScrollView {
Text(“view”)
}
.navigationTitle(“Title”)
.navigationBarTitleDisplayMode(.large)
}
}
}
“`![Simulator Screen Recording – iPhone 13 mini – 2021-11-21 at 16.54.13.gif](https://qiita-im
SwiftUIでUIKitのビューの装飾をするためにUIAppearanceを使うのは間違っている
SwiftUIはツールバーの背景色を変えることができません。
この問題に対応するために、`UIAppearance `を利用する記事が散見されます。
実際、次のようなコードを書くことでTabViewの背景色を変えることができます。“`swift
struct ContentView: View {
var body: some View {
NavigationView {
Text(“button”)
.toolbar {
ToolbarItem(placement: .bottomBar){
Text(“Item”)
}
}
}
.onAppear {
UIToolbar.appearance().backgroundColor = UIColor.blue
}
}
}
“`![CleanSho
iOSアプリでFirebaseによるGoogleサインインの実装方法(初心者向け)
# 記事作成のきっかけ
新たに作成したiOSアプリにFirebaseによるGoogleサインインの実装をするにあたり、以前作成していたiOSのアプリで実装していた内容をそのまま移行しようとしたがうまくいかず、あらためて[Firebaseのドキュメント](https://firebase.google.com/docs/auth/ios/google-signin?authuser=0#swift_5)に基づいて実装をすることにしました。
ドキュメントを見てもよくわからないという方が対象です。正しく実装するにはドキュメントを参照いただくのが最も正しいやり方となります。エラーハンドリングはかなり割愛しています。ご注意ください?
以前参照した記事の通りに実装しているつもりが、エラーメッセージが出力される状態でした。
Firebaseのドキュメント通りに実装している記事が見当たらなかったためこちらに投稿することにしました。
どなたかのお役に立てれば幸いです。## 実装手順
1.Firebaseにプロジェクトを作成する。
2.Xcodeで新たなプロジェクトを作成する。
3.Goog
【Swift】仕様変更が怖くなくなるif文の書き方 〜 enumを使ってSwiftらしく書く 〜
今回は、enum型を使ってSwiftらしいif文の書き方を記事にしてみました。
## この記事で学べること
– いつものif文をenumを利用してSwiftらしくスマートに書く方法
– 仕様変更に強いif文の書き方## サンプルコード
### 仕様
今回はサンプルとして、APIなどの外部リソースから都道府県の文字列を取得したと仮定します。
その上で、都道府県が`”Tokyo”`or`”Osaka”`の場合とそれ以外の都道府県で処理を分岐したいという仕様にします。### enumを一切使わないif文の場合
“`swift
if city == “Tokyo” || city == “Osaka” {
print(“特定の都市が入力されました”)
} else {
print(“特定の都市以外が入力されました”)
}
“`この書き方でも処理的な問題はないが、この書き方で書かれているコードがプロジェクトに複数箇所あると、
`「都道府県名を大文字に変更してください」`
という仕様変更が発生した場合、該当箇所を全部修正する必要があります。
その過程でプログラマー
Xcode 13でSwiftプロジェクトをローカライズ(翻訳)
以前、Xcodeにはローカリゼーションをエクスポート / インポートする機能がありましたが、外部のXLIFFエディターが必要でした。WWDC 2021でリリースされたXcode 13には、ローカリゼーション用のエディターが組み込まれています。
この記事では、Xcode 13におけるローカリゼーションのフローについて説明します。
## セットアップ
Xcodeは、既定の開発言語(アプリを開発している時に使用する言語)として英語を使用しています。これは日本語に変更することができます。
[Development language の変更](https://qiita.com/MaShunzhe/items/86200a5c03817497ac29#development-language-の変更)また、[アプリの翻訳先言語も指定する必要があります。](https://qiita.com/MaShunzhe/items/86200a5c03817497ac29#新しい言語の追加).
## ローカライズ可能な文字列をマークする
SwiftUIビューでは、よく使用される多くのビュー
Fastlaneでアプリのスクリーンショットを自動化してみた
## はじめに
1つ前の記事で、FastlaneでXCTestを自動化するという記事を書いたのですが、今回はその続きでアプリのスクリーンショットを自動化する記事を書いてみました。https://qiita.com/ctnc_67/items/e5e0bae431b3025f4255
Fastlaneをこれから導入するという方は、Fastlane導入については前記事をご参照ください。
今回はsnapshotを撮るところだけに焦点を当てていきます。あと、前提としてプロジェクトにXCUITestは導入されている前提で進めます。
## この記事で学べること
– snapshotとは?
– アプリのスクショの自動化(スナップショット)
– スクショ自動化のための細かいオプション## Snapshot導入
### fastlaneのsnapshotとは
アプリのスクリーンショットを自分で実機やシュミレーターを操作しながら取得する作業を自動化してくれるツールです。スマホアプリ開発において「色々な大きさの機種のスクショを全画面取得せよ!」なんていうミッションは、よく課せられると思い
expoでiOSシュミレーターが開けない
ひさしぶりに環境の再構築をして[expo](https://expo.dev/)をインストールしたら下記のような表示が出てiOSシュミレータが起動しません。Xcodeはすでにインストール済みです。
“`
› Opening on iOS…
✔ Xcode needs to be installed (don’t worry, you won’t have to use it),
would you like to continue to the App Store? … (Y/n)
Unable to verify Xcode and Simulator installation.
“``xcode-select –install`をしてもすでにインストール済みと表示されます。
“`
❯ xcode-select –install
xcode-select: error: command line tools are already installed,
use “Software Update” to install updates
“`## 解決方法
iPhone iOS 15.1 の出力音質を引き上げる設定
iPhone iOS 15.1 の出力音質を引き上げる設定についてメモします。
iOS 15.1 はデフォルト設定では最高音質にはならないことがあり、以下のように設定変更が必要です。## 前提条件
このメモは以下の環境で確認および記述しました。
* iPhone `iOS` `15.1` (iPhone SE 第一世代)
* iPad mini 4 でも動作確認実施済み
* iPhone SE 第二世代において動作確認実施済み
* `Roland Rubix22` (USB接続オーディオインタフェース)
* [Ruelen: iPhone Lightning – USBカメラアダプタ](https://www.amazon.co.jp/gp/product/B09C5DZC28) (手元にあったのでこれを利用。動作保証するものではありません)# iPhone と DAC (Roland Rubix22) とを接続する
* iPhone と DAC とを接続します。
* 私は [Ruelen: iPhone Lightning – USBカメラアダプタ](h
UIViewのドラッグ (生)
タップ検知方法は、
生のタップ情報から任意イベントを検知をする自由度が高い方法と、
UIGestureRecognizerが用意した基本タップイベントのテンプレートを使う方法
の主に二つがあるが、
前者の生でもドラッグ検知だけなら簡単ということがわかったので、試してみた。## 実装
“`DraggableView.swift
import UIKit// ドラッグだけ実装したヴュー
class DraggableView: UIView {
// ドラッグ検知メソッド
override func touchesMoved(_ touches: Set, with event: UIEvent?) {
guard let touch = touches.first else {// このビューへのタップ取得。ちなみにデフォルトではマルチタップのプロパティはfalseになってるので、ここではfirstのみ考えればおk。
assert(false)
}
let loc = t
UIViewのドラッグ (UIGestureRecognizer)
タップイベント検知は、
生のタップイベント情報を操作するゴリゴリの方法もあるが、
基本的なタップイベントに関してはUIGestureRecognizerがテンプレートを用意してくれているので、使えるときはそちらを使いたい。ドラッグに関しては、UIPanGestureRecognizerと言うテンプレートが用意されている。
# 実装
UIGestureRecognizerにアクションを設定して、Viewに持たせればおk。“`ViewController.swift
import UIKitclass ViewController: UIViewController {
@IBOutlet weak var draggableView: UIView!
override func viewDidLoad() {
super.viewDidLoad()let pGR = UIPanGestureRecognizer(target: self, action: #selector(dragging
UIViewControllerのviewにxibを使用する
# 概要
xibfileから、UIViewControllerのviewのoutletを紐付ける。# 手順
1.xibfileのfile’s ownerをViewControllerに指定する。これで、ViewControllerのviewのoutletがxibfile側から見えるようになる。
2.ViewControllerのviewのoutletに、xibfileのrootviewを紐付ける。
3.storyboardに紐づいているViewControllerの場合、storyboard側の実装が優先されるので、storyboard側ではViewControllerのviewを削除しておく。
Frameworks/dp/1492074616![スクリーンショット 2021-04-24 18.36.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252245/2658a1a6-f504-03dd-d855-1218026f4367.png)# 感想
こういうやり方もあるのかーと言った感じ。
ios概論: View
# はじめに
iosの仕組みを概要的に説明することがモチベーションです。
想定読者はios〜中級者です。
仕組みをわかって実装するための、最低限の知識が体系的に得られるといいなあと思っております。間違っていたらご指摘していただけると嬉しいです。
また、修正・追加して欲しい内容などございましたらこれもご指摘いただけるとありがたいです。構成は以下になります。
1.View
2.Draw
3.Animation
4.TouchViewの根幹となる描画機能を3章まで説明し、最後にタッチ機能を説明します。
# 全体観
UIViewとはなんでしょうか?
ドキュメントを見てみると、たくさんのクラスやプロトコルから構成されているのがわかります。https://developer.apple.com/documentation/uikit/uiview
![スクリーンショット 2021-04-25 17.11.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252245/072169
iOS概論
# 目次
[1. View](https://qiita.com/Zousaaaaaan/items/1d32dece850d1be707e9)
2. Inteface ※準備中
3. Framwork ※準備中# モチベーション
まず、きっかけから話します。
わからない時にその都度調べるというのが、大部分のプログラマーの知識の獲得方法かと思います。
しかし、それでは体系的な知識が身に付いていかない体感があったので、ios業務のために一冊オライリーの参考書を読むことにしました。
結果、結構良かったです。体系的な知識が身に付きました。
また、本という枠に入った知識を知ることで必要な知識の輪郭が明確になった感じがしました。
これは個人的にはとても良くて、”技術者としての最低限知識はこの範囲。これ以上は都度調べればOK”と安心して割り切れるようになりました。ということで本記事のモチベーションですが、
iosの仕組みを概要的に説明することです。
細かい実装テクニックなどは他の記事に任せて、仕組みをだーっと書いていきます。
また、ほぼ参考書からの知識になりますが、大
コードで作るContainer View Controller
# はじめに
この記事の目的は、コードから、Container View Controllerを作れるようになることです。
子ViewControllerが一つである単純な例で説明を行います。
参考文献の書籍の内容です。# Container View Controllerとは
UINavigationControllerやUITabBarControllerなどといった、ViewControllerヒエラルキーの親子関係の親になり、子ViewControllerのviewを表示するViewControllerのことです。androidだとFragmentを持つActivityのようなものです。
# 方法
UIViewControllerでは、子ViewControllerを格納するための`children`プロパティが用意されていますが、プロパティを直接扱うことは非推奨です。
childrenプロパティに子ViewControllerを格納するには決まったお作法があり、技術書によれば、作法を破ると手痛い仕打ち(バグ)を受けるとのこと。
つまり、Container View