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

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

【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

元記事を表示

【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|
|-|-|
|完全に削除
(ファイルからも消える)|見た目だけ削

元記事を表示

OTHERカテゴリの最新記事