- 1. VisionFrameworkを使ったiOSアプリケーション開発(Hand Tracking編)
- 2. iOSDC2022 リアルタイムでみたものまとめ
- 3. コマンドラインからiOS実機にアプリをインストールする
- 4. Apple M1でコマンドラインからx86_64のiOSアプリをビルドする
- 5. 【Flutter】Segmented buttons を実装する
- 6. __swift_FORCE_LOAD_$_swiftCompatibilityConcurrencyでハマった
- 7. 【SwiftUI】Viewコンポーネントの抽象化について考える
- 8. 【SwiftUi】StateObjectとObservedObjectの違い
- 9. SwiftUI Buttonタップ時にハイライトをさせないようにしたい
- 10. イカリング3をPCブラウザで表示する
- 11. WebKitのiOSビルドにlldbがattachできないときの解決方法
- 12. iPhoneの共有シートを使ってSafariからScrapboxに投稿する
- 13. UIEditMenuInteractionを使ってメニューを出してみた
- 14. 【Swift】CodableをCamelCaseで定義する方法
- 15. iOSDC 2022セッション資料まとめ
- 16. iOSDC Japan 2022 day0 前夜祭で視聴したセッションとその感想
- 17. 楽器チューナをiPhoneで作ってみる
- 18. Swift Playgrounds App
- 19. 【Flutter】tutorial_coach_mark の使い方
- 20. 【Swift】コードでアラートを閉じる
VisionFrameworkを使ったiOSアプリケーション開発(Hand Tracking編)
# はじめに
この記事は、https://qiita.com/mikazuki_mitsutsuki/items/cdd028a31eb75275e551
の続きの記事である。
この記事では、AppleのvisionFrameworkを使い、手の認識と人差し指の位置を描画させることを目的とする。# Hand Tracking
まず、vision フレームワークをインポートする。
“`swift
import Vision
import UIKit
import AVFoundationclass CameraViewController: UIViewController,AVCaptureVideoDataOutputSampleBufferDelegate{
//略
}
“`
次に、HandTrackingを実装するためのリクエストクラスのインスタンスを生成する。
“`swift
import Vision
import UIKit
import AVFoundationclass CameraViewController: UIViewController
iOSDC2022 リアルタイムでみたものまとめ
# はじめに
iOSDC2022!!今年もおつかれさまでした!
iOSDCは2019が初参加でしたが初iwillblogです今年もたくさんの素晴らしいセッションがありました
リアルタイムで見れたものをまとめます
徒然なるままに書いているので散文で恐縮ですが、ポエム感覚でお読みください# セッション 【Day0】
## 施策基盤としてのディープリンク 〜なめらかにアプリが開く体験のために〜
– [fortee](https://fortee.jp/iosdc-japan-2022/proposal/6c4615f5-b471-4f78-9044-4ae3f8dd75d4)
– [スライド](https://speakerdeck.com/natmark/iosdc-japan-2022-deeplink)どのアプリでもよく使われるディープリンクを
定義の説明、Firebase DynamicLinksなどの実現手段、
実現するにあたってのtipsまで一気通貫で理解できるセッションでした。
ビジネスサイドにそのまま見せられるくらい、わかりやすくまとまっていて、実際にこの
コマンドラインからiOS実機にアプリをインストールする
前回、コマンドラインでのiOSアプリのビルドについて投稿しました。
https://qiita.com/5enxia/private/ede225f6c57bd5d6906a
今回はさらにコマンドラインからシミュレータと実機へのインストールについても取り組んでみました。シミュレータへのインストールは多くの方がまとめていらっしゃるため、ここでは実機についてのみ書いていきます。
https://qiita.com/tamaki/items/02eb43253193b950b08f
## 実機へのインストール
### 依存関係
実機へインストールるするために`ideviceinstaller`というCLIツールをインストールします“`sh
brew install libimobiledevice
brew install ideviceinstaller
“`https://github.com/libimobiledevice/ideviceinstaller
### 実機のUDIDを取得する
次に実機のudidを取得します。GUIから取得する場合`Finder`や
Apple M1でコマンドラインからx86_64のiOSアプリをビルドする
他メンバーの書いたコードの挙動を確認する際、自分はコードを変更していないけど更新を確認するために毎回XCodeを立ち上げてビルドするのは、ナンセンスだと感じ、コマンドラインからビルドする方法を導入しました。
## はじめに
iOSアプリをビルドする際はXCodeを開くことが多いと思います。XCodeは便利な機能も多いですが、起動がVSCodeといったエディタと比較して起動が遅いです。また、ボタンを押した際などの切り替わりも遅いことがあります。
他メンバーの書いたコードの挙動を確認する際、自分はコードを変更していないけど更新を確認するために毎回XCodeを立ち上げてビルドするのは、ナンセンスだと感じ、コマンドラインからビルドする方法を導入しました。## M1上でのビルド(ワークスペースを用いている場合)
### 利用しているすべてのフレームワークがarm64に対応している場合
“`sh
xcodebuild -workspace-scheme -sdk
# example
xcodebuild -workspace Hoge
【Flutter】Segmented buttons を実装する
## 初めに
Material Design3 の Components には [Segmented buttons](https://m3.material.io/components/segmented-buttons/overview) という項目があります。
しかし、Flutter の Widget には Segmented buttons が用意されていないため、今回はそれを実装してみたいと思います。## 記事の対象者
+ Flutter と Riverpod の基礎理解ができている方
+ アプリ内で Segmented button を実装する方
+ Material Design3 に記載されていた内容をそのまま実装したい方## 準備
今回は [material_segmented_control パッケージ](https://pub.dev/packages/material_segmented_control)を使って Segmented button を実装します。### パッケージの追加
まずは [material_segmented_control
__swift_FORCE_LOAD_$_swiftCompatibilityConcurrencyでハマった
FlutterでFirestoreビルド短縮のため `firestore-ios-sdk-frameworks` を導入したらドハマリしました。
# 解決策
XCodeを最新にしましょう。
今回は
`13.0.0 → 13.4.1`
で解決しました。
__swift_FORCE_LOAD_系のエラーはXCode更新で解決することがある模様。
あとはSwiftサポートが有効になってなくてもなることがあるらしいです。解決の糸口になった記事
https://developers.facebook.com/docs/audience-network/setting-up/platform-setup/ios/add-sdk?locale=ja_JP# 備考
時間返せ
【SwiftUI】Viewコンポーネントの抽象化について考える
# はじめに
[SARAH iOSアプリケーション](https://apps.apple.com/jp/app/id916083595)へのSwiftUI導入が進む中で、Viewコンポーネントの抽象度についてベストプラクティスを考える機会が多々あります。例えばボタンを一つ作るにしても、「背景色は外から自由に指定可能にするべきか?じゃあフォントサイズは?」といった具合に「どこまでやる?」がつきまといます。
そんなViewコンポーネントの抽象化を、SwiftUIの特性を活かしつつ深ぼっていこうと思います。# 今回の題材
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 Foundationstruct 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 UIKitclass ViewController: UIViewController {
private var alert: UIAlertController!
override func viewDidLoad() {
super.viewDidLoad()// バックグラウンド監視
NotificationCenter.default.addObserver(
self,
selector: #selector(background),
name: UIApplication.willEnterForegroundNotification,
object: nil
)