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

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

【SwiftUI】LazyVGrid内の画像を正方形にする【ワークアラウンド】

## 1. はじめに
[@tsuzuki817](https://twitter.com/tsuzuki817)です?
SwiftUIでLazyVGrid内の画像を正方形として表示するまでに時間がかかってしまったのでシェアしておきます。

| 項番 | ページ内リンク |
|:—-:|:————-|
| 1 | [1. はじめに](#1-はじめに) |
| 2 | [2. 個々の大きさがバラバラになる](#2-個々の大きさがバラバラになる) |
| 3 | [3. アスペクト比がおかしくなる](#3-アスペクト比がおかしくなる) |
| 4 | [4. うまくいった方法](#4-うまくいった方法) |
| 5 | [5. 参考](#5-参考) |

## 2. 個々の大きさがバラバラになる
以下の方法で実装すると、大きさがバラバラになり不採用

“`swift
LazyVGrid(
columns: Array(repeating: .init(.flexible()), count: 3),
alignment: .cen

元記事を表示

【Swift】Storyboardを使わずにコードのみで実装する準備

# はじめに
たぶんUIKitを使っている人からしたら当たり前の事なのかもしれないですが、
私はUIKit初心者で毎回忘れるので自分用に書き残しておきます。

# Storyboardを削除
「Main」を右クリックして「Delete」を選択
![スクリーンショット 2022-05-17 0.44.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/104fddd2-0e8c-71b9-36a3-1879aeb8e814.png)

Move to Trashを選択
![スクリーンショット 2022-05-17 0.46.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/1e98c549-eb4c-fb73-41c2-910082437a58.png)
|Move to Trash|Remove Reference|
|-|-|
|完全に削除
(ファイルからも消える)|見た目だけ削

元記事を表示

【SwiftUI】バナー広告の表示方法

第1部: [リワード広告](https://qiita.com/SNQ-2001/items/253173abefc6f90f86ea)
第2部: [インタースティシャル広告](https://qiita.com/SNQ-2001/items/5590a55324c39582a9ef)
第3部: [ネイティブ広告](https://qiita.com/SNQ-2001/items/7151fdcb8e9f8c2c42c2)
第4部: [バナー広告](https://qiita.com/SNQ-2001/items/9bf389475cb5995469a0) ← イマココ

# はじめに
AdMob広告シリーズ第3部です
今回は[バナー広告](https://developers.google.com/admob/ios/banner?hl=ja)です。

# 実装準備
実装の前に[スタートガイド](https://developers.google.com/admob/ios/quick-start?hl=ja)に記載してある事を行います

①: Mobile Ads SDK のインポ

元記事を表示

SwiftUI を利用したアプリを1日で開発 〜 審査 〜 App Store で公開した話

## この記事の内容(要約)
![FS2xf81aIAI6SnF.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199441/9eaf363c-8a03-5065-ea28-cca4b790a4c6.jpeg)

– SwiftUI を利用して 1日でアプリを開発し、審査に提出し、App Store で公開した
– 開発〜審査への提出〜公開を一気通貫にやったことで、自信につながった
– ポートフォリオとしてアプリを開発する場合は、凝ったアプリよりも機能が少なくても他の人も役立つアプリを短期間で開発した方が良いと感じた

## この記事を書いた人の特徴
– 2011年 大阪教育大学卒(文系・全くプログラミングの知識なし)
– 2018年 エンジニアとして働き始める
– 2020年 〜 20221年 iOS アプリ開発業務に従事

## アプリの概要
### 郵便番号から住所を検索するアプリ
https://apps.apple.com/jp/app/searchzipcode/id1624355640

元記事を表示

【iOS】Alertでradiobuttonを使った選択式の表示を出す

# はじめに

フィルター等をかけたい時にradiobuttonを使った選択式のViewを作る必要があり作成しました。

独自のViewを作ればどうとでも作れますが、
なるべくiOSのフレームワーク内で作成した方が統一感が出ると思いAlert内で作成しました。

基本的にはAlert内に独自で作ったViewをaddSubviewするだけです。

# 開発環境

+ iOS 15.2
+ Xcode 13.3.1
+ Swift 5.6

# 完成画面

以下のようにAlert内で選択出来るようなradiobuttonを配置します。
どれかひとつしか選択出来ないようにします。

![radio_alert2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671830/93a98bb8-220d-1346-679a-55afc8ed8754.gif)

# 構成

+ Alert内のViewに独自に作ったViewをAddsubviewします。
+ 独自に作るViewはUITableViewです。
+ ra

元記事を表示

【AdMob】スタートガイドを公式より詳細に書く

# はじめに
https://developers.google.com/admob/ios/quick-start?hl=ja

ドキュメントを読むのが慣れてない人用です。
画像付きでわかりやすく説明したつもりです。
分からないことがあれば[こちら](https://twitter.com/_SNQ)にDMください。

# Mobile Ads SDK をインポートする
公式から推奨されているCocoaPodsのみ紹介します。

最初にディレクトリを移動します。
“`
cd ファイルパス
“`
![スクリーンショット 2022-05-15 19.25.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/472e234d-d735-2fd5-b054-02e389d1bb57.png)
![スクリーンショット 2022-05-15 19.25.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1

元記事を表示

SwiftUIのGeometryReaderでレイアウトが崩れるときは

– `.background` 内で `GeometryReader` を使うと崩れなそう
– 値の受け渡しには`PreferenceKey` 使うとよさそう

サンプルコード
“`swift
import SwiftUI

struct ContentView: View {
@State var size: CGSize = .zero

var body: some View {
VStack {
Text(size.debugDescription)
ChildView()
}
.onPreferenceChange(SizePreferenceKey.self) {
size = $0
}
}
}

struct ChildView: View {
var body: some View {
Text(“Message”)
.background(GeometryRe

元記事を表示

【iOS】Navigation Barの背景色を変える

# はじめに
いっつも忘れてググることになるので忘れないようにメモです。

# navigationBarのbackgroundColorではダメ

毎回以下のように書いてしまいます。
“`swift
navigationController?.navigationBar.backgroundColor = .systemBlue
“`

ですがそれだけだと本当にNavigationBarの部分しか色が変わりません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671830/07b8dfa2-52cc-1fed-1ddf-b259363c4699.png)

# UINavigationBarAppearanceを使いましょう。

iOS13から追加されたUINavigationBarAppearanceでNavigationの装飾を行います。

“`swift
//UINavigationBarAppearanceをインスタンス化
let appearance = UINav

元記事を表示

【Xcode】リリース済みアプリで発生したクラッシュの原因を探る

# はじめに
リリース済みのアプリでユーザーからクラッシュ報告が来ても、こちらで再現できないと原因が分からないので修正のしようがありません。
クラッシュログを送ってもらってシンボル化して読めるようにするなどの記事がありましたが難しくてよくわかりませんでした。
そんな中いい方法を見つけたので書き残しておきます。

# 方法
メニューバーの「Window」を選択
![スクリーンショット 2022-05-14 13.48.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/96d65c3c-2ad6-ceec-e941-e43ca663fe8f.png)
「Organizer」を選択
![スクリーンショット 2022-05-14 13.50.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/855820ff-0cd2-1068-6bd2-6460e2b52500.png)
①アプリを選択
②「

元記事を表示

fastlane経由でiOSアプリをFirebaseAppDistributionからテスト配信する時は、Rubyについて知っておくほうが良かった話

# はじめに
こんにちは、iOSエンジニアの [dayossi](https://twitter.com/dayossi) です。

家族が幸せになれるサービスを提供したいと思って、
[HaloHalo](https://hallo-hallo.sakura.ne.jp/home/)という家族日記アプリをリリースしています。

今回は、Firebaseが提供しているアプリのテスト配布ツール`Firebase App Distribution`を
fastlaneから呼び出して、テスト配布を自動化する中で詰まった点を共有いたします。

fastlaneがRubyで構成されているにもかかわらず
私はRubyでの開発は全くやったことがないので、
ほぼ手探り状態でfastlaneを試しました。。

先人の方々の叡智を参考に
なんとかfastlaneを実行してipaファイルをビルドできる状態まで辿り着きましたが

肝心のFirebase App Distributionへデプロイできず、
かなり詰まりました。

同じような境遇で悩まれている方の参考になりましたら幸いです。

## 前提
以下の

元記事を表示

【Swift】Windowの仕様変更が激しい

# 警告文を消したい
“`
‘keyWindow’ was deprecated in iOS 13.0: Should not be used for applications that support multiple scenes as it returns a key window across all connected scenes
“`
“`
‘windows’ was deprecated in iOS 15.0: Use UIWindowScene.windows on a relevant window scene instead
“`
# iOS13以前
![スクリーンショット 2022-05-13 14.37.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/082136e9-ae2a-2578-8aaa-7b3c213a7549.png)
“`Swift
UIApplication.shared.keyWindow?.rootViewControll

元記事を表示

iPadのSwift Playgroundsだけでswift初心者の高校教師がアプリの開発に挑戦してみる <その2>

https://qiita.com/kerikerijy/items/38ddbc93ae62c84351b8

# Swift Playgroundsとの出会い

実は、私がSwift Playgroundsだけでアプリの開発に挑戦してみようと思ったのは、Appleが提供しているApple Teacherというプログラムを受講したことがきっかけです。

私にとって、とても有用な学びとなったので、簡単に紹介しておきます。

## Apple Teacherについて

https://appleteacher.apple.com/

Apple Teacherは、指導と学習にiPadなどのApple製品を組み込んでいる教員を支援するラーニングプログラムです。もちろん、無料です!Appleのすごいところは、このような質の高いプログラムが無料で提供されているというところだと思います。

https://www.apple.com/jp/education/giga/

私は、Appleが日本のGIGAスクール構想にとても前向きに参入しているという印象を持っています。もちろん、企業なのでAp

元記事を表示

【Flutter】Androidの感覚で実装してiOSで起こした不具合

# 不具合発覚
iOSの端末で名前が入力できないとの問い合わせから判明しました。

# 調査
以前、showCupertinoModalPopup を使った際に、Focus と Cursor の挙動がおかしくなったことがあったので似たような問題かな?と思ったが違いました。

連絡をくれた方とやり取りすると、日本語が入力できないとのことだったのでキーボードの設定周りを中心に調査するようにしました。

# 原因

以下の条件で再現することがわかりました。

– キーボードを絵文字と Gboard のような他社製キーボードのみにしている
– TextField の `inputType` に `TextInputType.name` を設定している

`TextInputType.name` を指定すると、iOS では `keyboardType` に `namePhonePad` が設定されるのですが、他社製キーボードのみにしていると、該当のキーボードがないため日本語を入力するキーボードが選択できないため入力できなくなってしまっていました。

# 対応

`inputType` を `Te

元記事を表示

iPadのSwift Playgroundsだけでswift初心者の高校教師がアプリの開発に挑戦してみる <その1>

## はじめに

### 自己紹介

私は高校で教員をしています。

2022年度は高校現場を離れて、大学でICT教育の研究をしています。研究課題の一つとして「プログラミング教育」を設定しているので、まずは、プロのエンジニアではない自分が自身の力だけでiPadのみを用いてアプリの開発というものがどこまでできるのか試してみることにしました。

ちなみに、私はプログラミングが全くの未経験というわけではありません。教員として働く以前はソフト会社で組み込みエンジニアをしていた経験があるので、C言語だけはすこし分かります。とは言っても、もう10年以上はプログラムのコーディングなどはしていませんし、GUIを伴うアプリケーションの開発はしたことがありませんので、その分野については正真正銘の初心者です。

### 経緯

私が勤務している高校では、今年度から入学してくる1年生が1人1台iPadを持っています。iPadだけでアプリの開発、配信までできるのであれば、その実践を授業に取り入れることができると考え、今回の取り組みを決めました。

そして、同じようなことを考えている方の参考になればと思い、備忘録

元記事を表示

firestoreを使ったswiftのCodableを作る時に使う@DocumentIdに隠された便利機能を見つけてしまった

こんにちは。[virapture株式会社](https://virapture.com)でCEOしながら[ラグナロク株式会社](https://ragna-rock.com)でもCKOとして働いている[もぐめっと](https://mogmet.com)です。

本日はswiftとFirestoreで使う@DocumentIdについて皆が知らないであろう機能を発見したので共有します。

## @DocumentIDとは?

そもそも@DocumentIDってなんやねんというお話をすると、Decodeするときに自動的にidを付加するという便利機能になります。

“`swift
import FirebaseFirestoreSwift

struct UserModel: Codable {
@DocumentID var documentID: String?
let username: String
}

“`

“`swift
Firestore.firestore().document(“users/mogmet”).getDocument { snapsh

元記事を表示

Deno/TypeScript入門〜スタブ・サーバーを作ってみる編〜

# まえがき

※この記事は、以下の後続記事です。
Deno/TypeScriptの概要については以下の記事に記載しています。

https://qiita.com/y-some/items/ca6404b7024d54b1ff75

最近私はツールを開発する環境として「[Deno](https://deno.land/)」が気に入っています。
シンプルで、軽くて、ランタイムAPIや標準ライブラリが充実していて、開発体験が良いと感じています。
私のところではDenoを本番で採用しようとすると諸々ハードルがありますが、ツールの開発であれば選択肢として大いにアリです。

iOS/Androidアプリケーションや、シングルページ・Webアプリケーションを開発する際、よく使うツールの一例として「スタブ・サーバー」があります。

特に、バックエンド側(Web API)とフロントエンド側が別チームだったりする場合に、
**「バックエンド側の実装が完了するまでの間、フロントエンド側の実装が停滞してしまう」**
といった状況が発生することがあります。

そのような場合、**ダミーのレスポンス

元記事を表示

【SwiftUI】ネイティブ広告の表示方法

第1部: [リワード広告](https://qiita.com/SNQ-2001/items/253173abefc6f90f86ea)
第2部: [インタースティシャル広告](https://qiita.com/SNQ-2001/items/5590a55324c39582a9ef)
第3部: [ネイティブ広告](https://qiita.com/SNQ-2001/items/7151fdcb8e9f8c2c42c2) ← イマココ
第4部: [バナー広告](https://qiita.com/SNQ-2001/items/9bf389475cb5995469a0)

# はじめに
AdMob広告シリーズ第3部です
今回は[ネイティブ広告](https://developers.google.com/admob/ios/native/start?hl=ja)です。
見た目的にはバナー広告に近いように思います。
バナー広告と違う点は広告のUIが変更可能という事です。
これによりアプリに馴染ませることができ、UXの向上につながります。
![image.png](https://qiit

元記事を表示

[Swift]簡単な入力バリデーションを実装してみる

## はじめに

アプリの初回登録時などにバリデーションを走らせたいことが多いと思うので
簡単なサンプルを載せておきます。
※個人的な使い回しも兼ねて

## コード

“`ruby: Validation.swift

import Foundation

enum ValidationResult {
case valid
case nameIsEmpty(section: String)
case ageIsEmpty(section: String)
case birthdayIsEmpty(section: String)

var isValid: Bool {
switch self {
case .valid:
return true
case .nameIsEmpty:
return false
case .ageIsEmpty:
return false
case

元記事を表示

GoogleI/O 2022で発表されたFirebaseの新機能をまとめてみた。

こんにちは。[virapture株式会社](https://virapture.com)でCEOしながら[ラグナロク株式会社](https://ragna-rock.com)でもCKOとして働いている[もぐめっと](https://mogmet.com)です。
![mogmet.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/da66fe2b-213f-2236-da87-e48eb1d70a34.jpeg)
最近[ラグナロクのCKOに就任しました](https://prtimes.jp/main/html/rd/p/000000013.000038912.html)。頑張ります!

本日は2022年のGoogleI/Oで発表されたfirebaseの新機能について紹介致します。

結論から言うと、Crashlyticsがやばい進化してます!!!

## Firebase Extension

元記事を表示

【SwiftUI】シェアを実装する際に気を付ける事

# はじめに
SwiftUIでシェア機能を実装する際は`UIActivityViewController`を使用します。
ここにかなり深い落とし穴があるので落ちないように気をつけましょう。
私は落っこちて原因に気づかず長い間、クラッシュを生み出していました笑
みなさんはそうならない様に気をつけましょう。

# 結論
iPadで普通に`UIActivityViewController`を使うとクラッシュします

# パターン1(おすすめ)
“`Swift
import SwiftUI

struct ContentView: View {
@State var ShowSharePopover: Bool = false
var body: some View {
Button(“シェア”) {
Share()
}
.popover(isPresented: $ShowSharePopover) {
ShareView()
}
}
// iPh

元記事を表示

OTHERカテゴリの最新記事