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

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

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

元記事を表示

【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

元記事を表示

OTHERカテゴリの最新記事