iOS関連のことを調べてみた2021年11月24日

iOS関連のことを調べてみた2021年11月24日
目次

機械学習で必殺技分類(動作分類モデル作成からiOSでの推論実行まで:失敗編)

#動画を機械学習して、動作の種類を判定する

GUIで機械学習ができるCreateML(Macで実行可能)。
動作の分類(Action Clasification)もできます。
実は僕は今回学習に失敗したのですが、作業フローはひととおり書いたので、公開しちゃいます。

**【こういうのが作りたかった】**

#手順(データセット準備)

###1、動画を集める。
分類したい動作の動画を集めます。
今回はこのようなアクションを用意してみました。
  Firebase Cloud Messaging(FCM)は中国では使えない

iOS/Androidアプリの開発を協業している他社担当者から、システムテストにおいて、

「プッシュ通知が届かない」
「iOS/Androidとも同じく」

という報告があり、再現性を確認したのですが弊社側では再現せず…

同アプリはプッシュ通知にFirebase Cloud Messaging(FCM)を利用しています。
バックエンド側のログなどを追うと、どうやら、SDK経由で取得できるはずのプッシュトークンが取得できていない模様。

で、協業他社によくよく聞いてみると、中国でテストをしている、とのことで、
調べたところ、FCMって中国(本土)では使えないんですね…(→参考リンク)

同アプリは日本国内での利用が前提なので、協業他社に「プッシュ通知のテストだけは国内でお願いします」と依頼するだけで済んだのですが。
もしグローバルなサービスだったら、中国本土で使えるプッシュ通知mBaaSに乗り換えるなど、大幅なアーキテクチャ変更になるところでした。:cold_sweat:

なお、FCMの公式ドキュメントではその辺りの制限事項に関する記述は見つけられませんでした。

参考リンク:

元記事を表示

【Swift】処理フローが「一発」でわかる非同期の順次処理の書き方

## はじめに
今回は、スパゲッティコードにならないような順次処理を考えてみたので記事にしてみました。

特定の順番で毎回実行される処理って、条件分岐や繰り返しが無いので、シンプルに書くことができます。
しかし、非同期で実行される処理がある場合などは、可読性を意識して書かないと、案外メチャクチャになりがちです。(←過去の経験より)

## この記事で学べること
– 順次処理とは?
– 非同期で実行される順次処理を実装する上での課題はなにか?
– 処理フローを追いやすい順次処理の書き方

結論だけ確認したい方は、`「処理フローを追いやすい順次処理の書き方」`から読んでいただければと思います。

## 順次処理ってなに?
指定した順番に沿って順番に実行されていくプログラムのこと

日常生活にたとえてみると、
`朝起きる → 朝食を食べる → 歯を磨く → 着替える → 家を出る`
というような、一連の流れがこれに当てはまります。

とてもとてもシンプルな構造ですので、一見プログラムもシンプルになると思われがちです。

## 非同期処理を含む順次処理の課題とは?
さっきの日常生活のたとえを、

元記事を表示

iOS シミュレーターに写真をドラッグ&ドロップすると PHPhotosErrorDomain エラーが発生する

## 概要

macOS に保存されている写真を iOS のシミュレーターで使う際に、mac から シミュレーターにドラッグ&ドロップすればコピーできるとあったため、実施したところエラーが発生した。

## エラー内容

“`text
One or more media items failed to import:
ファイルパス: The operation couldn’t be completed. (PHPhotosErrorDomain error -1.)
“`

## 解決方法

コピー元のディレクトリー(`xxx`)がダウンロードディレクトリー(`~/Downloads/xxx`)だったため、ホームディレクトリー(`~/xxx`)へ移動したところ解決した。

## 参照 URL

https://developer.apple.com/forums/thread/126307

元記事を表示

ReactエンジニアがReact Nativeを使ってみた

#はじめに
もともとReactを使用してweb開発をしていましたが、React Nativeを使用したモバイル開発に関わることになりました。Reactを使っていた人間がReact Nativeを勉強してみた所感を書きたいと思います。本記事はReact Native公式ドキュメント[[1]]を参考に書いていきます。

#前提
Reactが使える
TypeScriptが使える
モバイルは初めて

環境構築と簡単な動作確認が知りたい人は前回の記事[[1]]で行っているのでそちらを参照してください。

#React Nativeの必要性
現在モバイル端末での使用OSはAndroidOSとiOSで二極化しており、なおかつそれぞれでの使用プログラミング言語も異なります。昔はiOSではObjective-C、AndroidではJavaが使用されていました。しかし、最近ではiOSではSwift、AndroidではKotlinという言語が使われており、2つのOS合わせると最大4つのコードが存在する可能性があるわけです。もちろんこれは開発効率の観点から見て良くなく、これを解決するためにReact Nati

元記事を表示

【Unity】iOSでウィンドウからSafeAreaを取得するプラグインを作る

iOS 15でデバイスを回転させるとScreen.safeAreaが正しい値を返さないことがフォーラムで話題になっています。
>[Unity SafeArea is inconsistent between different starting rotations](https://forum.unity.com/threads/unity-safearea-is-inconsistent-between-different-starting-rotations.1173764/)

Screen.safeAreaが正しい値を返さないのは何年も前からある現象で、UnityとしてはもうFixしたと言ってみたり、また再発したりを繰り返しています。
原因はUIViewのsafeAreaInsetsが正しい値を返さないことにあり、UIWindowのsafeAreaInsetsだと正しかったりします。
どうもウィンドウからビューにイベントの伝達がうまくいってないっぽく、これはUnityの責任というより、Appleの責任ではないかとも思われます。
UnityでiOSビルドしたプロジェクトを探すと、

元記事を表示

RealityKitで顔と重なったオブジェクトを表示する(FaceMeshを非表示にする)

RealityKitでFaceAnchorを使うと、顔より後ろのARオブジェクトが透過されます。

この深度オクルージョンをオフにするには、

“`swift
arView.renderOptions.insert(.disableFaceOcclusions)

// iOS15からは.disableFaceMesh
“`

?
****
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

Core 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

元記事を表示

OTHERカテゴリの最新記事