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

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

stack viewで幅が変更できない xcode(swift)

## stack viewで幅が変更できない

### やりたいこと
計算機アプリ作成のためstack viewを利用して、左右いっぱいにボタンを配置したい。

### 困ったこと
Widthの数値が変わらない。
![スクリーンショット 2022-04-10 8.27.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2533678/7413347e-8901-99b2-cb58-b56691691c44.png)

無理やりハンドツールで幅を広げると間が開く
![スクリーンショット 2022-04-10 8.30.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2533678/8b92086b-2631-c9d2-759f-e774da300b02.png)

### 解決方法
Horizontal(水平方向の)StackViewを覆うようにVertical(垂直方向の)StackViewが配置されているが
!

元記事を表示

ARKitのLocation Anchorsがサポートしているエリア

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1135021/15121635-a67a-edce-8dfa-cf774169977d.png)

Location Anchorsは、GPSだけでなくカメラから取得した視覚情報も活用してユーザの絶対的な位置を割り出し、絶対的な位置にアンカーを記録するAPIです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1135021/df9fac4c-3ad7-b846-ed4c-b78c1e2f45d4.png)

ARKitの機能の一つであるLocation Anchorsは、対応するエリアでした利用できません。

では、対応しているエリアはどこなのか。
公式ドキュメントに記載があったので引用します。
ちなみに**日本はありません。**

## Location Anchors対応エリア
アリゾナ州
 フェニックス

カリフォルニア州
 アラメ

元記事を表示

[iOS] もう二度と調べ直さないためのconvertメソッドに関するメモ

## convert to
“`swift
func convert(_ rect: CGRect, to view: UIView?) -> CGRect
“`

レシーバ(メソッドが呼ばれる対象のオブジェクト)の座標系 **から** 引数で渡す `view` の座標系 **へ** 変換する
`rect` にはレシーバのローカル座標 (bounds) を指定する

コード例
“`swift
let rect = targetView.convert(targetView.bounds, to: baseView)
“`

## convert from
“`swift
func convert(_ rect: CGRect, from view: UIView?) -> CGRect
“`

レシーバ(メソッドが呼ばれる対象のオブジェクト)の座標系 **へ** 引数で渡す `view` の座標系 **から** 変換する
`rect` には `view` のローカル座標 (bounds) を指定する

コード例
“`swift
let rect = baseView

元記事を表示

SwiftUIアプリでマークダウンテキストを表示する

この記事では、SwiftUIアプリ内でのマークダウン形式のテキストの表示について説明します。これは、コードに入力した文字列と、ユーザーが入力したテキストの両方に当てはまります。

## 使用可能なマークダウンフォーマット

現時点では、太字、イタリック体、リンク(リンクをクリックすると、Safariアプリが起動します)、コードのマークダウンが使用できます。

## コーディングする文字列の中でマークダウンを使用

コードファイルの中の文字列に直接マークダウンフォーマットを含めることができます。

“`swift
Text(“You can use **bold text**, an *italic* text, a [link](apple.com), or `a piece of code`.”)
“`

テキストはマークダウンフォーマットで表示されます。

![スクリーンショット 2022-04-09 14.16.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/4b164719

元記事を表示

【Unity】ARでインジケータ表示

# インジケータって?

こういうの

ARで任意の場所にオブジェクトを置きたい時のターゲットインジケータってわけです。

# 作り方
ARFoundationを使うので、予めパッケージに追加しといて下さい。

## インジケータのプレハブを用意

こういうの
![スクリーンショット 2022-04-08 23.56.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1135021/e1272f6d-b8c0-2583-518f-db6c46b86496.png)

### インジケータオブジェクトを作成
ヒエラルキーで空のオブジェクトを作成します(適当にIndicatorとか名前つける)

空のオブジェクト配下にPlaneを作成します。

![スクリーンショット 2022-04-08 23.59.39.png](https:

元記事を表示

物体検出ボックスを高速に描画する【Swift10倍高速バージョン】

# 物体検出結果を高速に描画します
![Apr-09-2022 09-21-00.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/e1a6ac67-a5b6-b996-dedc-9aef6f41a2ae.gif)

|Framework|(秒)|
|—|—|
|UIImage|0.5|
|CGImage|**0.04**|

# 検出よりも描画がボトルネックになる
Yoloなどをモバイル用にした物体検出モデルは、iPhone11で0.02のオーダーで実行できますが、結果を下記の自分の記事のような方法でUIImageに描画すると、描画の処理が0.5秒ほどかかります。

https://qiita.com/john-rocky/items/f698610ea997704ab178

つまり、
**描画処理に、検出自体の25倍の時間がかかってしまいました。**
特にラベルテキストの描画が処理の80%を食います。

これは**動画など大量のフレームの物体検出処理では致命的**です。

# C

元記事を表示

Android,iOSで画面遷移時のバックスタックを制御する方法

# やること
A, B, Cの3つの画面があります。
AからCに遷移した後、Cでバックボタンを押下したときにBに戻るようにします。

# Android (Navigation Architecture Component)

navigateメソッドを2回使用して、A→B→Cと遷移させます。

“`kotlin
navController.navigate(R.id.action_aFragment_to_bFragment)
navController.navigate(R.id.action_bFragment_to_cFragment)
“`

# iOS(UINavigationController)

UINavigationControllerの[setViewControllers](https://developer.apple.com/documentation/uikit/uinavigationcontroller/1621861-setviewcontrollers)メソッドを使います。

“`swift
navigationController?.se

元記事を表示

Qiita始めました!

# 目次
[1.はじめに](#1-はじめに)
[2.自己紹介](#2-自己紹介)
[3.おわりに](#3-おわりに)

# 1. はじめに
初めまして!
日報アプリgamba!(ガンバ)でエンジニアをしている池田です!
この度、日報アプリgamba!のメンバーでブログを始めることになりましたので、
この記事では私の自己紹介を書かせていただきます。

# 2. 自己紹介
現在、フリーランスのエンジニアとして
日報アプリgamba!(ガンバ)に参画している池田遼介(イケダリョウスケ)と申します!

faceu_1636788607773.JPG

### 趣味
趣味はゴルフと歌でゴルフは月1で行っています!スコアはアベレージ105あたりです!
あとは、歌が趣味なので、去年まで1年間ほどアプリで歌のライブ配信などもや

元記事を表示

UITableViewCell での UIView-Encapsulated-Layout-Height 制約との競合エラーに対処する

## 検証環境
Xcode 13.3 / iOS 15.4 / Swift version 5.6

## 要点

#### 問題
* UITableViewCellの中身を、縦のAutoLayout制約を全て`1000(UILayoutPriority.required)`で組むと、システムが作成する`UIView-Encapsulated-Layout-Height`制約との競合が発生する。

#### 解決法
→ 縦のAutoLayoutどこかの制約を`1000`未満(`999`以下)のプライオリティに変更する。

#### 理由
実行時にシステムはCellのContentViewの高さをセパレータ分を含めた高さを確定し、変更していると思われ、縦の制約のすべてがRequiredの場合、その制約と競合してしまう。

## 概要

### ‘UIView-Encapsulated-Layout-Height’とは?

UITableViewCellをAutoLayoutでレイアウトした後、実行すると以下のようなエラーが出ることがある。

“`Swift
2022-04-05 23

元記事を表示

Apple IDのはまりどころ

以下はApple Supportに電話で確認しました。(2022/4/5)

### Apple IDの2ファクタ認証を解除する方法は?

ありません。

現在新規で作成したApple IDは2ファクタ認証が強制されます。

昔に作ったApple IDで、まだ2ファクタ認証をOFFのままにしているなどの場合のみ、2ファクタ認証が有効化されていない場合があるようです。

### 一度削除をしたApple IDをもう一度復活させたい

できません。

一度Apple IDに登録したメールアドレスでもう一度新しいApple IDを作成することもできないようです。

### Apple IDの削除申請をしたが、やはり取り消したい。

Apple Supportに電話すると可能です。ただ7日以上経つと完全に削除されるそうです。7日以内でも絶対大丈夫とは限らないので早めに電話してください。

https://support.apple.com/ja-jp/HT201232

元記事を表示

UnityにNew Relic Agent(iOS)を導入してみる。

# はじめに

New RelicのMobile Agentは、正式にはUnityをサポートしてません。ただし、iOSのSDKはあるので、それらを組み込んでみた方法の記録と結果です。

## 確認したバージョン
以下のバージョンで確認してます。バージョンが異なると、設定項目や方法が異なる可能性があります。
– Unity
– 2020.3.26f1
– Xcode
– 13.2.1

## 導入方法
### XCFramework agentの導入
1. [ここ](https://docs.newrelic.com/docs/release-notes/mobile-release-notes/xcframework-release-notes/)から、最新版のXCFramework agentをダウンロードする
1. ダウンロードしたファイルを解凍すると、NewRelic.xcframeworkというアーカイブが現れ、これをそのまま、Unityの “Assets/Plugins/iOS/“のフォルダにコピーする
1. コピーした先の「NewRelic.xcframewo

元記事を表示

初心者でもわかるiOSサブスク課金のサーバ側の実装!App Store Server Notifications Version 2(StoreKit 2)のJWS検証と判定方法を解説!

こんにちは。[virapture株式会社](https://virapture.com)の[もぐめっと](https://mogmet.com)です。

![mogmet.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/5b025955-52c6-3688-ac45-e374e3227297.jpeg)
最近桜が咲いてたので京都で花見をしてきました。なかなか最高だったのでおすすめです。

本日は久々にiOSのサブスク実装をしたらStoreKit2なるものが出ていて、新しくなってたのでサーバ側での検証の仕方や実装方針などを解説しようと思います。

今回はApp Store Server Notifications Version2での解説をいたします。

payload内容の解説、JWSの検証方法、イベントによる判定基準を紹介します。
詳細はこの動画が参考になるので見ておくことをおすすめです。

https://developer.apple.com/videos/play/wwdc2021/1

元記事を表示

iOS開発者に教えたいAndroidの複数バージョンサポート開発手法

# iOS側の問題

複数バージョンをサポートしているアプリにおいて、
最新機能を実装する場合、以下の問題が常々発生します。

* APIの仕様が新バージョンでは異なる
* 旧バージョンのデバイスでは、最新バージョンの機能を呼び出せない

従ってiOS開発では、バージョン毎にコード分けをする必要が度々発生します。

“`swift
if #available(iOS 15, *) {
print(“このコードはiOSバージョンが15以降のデバイスのみ動作する”)
}
“`

## Androidにおける複数バージョン対応方法

Androidでは、大きく2つのライブラリーに別れます。

* 標準SDK – Android OSにアクセスするためのライブラリー
* Jetpac – 外部ライブラリーとして用意

実は現在主要な機能は、Android OS側ではなく、**Jetpack(外部ライブラリー)** として配布されています。

つまり最新機能は、**アプリ側に組み込んで開発する** といったことが可能になります。

この主要な機能には、Androidの根幹を成す `

元記事を表示

【iOS】extensionってなに?

# はじめに
先日、extensionについて調べてまとめる機会があったので、簡単にまとめてみました。

# extensionとは何か
Swiftでは既に存在している型に、プロパティやメソッドやイニシャライザなどの方を構成する要素を追加することができます。この型の拡張をextensionと呼びます。

主に

– クラス
– 構造体
– 列挙型

などに対して機能を拡張します。他にもIntやStringなどの型でも拡張することができます。

# 定義方法
extensionの定義方法は以下のように宣言できます。

“`swift

extension エクステンションを定義する対象の型 {
対象の方に追加したい要素
}
“`

# 継承との違い
クラスを拡張するという意味では、継承とextensionはとても似ています。
しかし、継承の場合は、あるクラスの機能を拡張するため、別のクラスが必要になります。
それに対してextensionは既にあるクラスを動的に拡張することができ、継承の際に発生するオーバーライドがありません。

つまり、継承はクラスを引き継いで新たなクラスを

元記事を表示

セグメントからレコードをタップ時にフォーカススキン未反映への対処法

# 目次
1. はじめに
1. 実装方法
1. まとめ
1. 参考

# 1.はじめに
この記事では、iOSでのSegmentウィジェットで設定するRowテンプレートにおいて、フォーカススキン消失の対応方法について紹介します。

# 2.実装方法
**●Segmentの通常実装**
1.プロジェクトを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/b40e5271-26f8-f00d-96e8-e13369bf2468.png)
2.SegmentウィジェットをFormに追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/e49f864c-4631-25d0-401f-902709900188.png)
3.Rowテンプレートを新規作成します。
※手順は次の通りです。
<PROPERTIES -> Segment -> Row Templat

元記事を表示

pod install で CDN: trunk URL couldn’t be downloaded が出たときの対応

忘れっぽい自分のための備忘録

## エラー内容

“`shell-session
>pod install
Analyzing dependencies
Pre-downloading: `XXXX` from `git@github.com:XXXX/XXXXXXXX.git`, commit `XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX`
[!] CDN: trunk URL couldn’t be downloaded: https://cdn.cocoapods.org/all_pods_versions_2_e_c.txt Response: URL using bad/illegal format or missing URL
make: *** [cocoapod-configure] Error 1
“`

## 解決方法

下記のコマンドを実行したら、解消した。

“`shell
pod repo remove trunk
pod install
“`

#### 参考にしたissue
– https://github

元記事を表示

YoloV5をCoreMLに変換。デコードレイヤーも追加する。

# Yolov5をiOSで使う方法です
Yolov5は物体検出機械学習モデルです。
iPhoneやiPadで使えるように、CoreML形式に変換します。

# 変換したモデルはそのままでは使えない

CoreMLToolsでシンプルに変換したYoloモデルの出力は、クラスごとの大量のボックスなので、そのままでは使えません。
デコード用のレイヤーと、Non Max Suppressionのレイヤーを追加して、信頼度の高いボックスの座標を絞り込む必要があります。
これらの処理をすることで、iOSのVisionフレームワークで扱えるようになり、また冒頭の画像のような簡単なファイルプレビュー機能が使えるようになります。

# iOSで使えるようにするモデル編集スクリプトがこちら

https://colab.research.google.com

元記事を表示

AVAssetExportSession#shouldOptimizeForNetworkUseは何をしているのか

# はじめに

iOSには動画ファイルを簡単にエンコードするための[AVAssetExportSession](https://developer.apple.com/documentation/avfoundation/avassetexportsession)クラスがあります。このクラスを利用して動画をエンコードするにあたり設定する項目に[shouldOptimizeForNetworkUse](https://developer.apple.com/documentation/avfoundation/avassetexportsession/1390593-shouldoptimizefornetworkuse)というものがあります。まずはドキュメントを読んでみましょう。
`ムービーをネットワーク用に最適化するかどうかを示すブール値`
この説明を読むと、ローカルではなくネットワーク上に配置した動画ファイルの再生に一役買ってくれそうなものだと考えられます。

# 考察

動画の配信方法には、大きく2つの方法「プログレッシブダウンロード」と「ストリーミング配信」があります。
プログ

元記事を表示

SwiftでMultipeer Connectivityを使ってUIImageを送信する

# 目次
– [はじめに](#はじめに)
– [環境](#環境)
– [sendメソッドでのUIImageの送信は時間がかかる](#sendメソッドでのUIImageの送信は時間がかかる)
– [UIImage送信をスムーズに行う為の解決策](#UIImage送信をスムーズに行う為の解決策)
– [参考コード](#参考コード)
– [さいごに](#さいごに)

# はじめに
SwiftでMultipeer Connectivityを使用してUIImageを送信する方法をまとめました。
Multipeer Connectivityの基本的な使い方はこちらの記事を参考にしました。
→[Multipeer ConnectivityでのP2P通信(Swift)](https://qiita.com/am10/items/e56c2bc6eaab75bc9c8c)

# 環境
– Xcode13.2.1
– Swift5

# sendメソッドでUIImageを送信すると時間がかかる
MCSessionクラスの[sendメソッド](https://developer.apple.com/docu

元記事を表示

FileManager事件簿〜ファイルを保存したパスにファイルがない

# FileManagerでファイルを保存したパスのファイルが消える事件発生

例えば画像をアプリのDocumentDirectoryに保存して、あとでロードしたいとするじゃないですか。
とりあえずpngをFileManagerで作ったurlに保存して、pathのstringをUserDefaultsで保存しとく。

“`swift
let imageData:Data = uiImage.pngData()
let url:URL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true).appendingPathComponent(UUID().uuidString+”.png”)
try! imageData?.write(to: url)
let path:String = url.path
UserDefaults.standard.set(, forKey: “imagePath”)
“`

で、アプリを

元記事を表示

OTHERカテゴリの最新記事