- 1. iOSDC 2022セッション資料まとめ
- 2. iOSDC Japan 2022 day0 前夜祭で視聴したセッションとその感想
- 3. 楽器チューナをiPhoneで作ってみる
- 4. Swift Playgrounds App
- 5. 【Flutter】tutorial_coach_mark の使い方
- 6. 【Swift】コードでアラートを閉じる
- 7. 【Xcode】正規表現を使用して一括置換
- 8. [Fllutter]iOSエミュレーターで実行できなくなった
- 9. FlutterでiOSのselectionHandleColorを設定する方法
- 10. Swift Playgrounds のアプリに plist ファイルを適応して機能を追加する
- 11. App Groups で共有したファイルを監視してプロセス間の変更を Combine で検知する
- 12. 【Swift】文字列を比較する
- 13. 【Flutter】検索機能の実装方法
- 14. NewsPicksっぽい遷移アニメーションの実装方法
- 15. LazyVGridとかLazyVStackのカラムにアニメーションをつける時の注意点
- 16. 【Unity】顔だけVTuberになるARアプリを作った【実装編】
- 17. 【Swift】アプリがバックグラウンドからフォアグラウンドに切り替わった事を検知する
- 18. iOSアプリリリース時、Guideline 4.3 – Designでリジェクト
- 19. コピペでFlutterサンプル その6
- 20. コピペでFlutterサンプル その5
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
)
【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`で変更することができず、つまずいたので方法を紹介します。## 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`は数字以外も比較できます。なぜ数字以外が比較できるのでしょうか
どのようなルールで比較してるのでしょうかこれは文字列の順序が上か下か同じかを判定しているものであると思います。
よって、数字とひらがなであっても比較できます。
“`
数字 < アルファベット(大) < アルファベット(小) < ひらがな
【Flutter】検索機能の実装方法
## 初めに
この記事ではコンテンツを検索する際の簡単な検索機能を実装します。
検索機能はSNSなどをはじめ、様々なアプリに実装されており、自身で実装する機会もあるかと思います。ここでその実装方法を学習しましょう!## 記事の対象者
+ アプリに検索機能を実装したい方
+ TextField の活用方法を学びたい方
+ Riverpod を用いた動的な機能の実装方法を学びたい方## 完成イメージ
![search_example.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2609901/fcf8b9c3-a31e-d037-c103-a5d258f2d7e0.gif)
上のように、検索している時としていない時で AppBar のアイコンや ListView の表示する項目を変更しています。
また、 ListView のタイルを押すと次のページへ遷移するようにしています。## 全体コード
全体のコードは以下の通りです。“`dart: search_page.dart
import
NewsPicksっぽい遷移アニメーションの実装方法
このモーダル遷移アニメーションを実装してみました。
![Videotogif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662300/db256da5-343f-91f9-a624-b9b029f24737.gif)作ったのがこれです。(ごちゃごちゃしてる方が動きが見えやすかったのでwebViewで表示してます。)
![Videotogif (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662300/996ce2d5-e9a7-8ec2-3607-503642224150.gif)中身としてはCATransitonを使用して、
“`swift
func transitonAnimation() {
let transition = CATransition()
transition.duration = 0.4
transition.typ
LazyVGridとかLazyVStackのカラムにアニメーションをつける時の注意点
## はじめに
最近はSwiftUIを触る機会が多いのですが、Table形式やCollection形式のViewを作るときは、Lazy〇〇を使うようにしています。
そんなこんなやっていた時に、LazyVGridをスクロールした時にバグが発生する問題に直面し、若干ハマったので解決方法を記事にしてみました。
ちなみにですが、iOS15のみ対応のアプリだと`warning`が出るので、このバグに直面することは少ないんじゃないかと思います!## バグの正体
スクロールした時にセルの描画が遅れたような感じになってしまいます。
![バグ.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580445/718783e7-5013-93f4-e4d1-72a0947a1960.gif)
この時のコードは下記です。
このViewでは、各Cellをタップした時に、青からオレンジに背景色を変えるところをアニメーションにしています。“`swift
import SwiftUIstruct ContentView: V
【Unity】顔だけVTuberになるARアプリを作った【実装編】
こんにちはっ?八ツ橋まろんです
iPhoneの顔認識の機能を使った **顔だけVTuberになるiPhoneアプリ『Virtual Face』を作りました**
この記事では、内部の動作と実装について書いていきます。
動作デモ↓↓
自作のVtuberアプリ「Virtual Face』がリリースされました?
現実に顕現するの超楽しい‼️❣️
パーフェクトシンク対応のアバターをお持ちの方❗️ぜひ遊んでみてください✨ https://t.co/qLn10Lu7lQ pic.twitter.com/WQ6hjbpzyS
— 八ツ橋まろん?Unityが上手なVtuber (@Maron_Vtuber) August 30, 2022
# 0. 初回起動時のチュートリアル
アプリを最初に起動したときに出てくる使い方画面。どんなアプリでも実装されていますが、Unityで開発するときは、PlayerPrefesを使うことで簡単に作成できました。
PlayerPrefesを使えば、int, float, stringの簡単な変数なら簡単に保存したり、呼び出したりできます。
“`csharp:
public GameObject tutorial;// PlayerPrefesに”Tutorial”という名前でデータが保存されているか確認し、
//データ内容が1ならチュートリアルをスキップする
voi
【Swift】アプリがバックグラウンドからフォアグラウンドに切り替わった事を検知する
# はじめに
フォアグラウンドになった事を判定することがあったので記事に残しておきます。# 実装
“`swift
import UIKitclass ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()NotificationCenter.default.addObserver(
self,
selector: #selector(foreground),
name: UIApplication.willEnterForegroundNotification,
object: nil
)}
@objc func foreground() {
print(“フォアグラウンド”)
}
}
“`# おわり
`NotificationCenter`を有効活
iOSアプリリリース時、Guideline 4.3 – Designでリジェクト
# 概要
先日iOSアプリをリリースしようとした際、`Guideline 4.3 – Design`でリジェクトされたので、その時にやった事のまとめ。# 大まかな流れ
AppStoreにアプリ提出(1回目)
↓
`Guideline 4.3 – Design`でリジェクト
↓
修正を加えて再提出(2回目)
↓
`Guideline 4.3 – Design`でリジェクト
↓
修正を加えて再提出(3回目)
↓
`Guideline 4.3 – Design`でリジェクト
↓
同じ機能セットを持つアプリはどれなのか質問
↓
`Guideline 4.3 – Design`でリジェクトはされず(これとは関係ない他の箇所を指摘された)
↓
指摘された箇所を修正し提出(4回目)
↓
無事リリース# リジェクト内容
Google翻訳したものを掲載。“`
ガイドライン 4.3 – 設計あなたのアプリは、App Store に提出された他のアプリと同じ機能セットを提供していることに気付きました。 内容や言語が異なるだけで、スパムの一種と見なされます。
このアプリの次回の提出には審
コピペでFlutterサンプル その6
[前の記事 コピペでFlutterサンプル その5](https://qiita.com/netineti512/items/33655116850741105099)
[参考](https://docs.flutter.dev/cookbook/effects/parallax-scrolling)
“`sample.dart
import ‘package:flutter/material.dart’;
import ‘package:flutter/rendering.dart’;const Color darkBlue = Color.fromARGB(255, 18, 32, 47);
void main() {
runApp(const MyApp());
}class MyApp extends StatelessWidget {
const MyApp({super.key});@override
Widget build(BuildContext context) {
return MaterialApp(
the
コピペでFlutterサンプル その5
[前の記事 コピペでFlutterサンプル その4](https://qiita.com/netineti512/items/432f7b7856f452c886e9)
[参考](https://docs.flutter.dev/cookbook/effects/photo-filter-carousel)
“`sample.dart
import ‘dart:math’ as math;import ‘package:flutter/material.dart’;
import ‘package:flutter/rendering.dart’ show ViewportOffset;void main() {
runApp(
const MaterialApp(
home: ExampleInstagramFilterSelection(),
debugShowCheckedModeBanner: false,
),
);
}@immutable
class ExampleInstagramFilterSelection