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

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

【SwiftUI】Viewコンポーネントの抽象化について考える

# はじめに
[SARAH iOSアプリケーション](https://apps.apple.com/jp/app/id916083595)へのSwiftUI導入が進む中で、Viewコンポーネントの抽象度についてベストプラクティスを考える機会が多々あります。例えばボタンを一つ作るにしても、「背景色は外から自由に指定可能にするべきか?じゃあフォントサイズは?」といった具合に「どこまでやる?」がつきまといます。
そんなViewコンポーネントの抽象化を、SwiftUIの特性を活かしつつ深ぼっていこうと思います。

# 今回の題材
IMG_3961.png

SARAHアプリには飲食店のメニューを一皿単位で検索できる画面があり、テキストだけでなく各種タグを選んで検索ができます。今回はそのタグ選択フォーム(以降**ファセット

元記事を表示

【SwiftUi】StateObjectとObservedObjectの違い

# はじめに

`ObservedObject`を用いたページにおいて、その上位ページの値がeventlistenerによって変化する度に現在のページが初期化されることがあった。
ViewModelからデータを共有する方法は大きく`StateObject`と`ObvservedObject`の2つがある。
よってこの2つの使い方や特徴をまとめる。

# 環境
Xcode 13.3.1

# 構成
APP
|   Mainview.swift
\ーchildrenPages
  |  ObservedObjectView.swift
  |  StateObjectView.swift

# Code
“`swift: MainView
class MainViewModel: ObservableObject {
@Published var mainCount = 0
}

struct MaintView: View {

@ObservedObject var viewmodel = MainViewModel()

var bo

元記事を表示

SwiftUI Buttonタップ時にハイライトをさせないようにしたい

configuration.labelだけのButtonStyleを作り
“`swift
struct NotHighlightButtonStyle: ButtonStyle {
func makeBody(configuration: Configuration) -> some View {
configuration.label
}
}
“`

buttonStyleに定義すればボタンタップ時にハイライトしないようにできる。
“`swift
struct ContentView: View {
var body: some View {
Button {
print(“tap!”)
} label: {
//~~省略
}.buttonStyle(NotHighlightButtonStyle())
}
}
“`

元記事を表示

イカリング3をPCブラウザで表示する

# はじめに
こちらの記事([イカリング2をPCブラウザで見れる方法があるらしいのでやってみた](https://qiita.com/valmet/items/1b3960085a8764778bf0))を参考にイカリング2をPCブラウザで閲覧していたが、Splatoon3の発売に際してイカリング3も同様に閲覧出来ないか試したところ、一応上手く行ったので、備忘録も兼ねて手順を簡単に記載します。

※当記事は、上記記事を参考・ベースに書かせて頂きました。

# 環境
– PC
– Ubuntu 20.04

– スマートフォン
– iPhone 12 mini
– iOS 15.6

– プロキシツール
– [mitmproxy](https://mitmproxy.org/)

– ブラウザ
– Google chrome

– cookie管理ソフト
– [EditThisCookie](https://chrome.google.com/webstore/detail/editthiscookie/fn

元記事を表示

WebKitのiOSビルドにlldbがattachできないときの解決方法

初めてQiitaに記事を投稿してみました。いろいろ未熟ではありますが、結構ニッチな部分の記事なので、誰かの役に立てたらいいな、と思い少し記事を書かせていただきました。よろしくお願いします。

# TL;DR

iOS用のWebKitにデバッガーがattachできない問題は、権限の問題です。

まず

“`
$ sudo DevToolsSecurity -enable
“`

を実行したあと、リカバリーモードでブートして、コンソールで以下の命令を実行しましょう。

“`
$ csrutil enable –without debug
“`

# 問題編

私はあるWebKitのバグを再現し、デバッガーでログをみようとしていました。

このバグはiOSでしか再現ができないバグで、私はWebKitの公式ページを頼りにiOSのデバッグビルドを作成してログを確認しようとしました。

https://webkit.org/building-webkit/

https://webkit.org/running-webkit/

https://webkit.org/debugging-

元記事を表示

iPhoneの共有シートを使ってSafariからScrapboxに投稿する

## 前提
– タイトルにページ名を、本文にページURLを設定した画像を貼るというのが基本機能
– ただしレシピの管理用に作成したため、それに即した機能になっている

## 使ったもの
– ショートカットApp (iOS15.6)
– [Scrapboxへのリンクを生成してアクセスするとページが作られる機能](https://scrapbox.io/help-jp/%E3%83%9A%E3%83%BC%E3%82%B8%E3%82%92%E4%BD%9C%E3%82%8B#58ae7de497c29100005b8874)

## デモ
![レシピクリップ_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547010/d7044605-af34-ab60-990d-1cb3144eb61b.gif)

## 処理
### 概要
1. 共有シートからの入力を受け付ける
1. 画像を取得
1. タイトルを取得
1. 本文を取得
1. URLを作成し開く
### 1. 共有シートからの

元記事を表示

UIEditMenuInteractionを使ってメニューを出してみた

## そもそもメニューってなんのこと?
今回はiOSの話に限りますが、テキストなどの文字列を長押ししたり
タップすると、画像のようにコピーや貼り付けできるメニューが表示されます。

![ダウンロード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/97d0e6d6-1b65-b16b-2f5b-03138eb54694.png)

## iOS16で今まで記載していたメニュー表記のライブラリが非推奨に・・・
現在まではメニュー表示やこのメニュー欄をカスタマイズする方法は、
「UIMenuController」を使用していました。

しかしiOS16ではこのライブラリが非推奨となり、
新たに「UIEditMenuInteraction」を使用することが
推奨されています。

今回はSwiftでメニューを試しに表示する方法を
簡単に説明しようかと思います!

## 早速コードを書いてみよう!
### ①まずは適当なUIを用意!
ここではコピーしたい任意の文字列を置きます。
Classは「UI

元記事を表示

【Swift】CodableをCamelCaseで定義する方法

# サンプルデータ
Twitterの[users/show](https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-users-show)を一部抜粋してサンプルデータにしました

“`sample.json
{
“id”: 121314463,
“id_str”: “121314463”,
“name”: “サンプル”,
“screen_name”: “sample”,
“location”: “japan”,
“description”: “sample”
}
“`

# 方法1(CodingKeysを使う)
“`swift:SampleModel
import Foundation

struct SampleModel: Codable {
let id: Int
let idStr, name, screenName, locatio

元記事を表示

iOSDC 2022セッション資料まとめ

![iosdc.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188222/26d7a61f-d285-00b0-4dde-f1524427fae8.png)

iOSDC2022登壇資料、スライドのまとめです。
Twitter等で見つけ次第掲載しますが、もし資料を見かけた方or資料を公開した登壇者の方がいらっしゃいましたら、コメント等でお声がけください。
スライドや資料のリンクが見つかった場合はタイトルにリンクをつけてありますので、タイトルがリンクになっていない場合はまだ資料が見つかっていないものになります。

# Day 0
## Track A
### [ノートアプリのテキストエディタの解体新書](https://www.docswell.com/s/fromkk/K1NDRZ-note_ios_text_editor)

[forteeのリンク](https://fort

元記事を表示

iOSDC Japan 2022 day0 前夜祭で視聴したセッションとその感想

# はじめに
今年もiOSDC Japanに参加しているので、私が視聴したセッションとその感想をまとめました。day0 前夜祭のセッションになります。

**iOSDC Japan 2022**については[こちら](https://iosdc.jp/2022/)をご覧ください。

# ノートアプリのテキストエディタの解体新書
最初に参加したセッションはこちらでした。noteアプリのテキストエディタに関するセッションです。私はnoteをよく使っており、昨年のアクセシビリティに関するセッションも面白かったので、今年も楽しみにしていました。

UITextViewを複数配置することで、拡張性高く機能追加に柔軟に対応可能できるというお話が印象的でした。また、iPadのレイアウト用に[readableContentGuide](https://developer.apple.com/documentation/uikit/uiview/1622644-readablecontentguide)を使用しているというお話も非常に参考になりました。

普段何気なく使っているnoteアプリのエディタの裏

元記事を表示

楽器チューナをiPhoneで作ってみる

## はじめに

興味はあるもののなかなか手出しできなかったiPhoneのAudioプログラミングに挑戦してみました。
題材は、マイクからのオーディオ取得とFFTを使った楽器(主にギター?)チューナです。

楽器チューナは、下図のようにマイクから音を取り込み、FFTで周波数軸のデータを取り出し、所定の周波数と合致しているかを判定することで、おおよその機能が実現します。

“`mermaid
sequenceDiagram
participant A as 楽器(ギターなど)
participant B as 楽器チューナ(iPhone)

A->>B: ♬
B->>B: マイクで楽器音を取得
B->>B: FFT演算
B->>B: 周波数比較

alt 周波数が一致した
B->>B: 表示
end
“`

## 技術要素

### マイク入力の音声データを取得する

マイク入力のための資料は、あるようで実は絶望的に少なかったです。
Appleの資料だけでは、何をどう組み立てれば良いのか、ほぼ暗中模索状態

元記事を表示

Swift Playgrounds App

2021年から、iPadのSwift Playgroundsアプリを使ってiOSアプリの開発ができるようになりました。この際、従来のやり方であるXcodeを使ったiOSアプリの開発とは異なる、新しいプロジェクト形式が使われます。

この新しいプロジェクト形式は、従来の形式にあった問題点を解消していて興味深いです。本記事では、この新しいプロジェクト形式がどのようなものなのか見ていきます。

## Xcodeプロジェクト形式

まず、従来のプロジェクト形式について確認しましょう。ここでは、「Xcodeプロジェクト形式」と呼ぶことにします。

XcodeでiOS Appを新規作成すると、`.xcodeproj` という拡張子のバンドル(フォルダ)ができます。xcodeprojバンドルの中に `project.pbxproj` というファイルがあり、これにプロジェクトの情報が保存されます。

“`shellsession:Xcodeプロジェクト形式の構成ファイル(一部省略)
XcodeAppSample/
├── XcodeAppSample/
│   ├── ContentView.swi

元記事を表示

【Flutter】tutorial_coach_mark の使い方

## 初めに
tutorial_coach_mark とは、以下のように、特定の Widget にフォーカスして、ユーザにアプリの操作方法を理解してもらうためのチュートリアルを作成するパッケージです。

[公式ページ](https://pub.dev/packages/tutorial_coach_mark)から引用

## 記事の対象者
+ アプリにチュートリアルを実装したい方
+ 操作が難しいアプリを開発している方
+ アプリに対して「操作がわかりにくい」とフィードバックがあった方

## 準備

### パッケージの追加
まずは[ tutorial_coach_mark パッケージ ](https://pub.dev/packages/tutorial_coach_mark/install)を「 pubspeck.yam

元記事を表示

【Swift】コードでアラートを閉じる

# はじめに
たぶん普通の事なんだと思いますが、初心者すぎて悩んだので記録しておきます。

# 実装
ボタンでアラートを表示して、アプリがバックグラウンドになったらアラートを閉じます。
“`swift
import UIKit

class ViewController: UIViewController {

private var alert: UIAlertController!

override func viewDidLoad() {
super.viewDidLoad()

// バックグラウンド監視
NotificationCenter.default.addObserver(
self,
selector: #selector(background),
name: UIApplication.willEnterForegroundNotification,
object: nil
)

元記事を表示

【Xcode】正規表現を使用して一括置換

# はじめに
Xcodeの検索機能や置換機能はよく使うと思います。
置換を正規表現使ってやりたいと思ったときにやり方に迷ったので記録しておきます。

# やり方
① `⌘ + F`で検索欄を表示させます
![スクリーンショット 2022-09-09 1.07.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/de242ca9-1280-1fd6-4067-223aeeac9d70.png)

② Findの右にある矢印を押します
![スクリーンショット 2022-09-09 1.09.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/4a830658-a1fb-02c9-6c71-830392ca856c.png)

③ 「Replace」を選択します
![スクリーンショット 2022-09-09 1.10.47.png](https://qiita-image-store.s3.ap

元記事を表示

[Fllutter]iOSエミュレーターで実行できなくなった

# 実行できるようになります。
## 出たエラー
“`
Launching lib/main.dart on iPhone 13 Pro Max in debug mode…
Running pod install…
Running Xcode build…
Xcode build done. 8.2s
Failed to build iOS app
Error output from Xcode build:

2022-09-09 18:26:27.927 xcodebuild[69619:651609] Requested but did not find extension point with identifier Xcode.IDEKit.ExtensionSentinelHostApplications for extension Xcode.DebuggerFoundation.AppExtensionHosts.watchOS of plug-in com.a

元記事を表示

FlutterでiOSのselectionHandleColorを設定する方法

## 概要
iOSにおいて、テキスト選択時のハンドルカラーを`textSelectionTheme`で変更することができず、つまずいたので方法を紹介します。

スクリーンショット 2022-09-09 0.07.35.png

## Androidの場合
テキスト選択時の設定は全て`textSelectionTheme`で設定できます。
“`dart
ThemeData(
// …省略…
textSelectionTheme: TextSelectionThemeData(
selectionColor: selectionColor,
cursorColor: cursorColor,
selectionHandleColor: selectionHandleColor

元記事を表示

Swift Playgrounds のアプリに plist ファイルを適応して機能を追加する

# 初めに

まず最初に **Xcode の Playground とは違います** のでmm
今回は **Swift Playgrounds** でアプリを開発する場合のお話です。

## Swift Playgrounds とは

2016年に登場した iPad 上で Swift を学習できるアプリです。

https://www.apple.com/jp/swift/playgrounds/

当初はテンプレートの教材を Swift で学習するだけでした。

現在はバージョンが`4.1`までリリースされており、iPad のみならず Mac 上でも動作し、**実際にリリースできるアプリが作成できる**までになりました。

## どんなことができるの?

iOSDC Japan 2022 で LT をします!

https://fortee.jp/iosdc-japan-2022/proposal/cc685572-46e9-483a-83b2-a1c839662dec

登壇後に資料をあげるので、見ていただけると少しは理解が深まるかと思いますmm

# plist ファイルに

元記事を表示

App Groups で共有したファイルを監視してプロセス間の変更を Combine で検知する

## 背景

### App Groups とプロセス間通信

https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_application-groups

> App groups allow multiple apps produced by a single development team to access shared containers and communicate using interprocess communication (IPC).

App Groups は複数のアプリケーションが同じ領域にアクセスできるようにする仕組みです。異なるアプリケーションは別のプロセスで動いて

元記事を表示

【Swift】文字列を比較する

# はじめに
文字列を比較する方法を学んだので記録しておきます。

# 使い方
“`swift
import Foundation
let A = “123”

let B = “456”

let compare = A.compare(B, options: .numeric)

switch compare {
case .orderedAscending:
print(“Aの方が小さいです”)
case .orderedDescending:
print(“Aの方が大きいです”)
case .orderedSame:
print(“AとBは同じです”)
}
“`

# 解説
数字と数字の比較ならわかりやすいですね
しかし、`compare`は数字以外も比較できます。

なぜ数字以外が比較できるのでしょうか
どのようなルールで比較してるのでしょうか

これは文字列の順序が上か下か同じかを判定しているものであると思います。

よって、数字とひらがなであっても比較できます。

“`
数字 < アルファベット(大) < アルファベット(小) < ひらがな

元記事を表示

OTHERカテゴリの最新記事