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

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

【Qiita Night】 「新卒エンジニアによるSwift6与太予想」で登壇してきました!

## 1. はじめに
 2022/05/18に開催された[Qiita Night Swift6がもたらす開発者体験を予測しよう!](https://increments.connpass.com/event/246181/)に「新卒エンジニアによるSwift6与太予想」というタイトルで登壇させていただきました。動画、スライドに関しては以下のURLから確認できるので、ぜひご覧ください!
この記事では、登壇内容のまとめやお話しできなかった部分を書いていこうと思います!

https://speakerdeck.com/eiji127/qiita-night-xin-zu-enzinianiyoruswift6yu-tai-yu-xiang

## 2. 非同期処理とジェネリクスのアップデートについて

 まず初めに、非同期処理とジェネリクスのアップデートについて話しました。この2つに関しては、WWDC21の動画やSwift Evolutionなどで、どのようにアップデートされるかについて具体的に言及さ

元記事を表示

【Flutter3.0】キーボードタイプをスクショ付きで改めて。

# はじめに
Flutterも3になりましたので、改めてスクショ付きで種類をまとめようと思いました。

# 環境
Flutter3.0
Xcode 13.3.1

# ドキュメント
https://api.flutter.dev/flutter/services/TextInputType-class.html

## TextInputType.text
“`
TextField(
onChanged: onChange,
keyboardType: TextInputType.text,
),
“`

デフォルトのキーボード。
未指定だとこちらを表示します。

## TextInputType.multiline
“`
TextField(
onChanged: onChange,
maxLines

元記事を表示

TextFieldで数字,英語,記号だけを入力させたい時

# 内容
アカウント登録などのフォームを制作する際に、メールアドレス、パスワードなどの
TextFieldに、入力できる値を制限したい場面を想定しています。

# 方法
### 数字のみ
数字のみは**inputFormatters**で用意されていて、以下の記述を足すことで簡単に設定ができます。
“`Dart
TextField(
keyboardType: TextInputType.number,
inputFormatters: [FilteringTextInputFormatter.digitsOnly]
)
“`

### 英字,記号など
**FilteringTextInputFormatter.allow()** : 一致するものを許可
**FilteringTextInputFormatter.deny()** : 一致しないものを許可

“`Dart
inputFormatters: [
FilteringTextInputFormatter.allow(
RegExp(r'[a-zA-Z0-9@_-.]’)),
],

元記事を表示

iOSの端末識別方法って…(・・?

## リセマラスッカ…
リセマラしようと思いました。(iPhone12)
アプリ消しました。
再インストールしました。

アプリキャラ<「お帰りなさい!!」 ...? (一部、事実と異なる表現をしています) ## なんか覚えられてるんですけど アプリ開発については詳しくないので推測ですが デバイスからデータ削除しているにも関わらず、あちらが私の情報を持っているということは あちらのAPIで取得できる端末情報とゲームデータを紐づけているんじゃあないかと。 取得できる端末情報なんて限られるから変えられるもんは全部変えようとしました。 ### ① Apple ID サインアウトして別アカウントでアプリを再度インストールしましたがダメでした。 ### ② MACアドレス 端末識別といえばって感じで思い当たった。 でもWifiと4Gで変わるよな... 切り替えても覚えられてるし... ###### 後で調べましたが、iOSいくつからか勝手に切り替わるようになっていました。すごい よって違う。 ### ③ IDFV ここからちょっと調べて知った情報です。 Appleさんはアプリが取得

元記事を表示

【SwiftUI】ChartsをSwiftUIで使う

# はじめに
Qiitaのネタも尽きてきたので新シリーズを開始しようと思います。
題して「UIKitで書かれたライブラリのデモをSwiftUIで書き直すシリーズ」

本シリーズ最初のライブラリは「[Charts](https://github.com/danielgindi/Charts)」です!
Chartsはグラフの描写ライブラリです

# 実装
### Line Chart

“`LineChart1.swift
import SwiftUI
import Charts

struct LineChart1: UIViewRepresentable {
@Environment(\.colorScheme) var colorScheme
func makeUIView(context: Contex

元記事を表示

Launch Screenが正しく期待通りに表示されない問題

## 現象
LaunchScreen.storyboardを利用して起動時スプラッシュを表示しようとすると
– ノッチあり端末では、スプラッシュが出るはずの画面が真っ暗になってしまう
– ノッチなし端末では、期待通りに表示される

というややこしい問題が起きていた。

## 原因と解決方法
LaunchScreenにpdfを画像として利用していたことが原因。
これをpng画像に差し替えたところ、どちらでも期待通りに表示されるようになった。
AppleのLaunchScreen Debugガイドによると、LaunchScreenに使う画像はjpg/pngのどちらかでなければいけないそう。

“`
The image in your launch screen storyboard did not originate from the target’s asset catalog. If you are using static images in your launch screen, check to make sure the image originates from the p

元記事を表示

[iOS][Firebase] プッシュ通知のテストメッセージが届かなかった時の対処メモ

# 状況

Firebase公式ドキュメントを見ながらプッシュ通知の設定をした後、ブラウザで Firebase Cloud Messaging のコンソールからテストメッセージを送信してみたが、実機RUN中の iPhone に通知が届かない…

https://firebase.google.com/docs/cloud-messaging/ios/client?hl=ja

# 解決方法

AppDelegateに[application(_:didRegisterForRemoteNotificationsWithDeviceToken:)](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1622958-application)を書いたら解決した。

Apple 公式ドキュメントの「デバイストークンをAPNsに登録する方法」というページでこの関数が紹介されていた。

https://developer.apple.com/documentation/usernotifications/

元記事を表示

【SwiftUI】アプリ起動広告の表示方法

第0部: [スタートガイド](https://qiita.com/SNQ-2001/items/44f3446ce0966c78641b)

第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)
第5部: [アプリ起動広告](https://qiita.com/SNQ-2001/items/75ce24982bf418c52349) ← イマココ

# はじめに
AdMob広告シリーズ第5部です
今回は[アプリ起動広告](https://developers.google.com/ad

元記事を表示

SwiftUIでダイアログを実装する(例:ローディング)

## すべてのコンテンツ上でローディングダイアログを表示
以下の「モデルクラス」と「モディファイア」を導入することで、すべてのコンテンツ上でローディングダイアログを表示します。
* DialogModel.swift
* DialogModifier.swift

## DialogModel
ObservableObjectプロトコルに準拠したクラスです。
これを使用して、ダイアログをアクティブ・非アクティブします。
“`swift:DialogModel.swift
import Foundation

public enum DialogType {
case none
case loading
}

class DialogModel: NSObject, ObservableObject {
@Published var dialogType: DialogType = .none
}
“`

## Dialog モディファイア
DialogModelのdialogTypeに基づいてローディングダイアログをアクティブにします
オーバーレイは、ビュー

元記事を表示

🐮インスタふうの画像選択を使いたい! YPImagePicker 🐮

# 使い方

Swift Package Managerで以下を加えます。

https://github.com/Yummypets/YPImagePicker.git

Info.Plistで Photo Usage Description と Camera Usage Description を追加します。

“`swift
import YPImagePicker
“`

“`swift
var config = YPImagePickerConfiguration()
config.library.maxNumberOfItems = 10
let picker = YPImagePicker(configuration: config)

// 以下で画像や動画を選択したときの挙動を記述

picker.didFinishPicking {

元記事を表示

FlutterでiOSのソースを呼び出す

押したら文字が変わるだけのシンプルなものです。ただFlutterではなくiOSのソースを呼び出しています。画面は下記。
Simulator Screen Shot - iPhone SE (3rd generation) - 2022-05-24 at 09.07.17.png Simulator Screen Shot - iPhone SE (3rd generation) - 2022-05-24 at 09.07.19.png

ソース

元記事を表示

Swiftで特定のメソッドをClosureにしたくなった時

例えば以下のような関数があったとします。

“` swift
func 関数名() {
長い処理
}
“`

このメソッドを使い回した時に特定の箇所ではUI処理が終わるまで待機する必要が出てきた時などに

“` swift
func 関数名(comp: (() -> Void)? = nil) {
長い処理

// comp!()にすると呼び出さない場合にクラッシュする(後述)
comp?()
}
“`

## 呼び出し方

“` swift
override func viewDidLoad() {
// 待つ必要がない場合
// comp!()にしてるとここでクラッシュ
関数名()

// 待ちたい時
関数名 {
//待った後に行いたい処理
}
}
“`

もし以下のような形で書くと

“`swift
func 関数名(comp:

元記事を表示

【Swift】半円グラフの作り方

# はじめに
Swiftのグラフ描写ライブラリと言えば「[Charts](https://github.com/danielgindi/Charts)」ですよね。
そんなChartsで半円グラフを作る機会があったのでアウトプットとして記事にしておきます。

# 作るもの
GitHubリポジトリの使用言語グラフ
(今回は[こちら](https://github.com/apple/swift)のリポジトリ)

![スクリーンショット 2022-05-23 22.52.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/7fbe9330-f4ff-da45-7ce3-5d736512a584.png)

これを半円グラフで描写します。

# インストール
私はCocoaPodsでインストールしました。
通信にはAlamofireを使います
“`Ruby
pod ‘Charts’
pod ‘Alamofire’
“`

# 実装
### Storyboardの設定
Viewを配置します

元記事を表示

【Swift】数字の省略表記

# 数字の省略表記とは?
![IMG_0372.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/de73c8f7-59bc-f9b7-4e10-dfc4f9aa070d.jpeg)

SNSでフォロワーの数が省略されている事があります
正直、日本では使わないと思うのでぱっと見ではこれが何桁の数字なのか分からないと思います。

簡単に説明すると
**1K = 1,000**
(000が1個ならK)

**1M = 1,000,000**
(000が2個ならM)

このような法則があります。

数字から省略表記に変換する拡張を作る機会が合ったので共有したいと思います。

# 作ったもの
`1.0K`のような場合は`.0`を削除しています
“`swift
import Foundation

extension Int {
func calcNumericalValue() -> String {
if self >= 1000000 {
l

元記事を表示

Unityのマルチプラットフォームビルドスクリプトではまりがちなこと(特にiOS)

# はじめに

この記事は以下のような問題をかかえる人向けです

* スクリプトを利用したマルチプラットフォームビルドに手を染めている
* プラットフォームの切り替えとビルドの開始をEditorスクリプトで行おうとしている。
* スクリプトからプラットフォームを切り替えたときに、Unityでのビルド自体は成功しているのに、おかしなビルドができたり、ビルドが失敗したりするケースがある

スクリプトから `defineシンボル` を変更したとき についても同様の問題があるので参考になると思います。

# 環境

Unity2019.4.29f1 でためしています。もしかすると、後のバージョンでは違いがあるかもしれません。

# 結論

忙しい人向けに最初に結論を書きます。

* とあるプラットフォーム向けに正常にビルドするためには、そのプラットフォームに先にスイッチし、しかも、Editorスクリプトを再コンパイルした後でビルドしなければなりません。これができていない場合、異常なビルドになります。イメージとしては以下のような感じです。

iOSでちらつくvue-carousel

## Vue.js(Nuxt.js)でカルーセル作りたい
– カルーセル作りたい!!!って言われたので、素直に[vue-carousel](https://ssense.github.io/vue-carousel/)を導入した
– しかし、切り替わりのタイミングで、iOSの場合のみ、背景の要素が一瞬ちらつく

## よくあるiOSだけでチカチカするアニメーション
– CSSアニメーションとかで、少しリッチな表現を実装するとき、なんかよくわからん要素がチカっと一瞬出てきたり、イージングが効かなかったりする、事がある。
– opacityいじってると起こりがちみたいな話が多い印象がある

## 古の対処方法
– CSSで対象の要素に `transform: translate3d(0, 0, 0);` を追加すると、直る、という方法がある
– すでにいろんな人が教えてくれているので、詳しいことはその偉人たちに任せるとするが、この記述するとGPUアクセラレーションが有効になって、要は描画周りの潜在能力を最大限引き出せる、というような話

## Vue-carouselでもうまくいった

元記事を表示

【Swift】CoreBluetoothの使い方 その4:セントラルとペリフェラルで通信させてみる

# はじめに

Corebluetoothの実装について記載していきます。

[①その1:BLEにおける役割](https://qiita.com/JunNonaka/items/348eeecc63cbce4cfed0)
[②その2:セントラルの実装](https://qiita.com/JunNonaka/items/cde2f4f3934a3d452770)
[③その3:ペリフェラルの実装](https://qiita.com/JunNonaka/items/c7bd386e4a3aa5e245d3)
④その4:セントラルとペリフェラルで通信させてみる←今回はここ

今回はその2で作成したセントラルアプリを修正してその3で作ったペリフェラルアプリと通信させてみます。

# 開発環境

+ iOS 15.2
+ Xcode 13.3.1
+ Swift 5.6

# 出来上がり

修正したセントラルアプリは以下のようなUIです。
SwiftUIでスプラッシュ画面をモディファイアで実装する

## スプラッシュ画面用モディファイア
カスタムビューを表示し、時間が立つと、モディファイア自身でスプラッシュが消えます

“`swift:SplashModifier.swift
import SwiftUI

private let defaultTimeout: TimeInterval = 2.5

struct SplashModifier: ViewModifier {
private let timeout: TimeInterval
private let splashContent: () -> SplashContent

@State private var isActive = true

init(timeout: TimeInterval = defaultTimeout,
@ViewBuilder splashContent: @escaping () -> SplashContent) {
self.timeout = time

元記事を表示

WKWebView のダブルタップを無効にする

※ 今回紹介するやり方は、**実現できたことの紹介** なだけなので、その辺りはご了承ください。

### やりたいこと(JavaScript, css 禁止)

**ピンチインピンチアウトができるのはそのまま**に

A. ズームしていない状態でダブルタップしてもズームさせない
B. ズームしている状態でダブルタップしてもズームとスクロールさせない

というのがやりたいことです。

## A の現象について

WKWebView はダブルタップするとズームする機能があります。

下記の例は初期表示状態(zoomScale: 1.00)の状態で、ダブルタップすると zoomScale が 1.60 になります。
※ 下記の例は背景が黄色で、青い四角い領域(div)があるだけの html を表示したものです

### 初期表示

![wkWebView__01__no_zoom.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1339/e6ae74f4-3d29-b842-9dfd-969bd4de02cc

元記事を表示

【Swift】extensionのパターン

# はじめに
私は最近、拡張の便利さに気づいて使いまくってます
パターンがいくつか合ったので適切に使えるように整理しておきます。

# パターン1
個人的に見た目が悪いから好きじゃない
でも、一番使い方が簡単な気がする

関数部分で引数を取らないならパターン2を使うべきかな

型変換可能
“`swift
extension Int {
func square() -> Int {
return self * self
}
}

print(5.squared()) // 25
“`

# パターン2
パターン1と似てる
後ろの`()`がない分見た目はまし

型変換可能
“`swift
extension Int {
var square: Int {
return self * self
}
}

print(5.squared) // 25
“`

# パターン3
これは見た目がいい
おそらく型変換は不可
“`swift
extension Int {
init(square: Int) {

元記事を表示

OTHERカテゴリの最新記事