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

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

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) {

元記事を表示

【iOS】今更UITextFieldの入力をリアルタイムで取得したかった時の話

# はじめに

タイトルのまんまですが、
パスワードのチェックなどの時にUITextFieldに入力された文字をリアルタイムで検出してチェックするにはどうすれば良いのか悩んだのでメモです。
delegateの処理内容もおさらいとして整理しました。

# 開発環境

+ iOS 15.2
+ Xcode 13.3.1
+ Swift 5.6

# 出来上がり

textFieldに入力中の文字をその直下に置いたLabelに入力されるようにしています。

![textfield.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671830/1d57443b-3671-ed58-0bde-5c5f85cfc464.gif)

# ソースコード

delegateの処理は使わずにaddTargetをeditingChangedで設定して都度関数を呼ぶのが一番簡単です。shouldChangeCharactersInでも出来ないことはないですがちょっともやっとすると思います。

“`swift
import Fo

元記事を表示

Bluetooth MIDI によるモバイルとデバイスの相互通信

モバイルアプリ(iOS/Android)とBluetooth経由でMIDIデータをやり取りするデバイスを製作したいと思い、良いモジュールがないか探してみたところ、以下の基板が見つかりました。

[Bluetooth MIDI 基板(QUICCO SOUND 社)](https://quiccosound.com/?pid=163075094)

この基板だけでは動作できないので、Arduinoと組み合わせて1つのデバイスとします。

# ハンダ付け

まず、Bluetooth MIDI 基板にある4箇所のピンにArduinoと組み合わせるためのワイヤ線をハンダ付けします。(これがなかなか大変でした)

BLE_MIDI_kiban_handa.jpg

[左上] Tx(MIDI入力)   [右上] Vcc(電源)

元記事を表示

iOSアプリにSafari Web Extensionを同梱する方法

SwiftUIでSafari Web Extensionを含めたiOSアプリを作成したいときにハマったのでまとめたいと思います。

## XcodeでSwiftUIアプリのプロジェクト作成
Xcodeで新規プロジェクトを作成します。
今回はiOSとmacOSの両方から使用できるアプリを作成したいので [Multi Platform]タグの[App]を選択します。

:::note info
iOSアプリのみを作成したい場合は[iOS]タグの[App]を選択して、interfaceにSwiftUIを選択して作成してください。
:::

iOS用とmacOS用にSwiftUIのContentViewなどが共有リソースとなっているプロジェクトフォルダが作成されます。
![58B76B24-8A1D-4CD3-9934-1CC123532BA5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213979/2dcbdd64-a2ad-3a4b-4a7f-d79b07b1f38d.png)

## Safari

元記事を表示

【Unity】iOSネイティブプラグイン開発を完全に理解する – サンプルコードをSwiftだけで完結出来るように置き換える

本編「[【Unity】iOSネイティブプラグイン開発を完全に理解する](https://qiita.com/mao_/items/5b33c90e533a538570b8)」の**追記記事**です。
[記事中での用語や略称](https://qiita.com/mao_/items/5b33c90e533a538570b8#%E8%A8%98%E4%BA%8B%E4%B8%AD%E3%81%A7%E8%A7%A3%E8%AA%AC%E3%81%99%E3%82%8B%E8%A8%80%E8%AA%9E%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)についてはそのまま本編に倣う形とし、記事の内容自体もある程度は本編を読み進めているのを前提に記載していきます。

先日辺りに @fuziki さんが書かれた以下の記事を試す機会があり、実際に自分がObjC++で実装したiOSネイティブプラグインを書き直してみた所、 **「ほんまにSwiftだけで完結できるやんけ…」** となったので、遅ればせながらも[本編](https://qiita.com/mao_

元記事を表示

【Swift】GitHubの言語カラーをすぐ使える拡張作った

# はじめに
GitHubには言語によって色が割り振られています。

そんな言語カラーを言語名を指定するだけで再現できる拡張を作成したので共有します。

# UIColor
“`swift
import UIKit

public extension UIColor {
convenience init(language: String) {
switch language {
case “1C Enterprise”:
self.init(red: 0.5058823529411764, green: 0.2980392156862745, blue: 0.8, alpha: 1.0)
case “4D”:
self.init(red: 0.0, green: 0.25882352941176473, blue: 0.5372549019607843, alpha: 1.0)
case “ABAP”:
self.init(red: 0.90

元記事を表示

【iOS, Swift】CIFilterで点描してみた

## 環境
* Xcode:13.3.1
* Swift:5.6

## 点描のソースコード例

点描するには、CIFilterの「CIPointillize」を使う

“`swift
class SampleViewController: UIViewController {

@IBOutlet weak var testDisplayImage: UIImageView!

override func viewDidLoad() {
super.viewDidLoad()

// AssetsにDummyって名前の適当な画像を置く
let dummyImage = UIImage(named: “Dummy”)!
let pointillizeImage = addPointillizeEffect(for: dummyImage)
self.testDisplayImage.image = pointillizeImage
}

func addPointi

元記事を表示

[SwiftUI]住所から地図を表示

## コード
住所から緯度・経度を取得し、その緯度・経度を基に地図を表示する処理を実装
※ プレビュー で `東京都千代田区千代田` の地図を表示している

“`Swift
import SwiftUI
import MapKit

struct MapView: View {
let address: String
@State private var map = MKCoordinateRegion()

var body: some View {
VStack {
Map(coordinateRegion: $map)
.onAppear {
self.getLocation

元記事を表示

【Swift】SPM関係でエラーが出た時の対処法

SPMのエラーは何も変更してないのに突然発生します。
かなりの恐怖体験です。
![スクリーンショット 2022-05-19 21.30.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/8eb51c5a-cd67-fe52-d6de-dd3cf498a986.png)

いまSPMのエラーで泣きそうになってる君に対処法を伝授します。

# 対処法
Xcodeのメニューから「File」を選択します。
![スクリーンショット 2022-05-19 21.39.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/0e40b5e8-7434-d6ca-80ca-4bb4bf6e7e83.png)

①「Packages」を選択します。
②「Update to Latest Package Versions」を選択します。
![スクリーンショット 2022-05-19 21.40.14.png](

元記事を表示

SwiftUI + MVVM + Firebase を利用して Twitter に似たアプリを開発した話

## SwiftUI + MVVM + Firebase を利用して Twitter に似たアプリを開発する

## 参考にした YouTube
https://www.youtube.com/watch

元記事を表示

SwiftでMeCabを使う方法

MeCabはよく使われている形態素解析器ですが,Swiftで開発するiOSアプリに導入する方法についての情報は少なかったので導入までの手順を紹介します.

# MeCabを使おうとする前に

MeCabをローカルで動作させる最大の問題点はディクショナリのサイズが大きいことです.例えば,新語に強いというmecab-ipadic-NEologdは900MB近くあるので,これを使ってアプリを作ったところアプリのサイズは1GBを超えてしまいました.

単に単語に分解したいだけの場合は標準のNaturalLanguageフレームワークを使うこともできます.なお,NSLinguisticTaggerはNaturalLanguageに置き換えられDeprecatedになっています.

単語の品詞を知ることが目的の場合には上記の方法では間に合いません.その場合はMeCab等を使うことになりますが,まずはクラウドサービス等を検討するのが良いでしょう.筆者が今回のシステムでローカルのMeCabを採用した理由は以下の通りです.

– クラウドの利用料を払いたくない
– そこまで多くのユーザへの展開を考えてい

元記事を表示

【Flutter】結局、url_launcherはどう実装すべきなのか。

[_url_launcher_](https://pub.dev/packages/url_launcher) を 6.0.20 -> 6.1.2 にアップしたところ `launch` と `canLaunch` が Deprecated になっていたため書き直したが、挙動が変わったため修正。

#### 元のコード

“`dart
await canLaunch(“アプリのカスタムURLスキーム”)
? await launch(“アプリのカスタムURLスキーム”)
: await launch(“ウェブのURL”);
“`

このコードに問題があったことは認識していて、Androidの場合、特定のアプリにおいては想定している経路では処理されていない。

`twitter` などのURLスキームはアプリをインストールして必要な設定をしても `canLaunch` が _false_ を返してくる場合があり、ウェブブラウザでURLを起動される。
結果的に、ディープリンクとしてサポートしているアプリが起動されていた。

そのため、`canLaunch` を使用せ

元記事を表示

【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

元記事を表示

OTHERカテゴリの最新記事