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

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

モダンCollectionViewとSwiftUIのハイブリッドを実現する

## はじめに

SwiftUIはこれまでのiOSアプリにおけるUI実装上の課題を解消する新技術として登場し、徐々にプロダクションでも利用されて来ていると思います。しかしまだ、UIKitでできていたことがすべて置き換えられる段階ではないというのも事実でしょう。一方で、UIKitの世界にもUICollectionViewのCompositionalLayoutやDiffableDataSourceといった便利で使いやすいAPIが登場しています。

このようなタイミングで既存のアプリに機能的にかなり独立した画面を新たに追加することになったので、ベースを UICollectionView + CompositionalLayout + DiffableDataSource (いわゆる[Modern Collection View](https://developer.apple.com/documentation/uikit/views_and_controls/collection_views/implementing_modern_collection_views))で実装し、セルの中身

元記事を表示

SwiftのARCによるメモリ管理について(備忘録)

#ARC(Automatic Reference Counting)について
###・ARCとは、Swiftにおけるメモリ管理の方式である。

・ARCでは、クラスのインスタンスを生成するたびにインスタンスのメモリ領域を確保し、不要になったタイミングで自動的にメモリを開放する。使用中のインスタンスのメモリが解放されてしまうことを防ぐために、プロパティ、変数、定数からそれぞれのクラスのインスタンスへの参照がいくつあるかをカウント(参照カウント)している。
・参照が増える -> 参照カウント +1
・参照が減る -> 参照カウント −1

そして、参照カウントが0になったタイミングでメモリが解放される。

・ARCによってインスタンスが破棄されるタイミングでは、クラスのデイニシャライザ(クリーンアップなどの終了処理)が実行される。

“`swift
final class Dog {
let name: String

init(name: String) {
self.name = name
}

// 参照カウントが0

元記事を表示

Sign in with Appleのデバッグで困ったことと解決方法

## はじめに
最近、久しぶりに「Sign in with Apple」を実装する機会があったのですが、
デバッグをする際にハマったので備忘録も兼ねての投稿です!

実装の仕方については、Firebaseのドキュメントを参考にして
あまり躓くこともなかったので本記事では詳細は割愛しますm(_ _)m
参考情報:[Firebase iOSでAppleを使用して認証する](https://firebase.google.com/docs/auth/ios/apple)

## デバッグで困ったこととその解決方法

### 1. Simulatorで認証が終わらない?!
iOS14のSimulatorでSign in with Appleを実行しようとしたら、
パスワードを入力するところまではできるのですが、
パスワードを入力して確定しても認証が終わらず、ずっとインジケーターが回るだけの状態になってしまいました。

![ios14_認証終わらない.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103695/b

元記事を表示

初心者がiOSでBLEのプログラムを作るためのメモ

ちょっと必要があり、全くの初心者がBLEのプログラムを書けるようにするためのメモを作りました。
最終的に作りたいものは、scanしてその辺にあるデバイスの数と電波強度を測るものです。
計測後の処理はPC側でやることにします。
最小限の作業でとりあえず動くまでを目標にします。見た目とかは後回し。

#準備

Xcodeをインストールする。
何か初心者向けの参考書とか見て、プログラムの作り方とか、iPhoneでの動かし方を確認しておく。

## Appleのサンプルコードを動かしてみる
1から書くのではなく、Appleのサンプルコードを改造するのが楽。以下からダウンロードして適当な場所に解凍する。

Transferring Data Between Bluetooth Low Energy Devices
https://developer.apple.com/documentation/corebluetooth/transferring_data_between_bluetooth_low_energy_devices

ちなみにサンプルはSwiftで書いてあるので、UIをSwift

元記事を表示

チャット系の既読APIをまとめて叩きたい

こちらの記事では外部フレームワーク(Rxswiftなど)を使用しません。
不備やもっとこうすればいいなどのご意見があれば、ぜひコメントお願いします。
# 参考
フロントエンドの記事ですが、やりたいことと実装は大体同じになります。
まずはこちらを読んでいただきたいです。
[ユーザーが画面内のコンテンツを見たかどうかを判定する一歩上の仕組み、サービスでの活用事例](https://qiita.com/endam/items/1d03d3c8cfc6f6aa8067)

# やりたいこと(上の記事にある内容と同じです)
1. チャット読んだら既読にしたい
1. サーバー負荷を上げたくない

#前提
・叩く既読API等が複数のチャットをまとめて叩けるものであること
(一つ一つidを指定して既読にするようなものだと、そもそも無理です。)
・UITableViewを使用していること

#実装
###・各セルがセルの下まで表示された判定
あるセルが表示され始める時にはその前のセルが表示され終わっているという判定。
willDisplayのdelegateメソッドを使い、最後の行以外の表示判定を行う。

元記事を表示

iOSデバイスのUDIDを確認する方法

#はじめに
アプリの実機デバッグなどをする際のデバイスの登録,その際に必要となるUDIDの調べ方です.
この記事以外にも方法の書いてある記事はあるのですが,iTunesを使用した古い方法だったり広告が多かったりしたのでこの記事にまとめます.

#UDIDを確認する方法
デバイスをPCに接続し,Finderで開いてください.その後デバイス名の下にある機種名などの情報が書いてある場所をクリックしてください.
![スクリーンショット 2021-08-07 17.34.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135508/47eb59d5-d964-997d-5731-506239114345.png)
そしたらこのようにUDIDが表示されるようになります.
![スクリーンショット 2021-08-07 17.37.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135508/b5bf95c7-7b7f-562a

元記事を表示

swiftのHelloworldにGoogle AdMovのテスト広告(バナー)をくっつけた

不労所得とかいうものが欲しかったので、手始めにiOSアプリに広告をつけてみようとしたらテスト広告だけでかなり手こずって一日費やしてしまったので覚書。
普通に働いた方が早い。

### 最終的に動いた手順
####Google AdMovに登録する
最近はGoogle AdMovって呼ぶらしい。前はなんか名前が違った気がする。
コロコロ仕様も変わりそうなのでこんなこと覚えてる暇があったら普通に働いた方が早い。

登録は[ここ](https://admob.google.com/intl/ja/home/)から。

####AdMovのダッシュボードから広告をつけたいアプリを登録する。
登録してないアプリでテスト以外の広告を流すと最悪垢バンされるらしい。
テスト広告だけなら関係なさそうなので割愛。

####Xcodeでプロジェクトを作成
特に難しいことはないが、AppDelegate.swiftと(Game)ViewController.swiftが最初からあるテンプレだと楽かも。

ここから先はAdMovの[スタートガイド](https://developers.google.

元記事を表示

【TIPS】Testing for State Restoration

iOS13以降からState RestorationはNSUserActivityを利用したものに変わりましたが、[サンプルコードのTest State Restoration on a Device](https://developer.apple.com/documentation/uikit/uiscenedelegate/restoring_your_app_s_state)にテスト方法が載っていたため紹介します。

文章は、サンプルコードの手引きの内容に具体的なステップを足したものです。

# テスト方法

アプリケーションを実行し、復帰したい画面でホームボタンを押す。ホーム画面に戻ったらXcodeの停止ボタン(もしくは停止のキーボードショートカット)を実行し、その後ホーム画面から開く。こうすることでState Restorationをテストすることができる。

※ Xcodeの実行ボタンから再実行させるとテストできないので注意

元記事を表示

開発期間におけるアセット管理戦略の選択

今回の主な話題:開発期間におけるアセット管理戦略の選択、iOS 14起動時にクラッシュする、IL2CPP暗号化:iOSでglobal-metadata.datの復号化問題、プログラムでコントロールできる3Dアクションの実現方法、Unity Editor内ScreenのWidthとHeight。


###Resource
Q:パッケージ化にAssetBundleが必要ですが、開発中にAssetBundleを使うことはあまり適していません。上記の2つのロードには、独自の問題があります。
Resource:Resourcesフォルダーの中に置く必要があり、パッケージ化は少し処理しにくいです。
AssetDatabase:非同期ロード方法はなく、開発中に非同期ロードが必要な状況をシミュレートする方法はありません。

現在、プロジェクトにResourcesを使用しています。パッケージャーが2つのプロジェクトに分割し、APKプロジェクトにResourcesを除外し、単独のバージョンを作成してアップデート命令を管理しますが、それでも非常に面倒です。ほとんどの会社はAssetDatabaseを

元記事を表示

同期処理と非同期処理について

#はじめに
今回は[たった2日でマスターできるiPhoneアプリ開発集中講座](https://www.amazon.co.jp/SwiftUI%E5%AF%BE%E5%BF%9C-%E3%81%9F%E3%81%A3%E3%81%9F2%E6%97%A5%E3%81%A7%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E3%81%A7%E3%81%8D%E3%82%8BiPhone%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E9%9B%86%E4%B8%AD%E8%AC%9B%E5%BA%A7-Xcode-iOS-14%E5%AF%BE%E5%BF%9C/dp/4802612788/ref=monarch_sidesheet)という書籍の中に、[お菓子の虜Web API](https://sysbird.jp/toriko/webapi/)を利用したお菓子検索アプリを作るセクションがあったので、練習として作成してみました。
その際に、同期処理と非同期処理というワードが出てきて少し混乱したので、初学者の自分がこれ

元記事を表示

iPhone,iPadのppi対応表

#ppiとは

ppi(ピーピーアイ)とは、pixels per inchの略で、ディスプレイやビットマップ画像における解像度を示す単位である。別名画素密度 (pixel density) とも呼ばれる。

[ppi – Wikipedia](https://ja.wikipedia.org/wiki/Ppi)

あまりないとは思いますがレイアウトを物理サイズで何センチにしたいなどと言うとき機種によってppiを使用して計算します。

# 表

|機種名 |ppi          |
|:——————|:——————|
|iPhone 1st |163
|iPhone 3G |163
|iPhone 3GS |163
|iPhone 4 |326
|iPhone 4S |326
|iPhone 5 |326
|iPhone 5C |326
|iPhone 5S |326

元記事を表示

resultBuilderを使ってswift製の内部DSLを作ろう

## resultBuilderとは?
resultBuilderとはSwift5.4で新たに追加されたアトリビュートの一つです。

この機能を一言で説明すると**「内部DSLの生成補助ツール」**だと思います。
(上記は個人的な理解です。正確な定義はproposalや公式のドキュメントを参照お願いします。)

https://github.com/apple/swift-evolution/blob/main/proposals/0289-result-builders.md

## 内部DSLとは?

DSLとはドメイン固有言語の略称であり、特定のドメイン領域に特化した言語のことを意味します。
DSLにも2種類あり、プログライミング言語の書き方を工夫して見かけ上の構文を自然言語に近づけたものを内部DSL、汎用プログラミング言語とは全く別の構文を持ったものを外部DSLと呼ぶそうです。

### 内部DSLの例
内部DSLの例としてRubyのRspecが挙げられます。
RspecはRubyという言語を拡張したフレームワークですが、テストの記述という機能に特化して自然言語のようにテスト

元記事を表示

【SwiftUI】Appからのトラッキング要求

###メモ
・Appからのトラッキング要求は最初の実行時のみポップアップが表示される。
・再インストールなどすれば再びポップアップが表示
・設定のアプリへの権限許可?画面で設定変更も可能

トラッキングの許可を要求したいタイミングで”requestPermisson()”を実行
上記の通り、最初だけポップアップが表示され、以後表示されなくなる。

###コード
“`ContentView.swift
struct ContentView: View {

var body: some View {
Button(action: {
requestPermission()

}){
Text(“広告許可”)
}

//トラキング許可メソッド
func requestPermission() {
if #available(iOS 14, *) {
ATTrackingManager.requestTracking

元記事を表示

iOS アプリ開発で必要な証明書を openssl を使って作成

## ことの発端

もう、十数年こんな面倒なことやらせて開発者に負担を掛けるのを止めて欲しいが、iOSアプリを開発してると、そうも言ってられない例の “`モノ“` を作ります。[^1]

[^1]: 著者がヘソ曲げてますが、要は iOS 開発で必要になる証明書の作成を一通り記事にしたものです。

## 手順

“`Xcode“` で作ったり “`キーチェーンアクセス“` で作ったりする方法がありますが、どちらも、将来バージョンアップして使用方法が変わると面倒なので、 “`openssl“` を使います。(手数的にもそう大差ない気がします)

### 1. 秘密鍵を作成する

下記のコマンドを実行します。

“`sh
openssl genrsa -out private.key 2048
“`

“`private.key“` が生成されます。

### 2. CSR を作成する

下記のコマンドを実行します。

“`sh
openssl req -new -key private.key -out adc.csr

元記事を表示

Notion APIとFileMakerが良い化学反応を起こしそうな予感

Notion APIが公開され、普段使っているFileMakerとの連携に可能性を感じています。
Notionはチームで書き込むこともできますが、APIを使うことでNotionにログインしなくても外部からアクセスでき、入力フォームも用意することができます。

https://developers.notion.com/

##まずは今まで作ったものを見てください!

###My日報

###My本棚

#FileMakerとは
FileMakerはローコードの開発プラットフォームです。

FileMakerを使うと、このような社内システムを1人でも効率的に作ることができます。
[デイサービスで自社システムを作って楽をしています](https://qiita.com/gokkozemisei/items/79dd2e9a34fa06c67b

元記事を表示

iOS11~12台のSafariでは、landscape時かつアドレスバー展開時に下部に50pxのスクロール可能領域が発生する

##タイトル通り
about:blankのページを開き、html・body要素のheightに関わる数値を0pxに指定、`overflow: hidden;`とした状態であれど、タイトルのような現象が発生する。
ちなみに本記事はただの備忘録です。

##どうしたか

プロダクトの仕様上、

– `document.body.scrollHeight === innerHeight`でありたい
– `scroll`や`touchmove`の差し止めをすることはできなかった

という条件があったため、妥協の下

“`js:sample
const scrollPrevent = () => {
if (window.pageYOffset > 0) window.scrollTo(0, 0);
}
window.addEventListener(“touchend”, scrollPrevent);
“`
とした。

元記事を表示

【SwiftUI】No image named ” found in asset catalog for 〜〜 のエラー内容とその対応

No image named ” found in asset catalog for 〜〜というエラーをググると英語か古い記事しかヒットしなかったので、備忘録としてエラー内容と対応を記しておきます。

## 結論
アセット(画像)がない。ただそれだけ!英語の原文のままです。

もう少し書きます。
SwiftUIの場合、以下のようなコードで画像を描写することを宣言しますが、Assets.xcassetsに宣言されたアセットがないためタイトルにあるエラーが出るよって話でした。

“`swift
Image(“アセット名”)
“`

## 対応
Assets.xcassetsにアセット(画像とか)を登録してあげればよい。
タイポ起こりがちだから注意。

## 【余談】自分の場合は変数を使ってエラーになっていた
自分の場合はここに変数を代入していてエラーになっていた。
こんなかんじ↓

“`swift
@State var hoge = “”
Image(hoge)
“`

なので、以下のような対応で回避した。

“`swift
@State var hoge = “hog

元記事を表示

ファイル取得「UnityNativeFilePicker」でファイル選択時のイベントの取得について

Unityで開発を行っております。

iOSでファイル取得のために「yasirkula/UnityNativeFilePicker」プラグインを使用しています。
https://github.com/yasirkula/UnityNativeFilePicker

こちら非同期で動いておりますが、動画ファイル等サイズの大きいファイルを選択した際に、読み込み処理が行われているのかどうかがわからないので、
ファイル選択時のイベントの取得方法をご存じでしたら教えていただけないでしょうか。

USBより4BG近くの動画ファイルを選択した際など、転送時間が掛かるものに関しては読み込み中の表示を行いたいと考えております。

Unityは
Unity2020.3.1f1

を使用しております。

よろしくお願いします。

元記事を表示

iOSの設定アプリで日付と時刻の時間帯を変更すると、日付表示がおかしくなる問題の対応

# 概要
日付を表示するような画面は、iOS端末の時間帯設定によって日付がずれて表示される場合があるので、その対処法を説明します。

# まとめ
– Dateを日付として表示する際は、特定のタイムゾーンで表示したい場合は目的のタイムゾーンを設定しましょう。
– ISO8601タイムゾーンなし文字列からDateに変換する際はタイムゾーンが明示的に設定されるようにしましょう。

# 例
クーポンの有効期限を表示するアプリがあるとします。
この有効期限はWeb APIなどからISO8601の日付文字列を取得して、その内容を表示するものとします。
このクーポンは、日本時間の2021年7月31日23時59分59秒までが有効期限だとします。

## 通常表示
Web APIからは、`2021-07-31T23:59:59+09:00` という文字列が返ってきましたので、これをISO8601DateFormatterでDateに変換し、DateFormatterで文字列に変換します。
当初の思惑通り、有効期限は7月31日と表示されます。

7月31日

元記事を表示

【モバイル対応】URLでアプリを開く

# 背景
スマホのブラウザで閲覧するWebアプリケーションに配置されたボタンから
インスタグラムの**アプリ**に遷移する要件があった。
しかし、ただの https://www.instagram.com/ をhrefに設定しても、アプリには遷移されない場合があった。
そこで、どうしたらアプリが開くURLになるか調べた。

# URLでアプリを開く、とは
> 「入力されたURLを画面遷移の情報に変換し、その結果に従って画面遷移する」という処理が組み込まれているアプリに対して、URLを入力すること

引用:[「URLでアプリを開く」を丁寧に深堀りしていく](https://note.com/toridori_inc/n/nb7237a217a51)

それらは**ディープリンク**とも呼ばれている。
そして、そのディープリンクにはいくつか種類がある。

# Custom URL Scheme
今回の要件で必要なインスタグラム アプリへの遷移は
**Custom URL Scheme**が対応している。

これは、このディープリンクを踏むと、該当するアプリが端末にインストール

– されて

元記事を表示

OTHERカテゴリの最新記事