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

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

ARKitのフレームを解析するときの注意点

ARKitのCapturedFrameをVisionなどで解析してARインタラクションを作る場合があるが、
この際**ARKitSessionDelegateで取得できるフレームとディスプレイに表示されているフレームの領域が違うことがある。(キャプチャされた一部分を表示していることがある)**

例えば、iPhone11ではディスプレイが 414×896 だが、キャプチャしたフレームサイズは 1440×1920 である。

ディスプレイ内にフレーム縦幅は全て収まっているが、横は中心部しか収まっていない。

![スクリーンショット 2022-03-03 22.48.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/9b539c45-4bd2-7228-b4af-1f9f7bf14e6e.png)

ディスプレイに表示されている領域でフレームをクロップするコード。

“`swift
func session(_ session: ARSession, didUpdate frame: AR

元記事を表示

SwiftUI Tutorial の応用

## 内容
– SwiftUI Tutorial の応用

## 開発環境
### ハードウエア
|項目||
|—|—|
|PC| MacBook Air(M1,2020) メモリ:16GB ストレージ:1TB |
|実機 | iPhoneSE(2nd Generation 128GB iOS 15.3.1) |
|PCと実機を接続する|[USB-C Digital AV Multiportアダプタ](https://www.apple.com/jp/shop/product/MUF82ZA/A/usb-c-digital-av-multiport%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF)|

### ソフトウエア
|項目||
|—|—|
|言語|Swift 5.5.2|
|IDE|Xcode Ver 13.2.1|
|その他|Visual Studio Code Ver 1.64.2|

### バージョン管理
[GitHub – 実際にコードを確認できます](https://github.com/tanakadaichi1989/Ha

元記事を表示

【iOS】Storyboardを使わずUIを作成するために必要なXCodeの初期設定

# 目的
Storyboardを使わずにUIを作成する場合、必要となるXCodeの初期設定について説明

# 流れ
①: プロジェクトを作成し、実行できることを確認(Storyboardあり)
②: Main.storyboard を削除
③: SceneDelegate.swift のコードを全てコメントアウト
④: MainInterface の設定を変更
⑤: info.plist の Storyboard Name を削除
⑥: ViewController のプログラム変更
⑦: 実行結果

# ①: プロジェクトを作成し、実行できることを確認(Storyboardあり)
新規でプロジェクトを作成し、「▶︎」ボタンを押して実行可能なことを確認する

# ②: Main.storyboard を削除
Main.storyboard上で右クリック → 「Delete」 → 「Move To Trash」

# ③: SceneDelegate.swift のコードを全てコメントアウト
SceneDelegate.swift のコードを全て選択して、「Command + /

元記事を表示

【Flutter】IOSのモーダルアラートを日本語にLocalizeする方法

# はじめに
Flutterで開発したIOSアプリを審査に提出した際、
モーダルアラートが日本語になっていないとのことでリジェクトされました。

当方、IOSアプリの経験がなく結構ハマったため
同じようにハマられている方向けに解決策を記載します。

# リジェクト内容の詳細

要約すると
> 日本語設定なのにフォトライブラリのモーダルアラートが英語になっています。

フォトライブラリのモーダルアラートとはこのことです。
![Screen Shot 2022-03-03 at 12.01.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563564/48e915f8-68ee-9840-6874-f1a0eb63976d.png)

赤枠の部分を日本語にしなければいけないみたいですね。

原文
> Guideline 4.0 – Design
> We noticed an issue in your app that contributes to a lower-quality user exp

元記事を表示

Flutterで動画編集ができるパッケージ、Tapiocaを作った話

Flutterで動画編集ができるパッケージ、Tapiocaを開発しているのですが、開発している中で知見がかなり多くあったので共有させていただきます!
![1646216090296result.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188304/ecac2b6c-6fa7-97d5-a669-5890d906b2c1.gif)

Tapiocaでは↑上のような動画編集が↓下のようなコードでシンプルに書けます。
“`dart
import ‘package:tapioca/tapioca.dart’;
import ‘package:path_provider/path_provider.dart’;

final tapiocaBalls = [
TapiocaBall.filter(Filters.pink),
TapiocaBall.imageOverlay(imageBitmap, 300, 5),
TapiocaBall.textOverlay(“Hello w

元記事を表示

iOSショートカットを使ってシフト管理アプリ「シフトボード」の予定をGoogleカレンダーに自動で同期させる

概要

※この記事は、シフトなどの予定はシフトボードで管理していて、日常的な予定はGoogleカレンダーで管理している人向けの記事です。

シフトボードとは、リクルートが提供するシフト管理に特化したアプリで、iOS版、Android版がありそれぞれで使うことができます。
Android版に関しては使ったことがないのでここでは触れません。

シフトボードは、Googleカレンダーと連携出来ないですが、iOS標準カレンダーとは連携ができます。
なので、GoogleカレンダーのiCloudのシフトボードにチェックを入れて表示すれば、自分のiPhoneからのみシフトボードの予定をGoogleカレンダーから確認できます。

しかし、これだとPC版Googleカレンダーやカレンダーを共有している他の人からはシフトボードの予定が確認できないので若干不便です。

今回作成したiOSショートカットを使うことで、PC版Googleカレンダーやカレンダーを共有している他の人からでもシフトボードの予定を確認できるようになります。

そうするこ

元記事を表示

画面の向きを固定する方法

# 開発環境
Swift version 5.5.2
Xcode Version 13.2.1
Interface SwiftUI

# 問題
SwiftUIを使用しアプリを開発しているが、
画面を横向きに固定できず回転してしまう。

# 結論
xcodeprojで修正する
Xcode13だと効かないことがあるようですが、以下の手順全てを試したところ横向きのみに固定できました。
 
# 手順
1, Navigator areaのプロジェクト名をクリックし、.xcodeprojを開く。
2, TARGETS>`General`の`Device Orientation`で固定したい項目にチェックを入れる。

|項目|内容|
|-|-|
|.portrait|通常|
|.portraitUpsideDown|逆さ|
|.landscapeLeft|左向き|
|.landscapeRight|右向き|

上記だけだと解決できなかったため以下の手順も試しました。

3, 手順2の`General`ではなく`Info`を開く。
4, `Supported interfa

元記事を表示

iOSのLaunchScreen(スプラッシュ)が更新されない

スプラッシュ画像を変更しようとしたところ、Xcodeの`LaunchScreen.storyboard`上は更新が反映しているが、Runしたりipa配布すると古いスプラッシュ画像のままという現象に遭遇してドハマリしたので解決方法を共有します。
10年以上iOSアプリ開発してるけど、今まではハマった記憶がない。。

### 解決方法
* xcassetsの外に、元の画像名と異なる名前で画像を作成する
* LaunchScreen.storyboardからは↑で作成した画像を参照する

### 原因
iOSのSpringBoardのキャッシュのせいみたいです。
デバイスを再起動すれば反映されるけど、開発者はそれでよくてもエンドユーザーには頼めないよね。ということで上記の方法をとりました。

### 参考
http://arsenkin.com/launch_screen_image_cache.html

元記事を表示

building could produce unreliable results. This usually can be resolved by moving the target’s Headers build phase before Compile Sources. が Expoで出たときは

Expoで開発しているとたまにこんなエラーが出ることがあります。

主に `expo build:ios` を実行したときです。

“`
Cycle inside “YOUR_APPS”; building could produce unreliable results. This usually can be resolved by moving the target’s Headers build phase before Compile Sources.
“`

裏ではNativeBuildが走っているのですが、この記事の通り、何らかのビルドサイクルが狂ったときに起きるようです。

https://qiita.com/keisukeYamagishi/items/60aa5cf9d00ac6cf3b86

今回私が遭遇したパターンだと、ビルド中、もしくはiOS Simulatorで実行中に(ローカルサーバーが動いている状態)マシンを再起動したときです。

## 解決方法
上記の記事ではXCodeを使った開発の場合です。

我々のようにExpoで開発しているプロジェクトの場

元記事を表示

音ゲー中の通知を自動で防ぐ簡単な方法

# はじめに
音ゲーや何かしらのアプリで楽しんでいる時に通知が来たらイラッとしたり邪魔だったりしますよね。
そんなストレスを簡単に解消できる設定をご紹介します。

:::note warn
この記事はiOS限定です。
:::

# ショートカットApp
iOSにはApple純正のショートカットというAppがあります。
[ショートカット on AppStore](https://apps.apple.com/jp/app/%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88/id1462947752)
![d230a25cb974f8908871af04caad89a1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588777/a5cef692-d129-75c5-cf4a-4df5f217019b.png)

これを使えばワンタップで煩雑な一連の作業を自動で実行してくれたり、ある条件になると勝手にショートカットを実行してくれたり

元記事を表示

ライブラリを分解して組み合わせて、車輪の再発明をするーードキュメントスキャナ

# 置かれた書類を検知して真っ直ぐにする機能を作ります

# 置かれた書類を自動検知して真っ直ぐにしたい
置かれた書類をカメラで撮影すると、斜めになることがあります。
それを自動で真っ直ぐに直してくれる機能があればいいですよね。

で、iOSではVisionKitというフレームワークですでに実現できます。

![Mar-01-2022 08-45-00](https://user-imag

元記事を表示

Flutterでダークモード時に画像を切り替える【Dart】

Xcode/AndroidStudioでそれぞれ開発するときは、ライトモード用とダークモード用の画像を用意しておくと勝手に切り替えてくれる機能がありますが、Flutterではそれを使うことができないようです。

以下のようにして対応します。

“`.dart
Image.asset(
Theme.of(context).brightness == Brightness.dark
? ‘assets/images/image_dark.png’
: ‘assets/images/image_light.png’,
),
“`

`(bool変数) ? (trueのときの処理) : (falseのときの処理)`の構文を利用して、
ダークモード(Theme.of(context).brightness == Brightness.dark)のときは、image_dark.png、
ライトモード(Theme.of(context).brightness == Brightness.light)のときはimage_light.png
を表示させます。

[Twitte

元記事を表示

エラーが出て、 CocoaPods をインストールできない。「You don’t have write permissions for the /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/gems/2.6.0 directory.」

## 1. やりたいことを確認する。

#### CocoaPods をインストールしたい。

> CocoaPodsとは、定番のCocoaの依存管理マネージャーです。アプリ開発で煩雑となりがちな外部ライブラリの管理を、簡単な記述とコマンドだけ支援するものです。
>

https://dev.classmethod.jp/articles/cocoapods/

こちらの記事を参考に、 CocoaPods をインストールしようとしているところ。

## 2. 課題(エラーの状況、不明点、エラーログ)を確認する。

#### ⚠️ cocoapods をインストールできない。

“`bash
$ sudo gem install cocoapods
Password:
Fetching rexml-3.2.5.gem
Fetching colored2-3.1.2.gem
Fetching claide-1.1.0.gem
Fetching atomos-0.1.3.gem
Fetching ruby-macho-2.5.1.gem
Fetching nanaimo-0.3.0.ge

元記事を表示

[Swift]Delegateについて 初級編

# この記事を書いた理由
Swiftを勉強し始めて、ずっと分かんなかったよ。
難しい。難しいよDelegateの理解。

というわけで、もしかしたら他にも同じ方いらっしゃるのではないかと思いDelegateについて備忘録的に私の理解を記載したいと思います。
Delegateは色々なされ方がありますが、まずは初級として概念的に理解していただければと思います。
まだ勉強中なので間違えていましたらご指摘いただけますと幸いです。

# 目次
[1.Delegateとは?](#Delegateとは?)
[2.どんな時にDelegateは必要なの?](#どんな時にDelegateは必要なの?)
[3.メンドクサイから処理の一部を、他にやってもらう](#メンドクサイから処理の一部を、他にやってもらう)
[4.エラーが出てしまう理由](#エラーが出てしまう理由)
[5.protocolを使用する](#protocolを使用する)
[6.まとめ](#まとめ)

# Delegateとは?
結論から言うと、Delegateとは **「あるクラスから他のクラスに処理を任せる」** というデザインパターンのこ

元記事を表示

URLProtocolでURLSessionの通信をハンドリングする

# 概要

例えば、通信などが起きたときに、そのログを残しておいたり、通信量を調べたい時があると思います。
そんな通信のハンドリングを行うために、URLProtocolを利用します。

## 通信をURLProtocol継承クラスに処理させる
通信をハンドリングするには、ハンドリングするためのURLProtocol継承クラスを用意します。ここではMyURLProtocolという名前にしました。
URLProtocol継承クラスの実装に関しては後ほど説明します。

URLProtocol継承クラスを用意したら、各種通信がURLProtocol継承クラスを通して行われるようにします。

### URLSession.sharedの場合
もしURLSession.sharedしか使われていないのであれば、`URLProtocol.registerClass` を使うことで全てのURLSession.sharedの通信がURLProtocol継承クラスを通してハンドリングされます。

“`swift
URLProtocol.registerClass(MyURLProtocol.self)

元記事を表示

AIが文章の表現や文体をチェックしてくれるアプリを作った?

# はじめに
文章を分析してアドバイスをしてくれるAIアプリをリリースしました。今回はその機能と使用した技術についての記事になります。ダウンロードは画像もしくは[こちらのリンク](https://textcheckai.page.link/first)からどうぞ。ちなみに画像のキャラクターがAIの「ホメロス」です。

[](https://textcheckai.page.link/first)

# ホメロスができること
![AI編集者が 文章チェック!のコピー-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/713689/12432fe4-f6a5-7f9a-28d2-2d09bff59378.png)

## 文体分析
ユーザーが入力した文章を分析し、その文

元記事を表示

斜めに置かれた書類をまっすぐにしたい。画像変形する技術がすごい

# ドキュメントスキャナーのような画像変形を行う方法です。
![Feb-27-2022 23-14-57](https://user-images.githubusercontent.com/23278992/155886008-ecf1d7cb-eea0-4923-9e42-d9499c4911e2.gif)

# おいた書類をまっすぐに切り取りたい
書類などを机に置いて斜めから撮影すると、台形に移ります。
これをまっすぐな長方形にするには、画像を変形させる必要があります。

# DDPerspectiveTransformが使える
ライブラリを使えば、手動で簡単に画像を整形できるUIがつかえます。

https://github.com/d-dotsenko/DDPerspectiveTransform

# 使い方

DDPerspectiveTransformをプロジェクトに入れ、UIを表示します。

“`swift
let cropViewController = DDPerspectiveTransformViewController()
cropViewControll

元記事を表示

ショートカット+CoinGecko API+Subscan APIでDOT保有分を日本円換算した結果を確認する

# 作成したもの
iPhoneで保有するDOTを日本円換算し、計算結果をクリップボードにコピーするショートカットを作成しました。

ショートカット名:calcHoldDOT-JPY

https://www.icloud.com/shortcuts/09fa7af649ca4b1db1c228d474604c43

# 処理の流れ
1. [CoinGecko API V3](https://www.coingecko.com/ja/api/documentation?)を使用して**Polkadot**の日本円換算の値を取得するショートカットを実行して変数に設定
2. [Subscan API](https://docs.api.subscan.io/#introduction)を使用して指定したアドレスで保有するDOT(**Balance**)を取得するショートカットを実行して変数に設定
3. 1.と2.の変数を掛けて DOT保有量の日本円換算した結果をクリップボードにコピーし、ショートカットをの実行を停止
iOSのNSTimeZoneのUTCってnameがGMTなんだ..

![GMT_UTC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152641/ac5ea486-92d4-d55f-c618-9febbf5f2194.png)

AndroidとiOSでTimeZoneのUTCにまつわる調査をしていたところ想定外の結果になったので書き残しておきます。誰か真相を知っていたら教えて下さい。

# GMTとUTCの違い
GMTとUTCの違いをググるとCITIZENの用語集とよくある質問リストが最初に出てくる

https://citizen.jp/faq/detail/id1363

>両者は、目的も概念も算出方法もまったく異なりますが、日常生活に不都合のない精度の時間測定(整数の秒)であれば、ほぼ差がないと考えて問題ありません。

そう、ほぼ一緒と考えてよいということ。日本のAsia/Tokyo(+9:00)より9時間前のタイムゾーンということだ。

# Android(Kotlin)の場合

“`kotlin
import java.util.TimeZone

f

元記事を表示

【Swift】Combine ✕ Firestore ✕ Codableで通信処理を書く(取得・追加・削除の処理)

## はじめに
Combineを使った非同期処理として、`URLSession`は標準ライブラリが提供されておりますが、`Firestore`は自分で実装する必要があります。

このあたりの日本語での情報量が、`URLSession`と比較して、未開拓に感じましたので、自分が実装したサンプルコードを記事にしてみました。

今回、書いた処理は、Firestoreからの**取得・追加・削除**の処理です。(CRUDの中では更新がありませんが、更新処理は追加処理とほぼ変わらないため割愛します。)

## 追記(2022/03/01)
@GleamingCake さんからコメント頂き、知ったのですが、公式リポジトリ内でコミュニティベースの`Combine`をサポートするAPIが実装されているようです。今回の記事で私が実装した方法とは少し異なりますが、同じユースケースが実現可能なメソッドがありましたので、リンクを載せさせていただきます。

https://github.com/firebase/firebase-ios-sdk/tree/master/FirebaseCombineSwift

元記事を表示

OTHERカテゴリの最新記事