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

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

縦と横で別のAutoLayoutをつけようとしたら警告が出まくった話

## 突然だけど
* 縦画面の時に中央上下にラインを引いたような配置
* 横画面の時に中央左右にラインを引いたような配置

な画面をAutoLayoutで作りたい(どうしてとか言わない)

|縦|横|
|-|-|
|![スクリーンショット 2021-09-03 23.25.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270319/83000347-8f1a-1d7b-ff32-26b79b311235.png)|![スクリーンショット 2021-09-03 23.29.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270319/1873be2e-8a6e-8220-397c-07968ccd4d88.png)|

## サイズクラスごとに制約をつけていく
### 縦向きの制約をつける
1. まずは制約をつけるViewを設置して
1. まずは縦方向の制約だけつけていく
1. Constantが適当なので整える

元記事を表示

iOSでリストのドラッグ&ドロップと長押しによるコンテキストメニューの表示は同時に実装しても競合しない

## ドラッグ&ドロップでの並べ替えと長押しによるコンテキストは共存できるのか :thinking:

iOSでは最近、リストUIでアイテムをドラッグ&ドロップで並べ替えるようなUIが流行っていますよね。
`UITableView` や `UICollectionView` では `dragInteractionEnabled` `dragDelegate` `dropDelegate` をそれぞれ実装することで、ドラッグ&ドロップ時のアクションを追加することができます。

一方でiOS 13からは長押しでコンテキストメニューを表示させることができるようになりました。
これは `UITableViewDelegate` の `tableView(_:contextMenuConfigurationForRowAt:point:)` メソッドを使うと実装することができます。
このdelegateメソッドを実装するだけで、アイテムの長押しでコンテキストメニューを表示させることができます。

この2つはAPIとしても完全に独立しており、同時に実装することが可能です。
ではその場合、機能の共

元記事を表示

【iOS】FirebaseのDynamic Linksからディープリンクを受け取る

# どういうことか

Dynamic Linksの設定方法は省く。
設定したURLをXcode側で対応してアプリで受け取りたい。

ここではDynamic Linksで `SampleAppDynamicLinks.page.link` というURL接頭辞を設定したという想定で書く。

## ドメインを許可する

### Entitlementの追記

1. まず**.xcodeproj**ファイルを選択、左側の**TARGET**から該当のアプリを選択
2. 上部タブの**Singing & Capabilities**を選択
3. 上部タブすぐ下の**+ Capability**を押す。**Associated Domains**を選択
4. Associated Domainsの**Domains**の+ボタンを押して `applinks:SampleAppDynamicLinks.page.link` を記入
5. Apple Developerのサイトにログインし、**Certificates, Identifiers & Profiles > Identifiers > 該

元記事を表示

【iOS】コントロールセンターのQRコードリーダーではまった件

現在のiOSで端末のコントロールセンターにQRコードリーダーが実装されていますが、
URLをQRコードにして、QRコードリーダーアプリからWEBページへ遷移させる際の挙動に差異があったのでメモ。

<<動作の差異>>
QRコードからWEBページを表示後、WEBページから別のアプリがキックされる際に、
・コントロールセンターのQRコードリーダー
 別アプリが起動した際にWEBページ(ブラウザ)が終了
・カメラアプリのQRコードリーダー
 別アプリを起動時、ブラウザはバックグラウンドに遷移
コントロールセンターのQRコードリーダーはWEBViewにてページを表示し、
バックグラウンドで待機してくれない。

<<実際にはまった事象>>
ブラウザ上から電話発信で2要素認証を行う「着信認証」サービスにて、
1.QRコード読取り
 ↓
2.WEBページ表示
 ↓
3.電話発信を行う
 ↓
4.終話後、WEBページ側は「着信認証」の結果に応じた振舞い(Myページへリダイレクト等)を行う
という流れで動作させたいのですが、3の時点でWEBページ(ブラウザ)が終了してしまい、
正常に認証がなされていても

元記事を表示

[Swift]カスタムrawタイプの列挙型

※この記事は[Swift by Sundell](https://www.swiftbysundell.com/tips/enums-with-custom-raw-types/)の内容を日本語に翻訳したものです。

# Swift列挙型はカスタムなRaw型をもてる

Swift列挙型は、*Raw値*(文字列や整数など)の完全なリストを作成するために非常に一般的に使用され、タイプセーフ(正しく型付けされたプログラムは不正な動作をしない)な方法で処理できます。たとえば、ファイル拡張子に基づいた形式のリストを含む`VideoFormat`列挙型を定義する方法は次のとおりです。

“`.swift
enum VideoFormat: String {
case mp4
case webM = “webm”
case ogg
}
“`

上記のような*Raw値*ベースの列挙型を宣言すると、コンパイラは自動的にそれを`RawRepresentable`プロトコルに準拠させます。これにより、`init?(rawValue :)`イニシャライザや`rawValue`プロパ

元記事を表示

【Flutter】全画面を削除し遷移する

## 何度か画面遷移をした後にトップレベルの画面に戻す

“`dart
Navigator.of(context).pushNamedAndRemoveUntil(‘/page’, (_) => false,);
“`

### メソッド

条件を満たすまで画面を破棄し遷移するため, 条件部分でfalseを返している.

“`dart
pushNamedAndRemoveUntil(
”, //page
(_) => false, //条件
)
“`

参考 https://api.flutter.dev/flutter/widgets/Navigator/pushNamedAndRemoveUntil.html

元記事を表示

Swift – fullScreenで画面遷移三つの方法

#背景
デフォルトで画面が遷移する時、新画面は旧画面に重ねて出てきます、↓のように。
でも、時々フルで画面を出したい時もあるでしょう。以下フルで画面を出す方法を紹介します。
![截圖 2021-09-02 21.37.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1326861/ba5df0cf-9d54-28da-2e5e-fb5a8e6d6082.png)
#その一:present
以下のコードを入れて、画面一のUIボタンをクリックすれば、フルで画面を出せます。

“`simple.swift
//画面一に入れたボタンのクリックイベント
@IBAction func button(_ sender: UIButton) {
let vc = UIStoryboard(name: “Main”, bundle: nil).instantiateViewController(withIdentifier: “ViewController2”) as! ViewCo

元記事を表示

[Swift] 文字入力バリデーションを実装する(iOS)

## はじめに

TextField等の入力フォームで受け取った文字列をそのままサーバー側に投げるのは、サーバへの負担となってしまうのでなるべく避けたいところです。
そこで明らかに無効な入力があった場合、アプリ側で弾くことができるよう簡易的なバリデーション機能を設けることにしました。

## チェック対象

– Password

記事を分かりやすくするため、パスワードのバリデーションのみを考えることにします。

### 必要な要件

– 英数字のみ
– 大文字小文字の制限は設けない
– 文字数は6~8

よくある簡易的なパスワードという感じです。

## 実装

上記のようなフォームに入力した場合を想定してつくります。

### コード

“`swift
import Foundation

// ①
enum ValidationResult {
case valid
case dataIsEmpty(

元記事を表示

FirebaseUIが新しくなってimport FirebaseUIが指定できなくなった

6/9にリリースされたバージョン11.0でFirebaseUIが新しくなりSwiftで

“`
import FirebaseUI
“`
が指定できなくなった。

teratailの回答の通りにimport FirebaseAuthUIを書いてみても、「Cannnot find XXX in scope」は無くならず。

https://teratail.com/questions/349444

# 解決策

“`swift
import FirebaseAuthUI
import FirebaseEmailAuthUI
import FirebaseFacebookAuthUI
import FirebaseAnonymousAuthUI
import FirebasePhoneAuthUI
import FirebaseOAuthUI
import FirebaseGoogleAuthUI
“`

を書いたところエラーが解決されました。

ちなみにFUIGoogleAuthとFUIFacebookAuthは( )内に authUI 引数を指定しないとビルド後にエ

元記事を表示

[Swift] 同じ値を毎回代入するのと同じ値じゃない時だけ代入するのってどっちが早いのか今更だけど検証した

## モチベーション

varで宣言された値があるとします。

“`swift
var foo = false
“`

それを上書きするとします。

“`swift
foo = true
“`

ということを複数回繰り返すとします。

“`swift

(0…10000).forEach { _ in
foo = true
}
“`

この時に毎回trueを代入しても、fooがfalseの時だけ代入しても結果fooはtrueになります。

“`swift

(0…10000).forEach { _ in
foo = true
}

(0…10000).forEach { _ in

if foo { return }

foo = true
}

// どっちにしろfooはtrueになる。

“`

今更なんですが、パフォーマンス的にはどっちがいいのか気になったので検証してみました。
(もう誰か試してる気がするけど簡単にできそうだったので今のバージョンで改めてということでお許しください。。。)

仮説としては毎回代入する方が

元記事を表示

FlutterでFirebaseのパッケージを導入する(主にIOS)

###概要
FlutterでFirebaseのパッケージを導入するための最低限の手順です。
少し厄介なIOSでの実装について書いていきます。

####1. pubspec.yamlにパッケージを入れる
使いたいパッケージを`pubspec.yaml`に入れて`Pub get`を実行する。
####2. CocoaPodsをインストールする
podのリポジトリを更新する前に`ios/Podfile`を開き、2行目にあるコードをコメントアウトから解除し、新しいバージョンに指定する。
![スクリーンショット 2021-09-02 15.11.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1132605/f40d59f8-7c5b-781c-eb7d-bfbd2f6b0fb2.png)

また、RunnerターゲットのIOSバージョンもXcodeから変更する。
![スクリーンショット 2021-09-02 16.01.07.png](https://qiita-image-store.s3.ap-nor

元記事を表示

Flutter: Android studioでFirebaseをセットアップする最低限の手順(Android&IOS)

###この記事について
この記事はFlutterでAndroidとIOSのアプリを作る際、Firebaseを使用するときのセットアップ方法についての記事です。
実装するたびに動画の教材を見ており時間が掛かってしまうため(特にIOS)、一連の作業を箇条書きにしております。
セットアップのための最低限やることを書いた記事のため、Firebaseの機能の実装等は記載していません。また、Firebaseプロジェクトの作成は省略しております。

###開発環境

“`
% flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel master, 2.6.0-1.0.pre.150, on macOS 11.5.2 20G95 darwin-x64, locale ja-JP)
[✓] Android toolchain – develop for Android devices (Android SDK version 31.0.0)
[✓] Xcode –

元記事を表示

Swiftのナビゲーションバーの枠線を消す

#箇所
頭部のところ
![截圖 2021-09-01 23.54.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1326861/e0797f84-9881-9c47-2b6d-e31aa45a3a2c.png)
#消したい画面に
“`sample.swift
override func viewDidLoad() {
super.viewDidLoad()
let image = UIImage()
self.navigationController?.navigationBar.setBackgroundImage(image, for: .default)
self.navigationController?.navigationBar.shadowImage = image
}
“`
を書き込んだら消えます。

元記事を表示

[SwiftUI]Colorの整理とダークモード対応(超簡単)

## 投稿の経緯
SwiftUI × 個人開発でアプリ内で使う配色を管理する場合に使った方法を投稿します。

## 環境
Swift version 5.4.2
Xcode version 12.5.1

## Colors.xcassetsの作成
`File > New > File…`で`Asset Catalog`を選択して今回は`Colors`という名前でファイルを新規作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/eafc58ff-dea3-3145-5b5d-94651a9fb60f.png)

ファイルを作成したら下記画像のように`New Color Set`で色を追加します。

![スクリーンショット 2021-09-01 16.47.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/23989720-4b4d-8989-b875-f35df0

元記事を表示

TabViewで選択時のタブを画像毎置き換える方法

## やったことなど
今回はタブボタンを選択した時の変化を「アイコン」に対してやってみようと思いました。
参考ページでは「SF Symbol」のフォントを変化させる方法が掲載されています。
とある案件で選択時のタブボタンを画像毎変える必要があったため、なんとか手を加えて試してみました。
構成やソースはほぼ参考サイトを引用しています。

## コード
引用したソースから「systemName:」を削除して少しImageの名前を変えた程度でなんとかうまくいきました。

“`swift
struct ContentView: View {

// タブの種類
enum Tab {
case circle
case square
}

// 選択中のタブ
@State private var selection: Tab = .circle

var body: some View {
TabView (selection: $selection) {

元記事を表示

[SwiftUI] ScrollView offsetでアニメーションボタン作ってみた

## 環境
Xcode 12.5
iOS14以上

## 概念
1. GeometryReader
https://developer.apple.com/documentation/swiftui/geometryreader
2. Overlay https://developer.apple.com/documentation/swiftui/view/overlay(_:alignment:)
2. RotationEffect https://developer.apple.com/documentation/swiftui/text/rotationeffect(_:anchor:)
2. Animation
https://developer.apple.com/documentation/swiftui/animation

## 画面作成
最初はボタンを作る前に中身を作る。
LazyVGridでUIKitのUICollectionViewように画面を作成した。
画面はこんな感じ。

capture01React Native(Expo)のiOSビルドでエラーになる件

# ExpoでiOSアプリをビルドするとエラー終了してしまう
実際に表示されていたエラーは以下。

“`:ビルドを実行したコンソールに出るエラー
You can press Ctrl+C to exit. It won’t cancel the build, you’ll be able to monitor it at the printed URL.
✖ Build failed.
Standalone build failed!
“`

“`:Expoのダッシュボードで見れるビルドログのエラー
Error: xcrun exited with non-zero code: 1
at ChildProcess.completionListener (/usr/local/turtle-js/node_modules/@expo/xdl/node_modules/@expo/spawn-async/build/spawnAsync.js:52:23)
at Object.onceWrapper (events.js:418:26)
at ChildPro

元記事を表示

NeumorphismなTabBarを実装する

##外部ライブラリを使用する
使用したライブラリ: [NeumorphismTab](https://github.com/touyou/NeumorphismTab)

CocoaPodsでインストール

“`ruby
pod ‘NeumorphismTab’
“`

##コード
ライブラリをimport

“`swift
import NeumorphismTab
“`

`NeumorphismTabBarController`を継承した`MainTabBarController`クラスを作る

“`swift
class MainTabBarController: NeumorphismTabBarController
“`

`override func setupView()`メソッドに下記を記述
###colorを設定

“`swift
view.backgroundColor = #colorLiteral(red: 0.9725490196, green: 0.9725490196, blue: 0.9725490196, alpha: 1)
“`

元記事を表示

UIStackViewを使ってViewを比で分割したい

## やりたいこと
![memo_1630333626.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477548/fd31da3a-9345-bb83-dc61-5d9443be2b4c.jpeg)
↑のようなイメージでViewを比で分割したい

## 環境
Xcode 12.5.1
Swift 5.4.2

## UIStackViewの準備
“`swift
import UIKit

class ViewController: UIViewController {

let topView: UIView = {
let view = UIView()
view.backgroundColor = .red
return view
}()

let middleView: UIView = {
let view = UIView()
view.backgroundColor

元記事を表示

【Swift】スワイプでNavigationBarを上に隠す

##やりたいこと
タイムラインを下にスクロールしたときにNavigationBarが隠れるTwitterのようなUIを実装したい

##コード
`hidesBarsOnSwipe `を`true`にする

“`Swift
navigationController?.hidesBarsOnSwipe = true

元記事を表示

OTHERカテゴリの最新記事