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

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

[Swift]なぜIdentifableつけるの?

#この記事を書いた理由
現在Swift UIの勉強をしていますが、Listを作成する機会がとっても多い。
その中で頻出するIdentifableについて、「頻出だけどあまり理解できていない・・・」と思っていたので、1人でも私と同じような人がいなくなればと思って今回記事にまとめています。
まだ勉強中なので間違えていましたらご指摘いただけますと幸いです。

#目次
[1.Identifableとは?](#Identifableとは?)
[2.Identifableが無い時のエラーについて](#Identifableが無い時のエラーについて)
[3.実装してみる](#実装してみる)
[4.まとめ](#まとめ)

#Identifableとは?
そもそもIdentifableとは何でしょうか。
結論から言うと、**構造体に準拠するコンテンツにidを振ることを可能にするプロトコル**です。

まだちょっとわかりにくいですよね。
順を追って説明していきます。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
プロトコルについての記事はこちら → 現在作成中
構造体についての記事は

元記事を表示

【Xcode】コードスニペットで何回も書く処理を時短しちゃおう!

# はじめに
コードを書いていると、「あー、このコード前も書いたなー。」ということはよくありますよね。個人開発アプリを作っているとき、サンプルアプリを作っているとき、何度も同じコードを書くのは面倒ですよね。そんなときに、コードスニペットと呼ばれる機能を使うと時短ができちゃうので、その紹介です。

# 環境
Xcode Version 13.2.1
MacOS Monterey Version 12.1

# 何ができるの?
何度も使うコードをコードスニペットに任意のキーワードと一緒に登録しておくことで、いつでもキーワードから特定のコードを呼び出すことができます。
と、文章で書いてもよくわからないので、実際にやってみましょう。

# 今回登録するコード
今回は以下のアラートのコードをスニペットとして登録していきます。そして、登録したコードを__`「alert」`__と入力することで呼び出せるようにしていきます。

![スクリーンショット 2022-02-13 22.15.35.png](https://qiita-image-store.s3.ap-northeast-1.amazona

元記事を表示

Windows端末でBlazorアプリを作ってiPhoneにデプロイするためには(macbookが別途必要) – その1

## Windows機でiPhone向けアプリを開発をしたい!
皆さんこんにちは。
僕は、とにかく開発については、操作性などから、Windows愛用者。

で、iPhone向けのモバイルデスクトップアプリを作ろうと思ったときに、
選択肢はいろいろあるのですが、
とにもかくにも「Experimental Mobile Blazor」で、Blazorアプリにしたくなり。

Webじゃなくて、モバイルネイティブなアプリです(のつもりですw)

で、そんなときに、Macbookも持っているのですが、
現時点(2022/02)では、VisualStudio2022がMacbookに対応していなかったりなどなど。

いろいろあって、やっぱりWindowsで開発したいよね~と。

そんなときの手順の覚書です。

## MacBook側の設定
3. Visual Studio for Macをインストール (Xcodeより先に入っていると、Win機側のVSからペアリングすると、見つからないといわれる。。)
 ※何がダメだったって、Win機からペアリングしようとすると、XCodeが見つかんねーよって

元記事を表示

「信頼されていないデベロッパ」のダイアログが出て自作アプリが起動できない!

## XCodeで作成したアプリを自分のiPhoneで「信頼されてないよ」と出た時の対応。

### 環境
* iOS 15.2.1

### 手順
1. [設定」を開く
2. [一般]を開く
3. [VPNとデバイス管理]を開く
4. [デベロッパAPP]をクリック
5. 信頼したいアカウントを選択して信頼するをクリック

##### 以上で完了です。
##### iOS更新のたびに、こういった設定周りの場所が、ネットで出ている情報と変わってしまうので、備忘録でした。

元記事を表示

【Swift】CoreBluetoothの使い方 その3:ペリフェラルの実装

#はじめに

Corebluetoothのペリフェラル側の実装について記載していきます。

①その1:BLEにおける役割
②その2:セントラルの実装
③その3:ペリフェラルの実装 ← 今回はここ

#処理の順番
・必要な機能の初期化
・アドバタイズの開始
・その後はCentral側の処理によって順番は変わるので、書込みや読み込みなどに応答するためのDelegateメソッドを実装

#必要な機能の初期化
・BLE関連の設定の追記
info.plistに「Privacy – Bluetooth Always Usage Description」を追加
info.plistに「Privacy – Bluetooth Peripheral Usage Description」を追加

#以降の処理及びコード
以下のような画面のペリフェラルアプリを作製しました。

|IMG_0021.PNGQR読込範囲指定

# はじめに
QR読取時に読取範囲を指定する必要があったのだが、なかなか思うように範囲を設定できなかったのでログに残しておく。

# CGRect直で読取り範囲を算出(失敗)
`AVCaptureMetadataOutput`インスタンスの`rectOfInterest`プロパティに`CGRect`インスタンスを使って読取範囲を指定するサンプルをいくつか見つけたのだが、意図通りに読取範囲を指定することができなかった(Y軸にずれがある)。

“`swift
// CGRectで指定しているサンプル
self.metadataOutput.rectOfInterest = CGRect(x: frame.minY,y: 1-frame.minX-frame.size.width, width: frame.size.height,height: frame.size.width)
“`
[参考]

– [Swift5 QRリーダーの実装 脳死コピペ用](https://www.letitride.jp/entry/2019/12/03/125802)
– [iOSでバーコードを読み

元記事を表示

【Swift・iOS】初学者も必見!! ライフサイクルについて今一度考えてみた編

こんにちは、株式会社ZOZOでiOSエンジニアをしております@shogunzozoです!!

自身2本目の記事はライフサイクル関係についての記事を書いてみました。
普段何気無く使っているライフサイクルに関するメソッド群も使い方次第でパフォーマンスに直結してくると痛感する日々です。

プロダクトを直接的に実装するエンジニアとしてユーザーのUX向上は命題です。そのため、今一度根幹であるライフサイクルに関して見直しせっかくなのでQiitaに残す事にしました。

## 本記事の内容
初学者にもわかりやすく、iOSアプリのライフサイクルに関してまとめてあります。
困った時の辞書代わりに使って頂ければ幸いです。

## そもそもライフサイクルって何??
簡略化すると、一般にアプリが立ち上がり画面が描画され消える(次の画面に進んだり、アプリを閉じたり)までの一連の流れを言います。

つまり、アプリで画面のライフサイクルというと以下2点が大きな意味合いになると思います。
* 画面データがいつ読み込まれ、レイアウトはどのタイミングで計算されているのか
* その瞬間瞬間はどういったメソッドで実行されてい

元記事を表示

[iOS]純正アプリ ショートカットを使ってパスワード管理アプリを作ってみよう

# はじめに
みなさん iPhone アプリの`ショートカット`ってご存知ですか?
このアプリが結構便利で iPhone 上で色々できてしまうんです。
今回はこのショートカットアプリでできることを紹介しようと思います。

突然ですが、各種パスワードの管理ってどのようにしてます?
私は元々 iPhone のメモアプリで管理していました。
でも、これって各パスワードの検索がすごく大変なんですよね。
とはいえ、有料のパスワード管理アプリを使うのもなんか費用対効果が伴っていない気がしていました。
そこで、ショートカットアプリを使ってパスワード管理アプリを作れないか挑戦してみました。

このパスワード管理アプリ作成を通してショートカットアプリにできることの一部を紹介していきます。

# 構成
構成は以下のようになります。
各項目の概要を説明します。

– DB
– 検索入力フォーム
– 検索エンジン

## DB
まずはアプリケーションの構成から紹介していきます。
パスワードを保存しておくデータベースですがこちらも iPhone のアプリケーションでかつ無料で再現したいですね。
ということで純

元記事を表示

【Firebase】初心者メモ【iOS / SwiftUI】

####実行環境
・Xcode Version 13.2.1

#Firebase プロジェクト
####開発環境と本番環境の分け方
Firebaseプロジェクトに設定するバンドルIDを本番用プロジェクトは本番のもの、開発用プロジェクトは後ろに-devなどを付けたものにし、Xcode側は開発中は以下のようにしておけば(良くないけど)ひとまず問題なさそう。(プロジェクト名は-prod/-devなど)
・バンドル ID:本番のもの+-devなどに変更する
・GoogleService-Info.plist:本番用のものをリネームしておき、開発用のをGoogleService-Info.plistとしておく

#パッケージ
####パッケージのインストール
Project > Package Dependenciesで一度インストールしたあと、他のサービスも利用することになって追加のインストールが必要になった場合、「-」ボタンで一度削除して、再度まとめてインストールするっぽい。
サービスに対応するライブラリの一覧(公式):
https://firebase.google.com/docs/i

元記事を表示

iPhoneの動作時のブルっという触覚効果をさっと作りたい とりあえずの構成

#タップ時にデバイスがふるえる機能の追加方法です
![2000928.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/2ef9b944-c0ea-b141-5c88-e40354d378ba.png)

#なるべく少ない設定で触覚をつけたい

#方法

触覚用のクラスを作ります。
よかったらコピペで使ってください。

“`swift
import Foundation
import CoreHaptics

class Haptics:NSObject {
var engine: CHHapticEngine?
lazy var supportsHaptics: Bool = {
CHHapticEngine.capabilitiesForHardware().supportsHaptics
}()
override init() {
super.init()
if supportsHaptics {

元記事を表示

アニメ用の超解像と写真用の超解像、どうちがう?。比べてみた。 

#RealESRGANのアニメ用モデルと写真用モデルを比べてみました

#アニメにはアニメ用を使った方がいいの?

超解像モデルには、アニメ用に最適化されたものがあります。
写真用のモデルとどうちがうのでしょうか?
実際に同じデータで比べてみました。

#画像ドロップで簡単比較

画像をドロップするだけでモデルを試せるCoreMLのモデルを使って、画像を超解像して比較します。

![スクリーンショット 2022-02-13 10.32.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/0396ee0b-7a82-b16c-c4f2-9a6585be940c.png)

モデルはGitHubからダウンロードできます。

https://github.com/john-rocky/CoreML-Models

**オリジナル**
![mononoke011のコピー.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com

元記事を表示

[iOS] [Swift] Password AutoFill(パスワード自動入力)を無効化したい…けどダメだった話

# 前提環境

– Xcode 13.1
– iOS 15.0 / 14.5

# Password AutoFillとは

iOS 11から導入された、こちらの画像の機能です。**『「?パスワード」っていうのを出さないようにしたい!』という話題です。**
IMG_0003.PNGIMG_0004.PNG
IMG_0005.PNG「The Ultimate Guide to WKWebView」をSwiftUIで実装する #06 – Opening a link in the external browser –

[「The Ultimate Guide to WKWebView」](https://www.hackingwithswift.com/articles/112/the-ultimate-guide-to-wkwebvie)をSwiftUIで実装してみるの、
6つ目になります。

前回に続き、WebViewで押下されたリンクの文字列を元に色々やります!
タイトルは「Opening a link in the external browser」ですが、
外部ブラウザでリンクを開くだけでなく、それ以外にも色々やってます。

もはや元記事は名前を借りているだけになってきたかも・・・

## 目次

シリーズ化していこうと思うので、全体の目次を置いておきます。
リンクが貼られていないタイトルは、記事作成中または未作成のものになります。

|#|タイトル|
|——|—————–|—|
|01|[Making a web view fill the screen](https://qiita.com/kamimi01/items/b4d6cbafa587831c

元記事を表示

「The Ultimate Guide to WKWebView」をSwiftUIで実装する #05 – Controlling which sites can be visited –

[「The Ultimate Guide to WKWebView」](https://www.hackingwithswift.com/articles/112/the-ultimate-guide-to-wkwebvie)をSwiftUIで実装してみるの、
5つ目になります。

この回から、`WKNavigationDelegate`プロトコルを使っていきます。
なので、今まで実装していなかった、`makeCoordinator`メソッドを使う必要があります。

あまり詳しくは説明しませんが、
UIKitで実装したViewからSwiftUIのViewにイベントを伝えたい時に使います。

## 目次

シリーズ化していこうと思うので、全体の目次を置いておきます。
リンクが貼られていないタイトルは、記事作成中または未作成のものになります。

|#|タイトル|
|——|—————–|—|
|01|[Making a web view fill the screen](https://qiita.com/kamimi01/items/b4d6cbafa58

元記事を表示

え、この機能、デフォルトでUIKitにあったの? 長押しメニュー、Context Menuでかんたんに。

#アプリでよく見る長押しして表示するメニュー機能をかんたんに作れる方法です
![Feb-11-2022 09-56-15](https://user-images.githubusercontent.com/23278992/153523539-6ce5756f-c9f0-464a-9d60-61c24560057b.gif)
#わかりやすい長押しポップアップハイライトを作りたいけど、1から作るのはたいへんそう。。。

アプリでよく見るこういう機能、使いたいけど、アニメーションの設定などたいへんそうです。

#すごい便利なUIKitの機能があった
Context Menuは、この機能を短いコードで追加できるものです。

#方法

###UICollectionViewに追加する
CollectionViewにデリゲートメソッドが元々あるので、こちらの方が単一のViewに追加するより楽です。

“`swift
func collectionView(_ collectionView: UICollectionView,
contextMenuCo

元記事を表示

【iOS】位置情報を取得するCLLocationManagerの基本知識

# 位置情報の取得

[iOS14で位置情報を取得する](https://qiita.com/r0227n/items/6ae818adaab029436bf5)
[iOSアプリで位置情報を取得するときに配慮する点をまとめてみた①](https://qiita.com/reo0612/items/589ea45a0ce2cbd6ec07)
[Adding Location Services to Your App](https://developer.apple.com/documentation/corelocation/adding_location_services_to_your_app)

## デバイスが対応しているかを確認

`位置情報サービス`をアプリで利用する場合は、アプリを使用するデバイスが対応しているか確認する必要がある。

|メソッド|概要|
|—|—|
|[significantLocationChangeMonitoringAvailable()](https://developer.apple.com/documentation/corelocat

元記事を表示

iOS yuv videoRangeからyuv full rangeに変換する

h.264動画でmetal処理するときよくyuv video rangeの動画がきていて、 full rang + rgb変換しないと処理できないので、knowhowとして残したいと思ってます。

## 方法1

自前でmetal変換

“` c++
fragment float4 yuvVideoRangeToRGBFragmentShader(ColorInOut in [[ stage_in ]],
texture2d baseYTexture [[ texture(0) ]],
texture2d baseCbCrTexture [[ texture(1) ]]) {
constexpr sampler colorSampler;
const float4x4 ycbcrToRGBTransform = float4x4(
float4(+1.0000f, +1.0000f, +1.0000f, +

元記事を表示

【Swift】CombineをUIKitとSwiftUIで使うときの実装を比較する

# はじめに
`Combine`を学習していると、`SwiftUI`との組み合わせの実装をよく見るのですが、`UIKit`でも全然使えるとのことで、今回は、`UIKit`と`SwiftUI`で同じ動きをするサンプルアプリを作って、実装方法の違いや実装中に感じたことを記事にしました。

今回は、`MVVM`で実装しています。
当初、ViewModelは`UIKit`と`SwfitUI`で異なる実装をしていたのですが、@links_2_3_4 さんからアドバイスを頂いて、ViewModelも共通化しました。

# 結論
僕の経験値は`UIKit`>>>>>`SwiftUI`で、圧倒的に`UIKit`の経験の方が多いですが、
`Combine`を使った実装は、個人的には`SwiftUI`>`UIKit`で`SwiftUI`のほうが書きやすかったです。

実装時間も`SwiftUI`のほうが早く、今後もう少し機能を追加したいってなった時に`SwiftUI`のほうが、実装のイメージが湧きやすくて、簡単に実装できそうだと思いました。

私が`Combine`を最近始めた影響かもしれませんが、`UI

元記事を表示

サーバに配置したWebViewのコンテンツからスマホのネイティブアプリのURLスキームの呼び出し方法

筆者は普段サーバサイドのエンジニアとしてWebシステムの開発をしているが、
担当している案件でスマホのネイティブアプリ内のWebView内にコンテンツを組み込む案件がありました。

その際に、URLスキームを使ってネイティブアプリとWebViewのコンテンツ間の連携でハマったので、備忘録として残しておきます。
本記事はあくまでサーバサイドの立場からの対処方法になります。

## URLスキームの書き方
筆者ははじめ、下記のコード用にfetch関数での読み込みを想定していました。
しかしURLスキームはネイティブアプリのWebViewのURLローダーの部分で実行する仕組みのため、
fetch関数のようなJavaScriptの非同期処理では実行が出来ませんでした。
そこで以下のように `location.href` にURLスキームを設定し、
ネイティブアプリのWebViewに読み込ませることで問題を解消しました。

“`
// 間違い
fetch(“【URLスキーム】”);
// 正解
location.href = “【URLスキーム】”;
// 参考例
location.href

元記事を表示

TestFlightから直接AppStoreの審査に出す方法

# 概要
iOSにてアプリをリリースする際にチーム内でテストしてから審査に出すフローが多いかと思います。
今回はTestFlightでテスト実施から直接AppStoreに審査する方法をご紹介します。

# 今回の肝
TestFlightにアップロードしたアプリのバージョンとAppStoreで審査しようとしているバージョンが揃っている必要があります。
今回の記事ではバージョン`1.0.0`として解説します。

# まずは普通にTestFlightにアップロード
TestFlightにアップロードします。ここでバージョンが`1.0.0`であることを確認します。

![TestFlight.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49347/088571aa-b22a-9112-0780-0f1ce71b9cbf.png)

# AppStore側でTestFlightに上がっているビルドを指定
AppStore側で`1.0.0`を作成し、TestFlightとバージョンが揃っていると
`ビルド`

元記事を表示

OTHERカテゴリの最新記事