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

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

[iOS14]ScrollViewReaderを使って簡単なチャットの実装

## 今までのチャットの実装の難しさとiOS14からの手法
UIKitでチャットアプリを実装する際、UITableViewを使うことが多いかと思います。
LINEのようなチャットの場合は特に`高さの計算`、`一番下へスクロール`の実装が難しいですね。
今までの経験により、実装も複雑になりバグも多かったりしました。

`iOS14`になってからは、SwiftUIの`ScrollViewReader`が出てきて、だいぶチャットの実装が楽になりました。

## 環境

– Xcode12.2
– iOS14.2(SwiftUI2)

## ScrollViewReaderとは

プログラム的にスクロールできるようになります。
[ScrollViewReader – Apple公式ドキュメント](https://developer.apple.com/documentation/swiftui/scrollviewreader)

“`swift

ScrollView {
ScrollViewReader { (proxy: ScrollViewProxy) in

元記事を表示

【SwiftUI】Likeボタンとリスト内セルにボタンを実装する場合の注意点

# はじめに
SwiftUIでFirebaseからデータを読み取り、これまで作成したカード内容を更新することを目的とする。

今回はカード内のLikeボタンの実装を行います。

結論を最初に言うと、ListView内でButtonを実装する場合はそれぞれのImageに“`.onTapGesture“`を設定する必要があります。
その点がわかっていなかったため、実装に時間がかかってしまいました。

前回までの記事は以下を参考ください。

**参考記事**
[【SwiftUI】Firebaseからデータを読み取り、ListViewのRowを更新する](https://qiita.com/m37335/items/76673ebe302192711595)

# 開発環境
OSX 10.15.7 (Catalina)
Xcode 12.2.0
CocoaPods 1.10.0

# Like機能の実装
ボタンの設定に時間がかかってしまったため、FirebaseのLike数の更新機能の実装までは至りませんでした。
今回はタップした際にハートの色を変更する機能のみ実装します。
設定のみした

元記事を表示

Flutterチュートリアルを咀嚼する part2 -routeとnavigator-

part1ではFlutterの概要を掴んだ
part2ではpart1で作ったstartup_namerアプリにスマホアプリによくある機能を搭載する
・アイコンの利用
・いいね機能
・別ページへの遷移

#対象のチュートリアル
https://codelabs.developers.google.com/codelabs/first-flutter-app-pt2/#0

#コピペしてできあがったもの
気に入った名前にいいねができるようになった
![スクリーンショット 2020-11-22 0.01.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283826/ca40b2c9-30b4-5c3c-2290-1537d3bd2166.png)

右上の(名前なんて言うのこれ)を押すと右にスライドしてもう一つのページが表示されるようになった
(いいねしたものだけが表示される)
![スクリーンショット 2020-11-22 0.02.48.png](https://qiita-image-store.s3

元記事を表示

[SwiftUI] Viewを強制再読み込みする賢くない方法

どうしてもViewを再読み込みしたいが、どうやってもうまくいかない、という場合、賢くないですがこの方法でいけます。
**SwiftUIのお気持ちに沿って作っていればそもそも強制再読み込みは必要ないはずなので、対処法として正しいのは設計の見直しです。**

# 対処

“`Swift
struct HogeView: View {
var body: some View {
Hoge()
}
}
“`

を強制再読み込みしたい場合、

“`Swift
struct HogeView: View {
@State private var flag = true

func refresh(){
flag.toggle()
}

var mainView: some View {
Hoge()
}

var body: some View {
Group{
if flag{
mainView

元記事を表示

SwiftUIだけど画面遷移はUIKitでやる

画面遷移処理を各画面から切り離したり、カスタムURLスキームなどを使って任意の画面に遷移できるようにする処理をSwiftUIでもやりたい。でもSwiftUIだけで実現する方法がわからない。。。
難しそうなところは今後のSwiftUIの進化に期待するということで、画面遷移は無理せずUIKitベースでやってしまえば良さそうだなと思い始めました。

### 環境

* Xcode 12.0

### 実装

各画面のレイアウトはSwiftUIでさくっと作ってしまって画面遷移に関連する部分はUIKitベースで処理するために、遷移先はUIHostingControllerを使う。ViewControllerを見つける処理は従来通り。

“`swift
var window: UIWindow? {
guard let window = (UIApplication.shared.connectedScenes.first?.delegate as? UIWindowSceneDelegate)?.window else { return nil }
return window

元記事を表示

AVPlayerViewControllerのコントロールバーを監視する

# 概要
画面をタップすると表示・非表示が切り替わるコントロールバーを監視します。
あまりニーズがなさそうな情報ですが、つい最近コントロールバーの表示に合わせて自作UIを表示するという要件が実際にありましたのでメモを兼ねて投稿します。

# 開発環境
Xcode 12.1
Swift 5

# AVPlayerViewControllerのレイヤー構成
AVPlayerViewControllerの動画再生時の画面レイヤーはこのようになっています。

目的のバーはAVV

元記事を表示

SwiftUIの多言語化

# 概要
`LocalizedStringKey`を使ってSwiftUIの多言語化を行います。

# 3行まとめ
– `Text`に文字列定数を渡すと、文字列定数をキーにしてローカライズが行われます。XLIFFのエクスポートもサポートされます。
– `LocalizedStringKey`を使うと、引数をキーにして各種コンポーネントのローカライズ対応ができます。が、XLIFFのエクスポートはサポートされません。
– `NSLocalizedString` をコメントの形としてつけておくとXLIFFのエクスポートに対応することが可能です。

# Textの多言語化
Textのパラメータに、ダブルクォーテーションで囲われた文字列定数を設定します。
`Export for localization`を行うと、Textの文字列を定数にしたものが全てXLIFFに出力されます。これをもって翻訳に使ったり、SwiftUIのプレビューから各言語の表示を確認できたりできます。

##コード

### SwiftUI
“`swift
import SwiftUI

struct ContentV

元記事を表示

XcodeでiMessage Extensionを削除する方法

XcodeでiMessage Extensionを追加するときは、「File」 > 「New」 > 「Target…」から簡単に行えますが、、
削除の手順が分からなかったため、Appleのテクニカルサポート(DTS)へ問い合わせを行なった記録です。

# 削除手順

以下の3手順にしたがって削除していきます。

## 1. Xcodeでターゲットを削除する

ターゲットを削除するには、プロジェクトツリーからプロジェクトを選択します。

![D198AE5F-A429-4455-ACDF-0D06E79A5534.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141810/0bcf0482-6238-936b-9475-d9b1b6cbd283.png)
※ すみません、背面にいたQiitaの緑色が写り込んでしまいました、、 ?

そのあと、ターゲット(iMessage Extension)を選択し、右クリックで削除するのですが、、
「General」の左側にいるアイコンを押すと、こちらのサイドバーが

元記事を表示

[iOS]FDL(Firebase Dynamic Links)とは

### Firebase Dynamic Linksとは

ユーザーがあるURLを踏んだ場合、

– iOSデバイスを使っている時、
– あるアプリがインストールされている時は、そのアプリでコンテンツを開く
– インストールされていない時は、そのアプリのストアのページを開く
– Androidデバイスを使っている時、
– あるアプリがインストールされている時は、そのアプリでコンテンツを開く
– インストールされていない時は、そのアプリのストアのページを開く
– そのほかのデバイスを使っている時は、Webブラウザでコンテンツを開く

という風に、デバイスやアプリのインストール状況に応じて違う振る舞いをしたい時がある。

ただ、しかし、それぞれの振る舞いごとに違うURLを用意していては、何個もURLが必要になりユーザーがどれをタップしていいかわからないし、そもそもURLを何個も書ききれないだろう(例えば、ツイッターの一つの投稿にURLを5つも載せるのは無理である)。

一つのURLだけで、状況に応じて違う振る舞いができるのが、Firebase Dynamic Lin

元記事を表示

Auto LayoutのStack Viewの便利さ

#はじめに
Auto Layoutを勉強していてStack Viewの便利さを知ったので記事を書こうと思います。
また、Auto Layoutはエンジニア必須スキルで、ちゃんと理解できれば他のエンジニアと差をつけられる要素になるみたいです。
しっかり使いこなせるようになりたいですね。

#Stack Viewとは何か
公式ドキュメントにはこのように書かれています。
>Stack Viewは、複雑な制約を導入することなく、自動レイアウトの機能を活用する簡単な方法を提供します。

要するに、本来なら複雑な制約を書いて実装するけど、Stack Viewを使えば簡単に実装できるようになります!って感じです。

#使ってみた
今回はボタンを並べて、後からボタンを追加する作業にStack Viewを使っていきます。
###Stack ViewをViewに追加
HorizontalとVerticalがあります。
Horizontalは水平なので横並び、Verticalは垂直なので縦並びで設定したい時に使います。
今回はHorizontalを使います。
![スクリーンショット 2020-11-23 1

元記事を表示

WindowsとMacのショートカットキー対応表

#執筆の動機
今後、学んだことをQiitaでアウトプットしていきたい。
しかし記事を作成した経験が無く、まずは投稿してみたかった。
そんな中、人生で初めてMacを購入しました。
Ctrlキーが無かったり、入力方式(かな、半角英数)を切り替える方法が分からなかったりと操作感が異なり興奮の連続です。新しいことを学ぶのって楽しいですよね。
Qiita初投稿には良い題材ではないかと考え、私がWindowsでよく使用するショートカットキーをMacではどのように使用するのか調べてまとめることにしました。

#ショートカットキー対応表
|操作|Windows |Mac |
|:—–|:———-|:———-|
|テキストをコピー |Ctrl + C |command + C |
|コピーしたテキストを貼り付け|Ctrl + V|command + V|
|テキストを切り取り|Ctrl + X|command + X|
|操作を戻す|Ctrl + Z|command + Z|
|操作を戻すを取り消し|Ctrl + Y|command +

元記事を表示

U-2Netをつかう。

![u2netqual.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/44a7eb2d-8202-89b5-6ae4-85bdef08b244.png)

画像内の顕著なオブジェクトをセグメントしてくれるモデル。

#手順

#####1、[U2-NetのGitHubリポジトリ](https://github.com/NathanUA/U-2-Net)をクローン

“`shell

git clone https://github.com/NathanUA/U-2-Net.git
cd U-2-Net/
“`

#####2、事前学習済みモデルを[リポジトリのリンク](https://drive.google.com/file/d/1rbSTGKAE-MTxBYHd-51l2hMOQPT_7EPy/view)からダウンロードし、指定のディレクトリに配置

“`shell

mkdir saved_models/u2netp/
“`

#####3、とりあえずPythonで試してみる

元記事を表示

PytorchモデルをONNX経由でCoreMLモデルに変換する(あえてね)

CoreMLTools4.0からPytorchモデルを直接(Traced_Model経由で)変換できるようになりました。
旧式のONNX経由で変換するやりかたは非推奨になったのだけど、とはいえ「直接変換はできない」かつ「旧式ONNX方式だと変換できた」ケースもあったので、書いておくです?

1.PyTorchモデルをONNXにエクスポート

“`python

x = torch.randn(1, 3, 224, 224, requires_grad=True).cuda() #ダミーインプット(batch_size,color_channel,width,height) モデルがCuda使ってるなら、.cuda()

torch.onnx.export(torch_model, # モデル
x, # ダミーインプット
“torch_model.onnx”, # 保存パス
export_params=True, # モデルの重みも保存するか

元記事を表示

【SwiftUI】Firebaseからデータを読み取り、ListViewのRowを更新する

# はじめに
SwiftUIでFirebaseからデータを読み取り、これまで作成したカード内容を更新することを目的とする。

前回までの記事は以下を参考ください。

**参考記事**
[【SwiftUi】TabViewとListの実装とViewのフォルダ管理](https://qiita.com/m37335/items/00e08d9c34b17a3a38b7)

# 開発環境
OSX 10.15.7 (Catalina)
Xcode 12.2.0
CocoaPods 1.10.0

# Firestoreへのドキュメントの追加
FirebaseのFirestoreデータベースは以下のように設定しました。
今回は書き込みの機能は設定していないため、直接入力しています。
今後はユーザーが投稿できるよう機能を実装します。
![Haiku_-_Cloud_Firestore_-_Firebase_コンソール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/867981/b99df523-fe93-1b82-

元記事を表示

UE4でIOS/Android用のアイコン画像を爆速で入れる

#UE4でIOS/Android用アイコンを爆速で入れよう

>https://qiita.com/Chi__no_/items/f7d9f8e943d0da0b5f80
この記事は↑の画像作成スクリプトを実行している事が前提です。

UE4は一つ一つの画像を選択する度にプロジェクトルートから辿らないと行けないから面倒くさい。。。
そんな問題を一気に解決しちゃおうって話!

一番上の記事の内容を実行するとこんな画像ファイル達が出来ると思う。
![スクリーンショット 2020-11-22 220132.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/500172/326b7275-6811-4cf4-3ab9-692752875ff2.png)

#Engineのデフォルトに設定する。

そしたらEngineのPathに行く。

Androidでは色々ファイルが分かれているから各自でやって欲しい。
参考Directory→C:\Program Files\Unreal

モバイルアプリのアイコン画像用意するの面倒くさくない?自動化しちゃおう!

##PhotoShopでいちいち何十回も解像度を変える作業めんどくさ・・・

####AndroidとiPhone合わせるとこのくらいの画像が必要になる。

![b1d2c8bfdad903f18ac9aa668706984e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/500172/cf87672e-ac78-75c8-2094-ef74eb5b0d95.png)

しかもiPhoneの画像は20@2xみたいな語尾を付けているからややこしい。

だからPhotoshopのスクリプトで自動化してしまおう

###まず出力したいPSDのレイヤーは全てスマートオブジェクトにして下さい。←これ重要
これを忘れると出力された画像がボケるから気をつけて!
レイヤーを右クリック→スマートオブジェクトに変換
![Inked4ec9e66d5b55a3bcdc164078007e697a_LI.jpg](https://qiita-image-store.s3.ap-

Develop in Swift Data CollectionsでiOS開発を学ぶ (2): Lesson 1.3からLesson1.4

https://qiita.com/mk2/items/6091f8eb195fa3237c4e の続き

### Lesson 1.3: Model-View-Controller

iOS/Mac開発といえば、MVCだと個人的には思っています。(SwiftUIの登場で考え方も変わるのかもしれませんが…)

`View Controller`、`Model Controller`はなんとなく知っていたのですが、`Helper Controller`という考え方があるのは知りませんでした。ただ、この説明を見る限り、ユーティリティ的な感じがしますね。

>“Helper Controllers
Helper controllers are useful anytime you want to consolidate related data or functionality so that it can be accessed by other objects in your app. One common example of a helper controller is a Netw

[macOS/iOS] Autolayout覚書

# はじめに
本文書では, macOS/iOSのソフトウェアのautolayout処理に関して、気づいた点/注意すべき点についてまとめます。おそらく目新しい内容はなく、よしなし事を順不同で記載します。

## Autolayout処理
### サイズ変更
* Viewのサイズ変更は、[setFrameSize](https://developer.apple.com/documentation/appkit/nsview/1483530-setframesize)で行われる

### 優先順位

[NSLayoutConstraint.Priorityで定義される定数の値とその意味](https://developer.apple.com/documentation/appkit/nslayoutpriority?language=objc)です(macOS 10.15)。説明はマニュアルのgoogle翻訳です。

|名前 |即値 |説明 |
|:– |:– |:– |
|requ

構造体について【Swift】

# 構造体とは?
* 変数、定数、関数を1つのグループとしてまとめる仕組み。
* 構造体の中で作られた変数・定数を __プロパティ__ 、関数を __メソッド__ という。
* 構造体の中で作られた変数・定数を初期化することを __イニシャライズ__ という。
* 構造体を利用するにはインスタンス化が必要。
* データ型は全て構造体である。( `Int`、 `Float`、 `Double`、 `String`、 `Bool` )

# 実装例
“`Swift
struct Human {
// プロパティを定義
let name: String
let age: Int

// initを使用することでイニシャライザ定義
init(name: String, age: Int) {
self.name = name
self.age = age
}

func introduction() {
print(“私の名前は\(name)です。年齢は\(age)歳で

[iOS/Swift]Alamofire を利用したアプリ実装(郵便番号検索アプリを例に)

### 書くこと
Alamofire を利用した API 呼び出しを利用してアプリを実装する

### 書いた理由
Alamofire を利用した API 呼び出し方法を忘れた時に確認する

### 参考にした記事
[標準とAlamofireでAPIコール処理を書き比べてみる(Swift)](https://qiita.com/uhooi/items/c0e083f916dc516175bd)

上記記事に紹介されていたコードに、UIを実装した
(すごくわかりやすい記事です)

### 前提条件
1. テキストフィールド、ボタンおよび検索結果を表示するラベルは `Main.storyboard` で設定
2. 上記要素は、`ViewController.swift` に紐づけている
3. `CocoaPods` を利用して `Alamofire` はすでに導入済である

### アプリの機能
テキストフィールドに郵便番号を入力し[Seach]ボタンをタップすると、ラベル(水色)にその郵便番号に対応する住所を表示する。