- 1. 【Flutter】import するパッケージが多くなった時の対処法
- 2. [Flutter]BLoC 7.0系から8.0系の破壊的変更に対応した話(mapEventToState廃止)
- 3. iOSアプリ起動高速化の全て(起動時間の計測・起動時の処理・高速化のためにすべきこと)
- 4. 【SwiftUI】アラートのバグの回避策
- 5. Xcode14~時代のAppアイコン
- 6. iOS16ベータ版からiOS15に戻す
- 7. 【Swift】Alamofireで簡単にデコードする方法
- 8. 【iOS】UICollectionViewでドラッグ&ドロップを実装する
- 9. FlutterでKintoneにデータを記録してみる
- 10. 【Xcode】一括リネームする方法
- 11. iOS16新機能ロック画面ウィジェットの対応方法
- 12. 【Javascript】PWAでお絵かきアプリを作った時の技術的課題について【Apple Pencil】
- 13. VisionFrameworkを使ったiOSアプリケーション開発(Hand Tracking編)
- 14. iOSDC2022 リアルタイムでみたものまとめ
- 15. コマンドラインからiOS実機にアプリをインストールする
- 16. Apple M1でコマンドラインからx86_64のiOSアプリをビルドする
- 17. 【Flutter】Segmented buttons を実装する
- 18. __swift_FORCE_LOAD_$_swiftCompatibilityConcurrencyでハマった
- 19. 【SwiftUI】Viewコンポーネントの抽象化について考える
- 20. 【SwiftUi】StateObjectとObservedObjectの違い
【Flutter】import するパッケージが多くなった時の対処法
## 初めに
コーディングをしていく中で、一つのファイルでインポートするパッケージやページの数が増えてきてしまいました。
初期に書いたコードの中では、以下のように大量の import 文が並んでいるものもありました。
![スクリーンショット 2022-09-12 16.46.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2609901/72fa0578-f6bc-63e0-e65e-95bea5fc3c52.png)
流石にここまで import 文が並ぶことは無いかもしれませんが、大きなプロジェクトになると大量のページやパッケージを import する機会はあると思うので、今回はその対処法を共有したいと思います。## 記事の対象者
+ ファイル内の大量の import を無くしたい方
+ 大規模なアプリを開発中の方
+ コードを綺麗に保ちたい方## 実装
大量の import 文を無くすためには `export` を使います。
まずは新たに 「 importer.dart 」 というフ
[Flutter]BLoC 7.0系から8.0系の破壊的変更に対応した話(mapEventToState廃止)
## はじめに
私の携わっているプロジェクトではflutter_blocを採用しており、
今回7系から8系にアップデートを行いました。https://pub.dev/packages/flutter_bloc
元々v7.0.0を利用しておりましたが8系で1点破壊的変更が入っており、
対応に関する日本語での記事が少なかった為、今回共有をさせて頂きます。## 破壊的変更点 (mapEventToState廃止)
v7.0.0を利用していた当初、何かしらのEventを発火させた後にBLOCクラス内では`mapEventToState`を用いて各種Eventのハンドリングを行なっておりました。
この`mapEventToState`は**v7.2.0から非推奨**になり**v8.0.0以降は廃止**となるようです。> In bloc v7.2.0, mapEventToState was deprecated in favor of on
. mapEventToState will be removed in bloc v8.0.0.
https://blocli
iOSアプリ起動高速化の全て(起動時間の計測・起動時の処理・高速化のためにすべきこと)
掲題の通りこの記事ではアプリの起動時処理と高速化のためのポイントを詳しく書いていきます。
自社のアプリで起動時間に課題意識を持って、起動高速化に取り組んでいる方も多いのではないでしょうか。
そんな時に少しでも参考になれば幸いです。**時間があまりなく改善策だけサクッとまとめて知りたい方は、文末のまとめを見ていただけるといいと思います。**
# 起動時間を計測しよう
まずは現状を確認するためにアプリの起動時間を計測しましょう。ただ起動時間を確認するだけであれば`Firebase Performance`だったり、Xcodeの`Organizer -> Launch Time`で確認できます。ただやはり起動時間を見直したい場合はもう少し詳しく分析した計測がしたいです。
そんな時はInstrumentsのApp Launchを使用します。
【SwiftUI】アラートのバグの回避策
# はじめに
iOSDCで「[SwiftUIのハマりどころと回避策](https://fortee.jp/iosdc-japan-2022/proposal/41079124-aab4-40a9-b8ee-efdac7ca4e72)」を拝見して自分的にはこうすると思った事があったので記事にしておきます。# アラートのバグ
1つのViewに対して2つのアラートを適用している場合に外側のアラートしか表示されないバグです。
“`swift:iOS14
import SwiftUIstruct ContentView: View {
@State private var isAlert1 = false
@State private var isAlert2 = false
var body: some View {
VStack(alignment: .center, spacing: 30) {
Button(“アラート1”) {
isAlert1 = true
Xcode14~時代のAppアイコン
# AppIconの自動生成
Xcode14に以下の機能が追加されました。[^1] [^2]
> アセットカタログ
> アセットカタログで1024×1024ピクセルのAppアイコンを1つ提供すると、ターゲットに合わせて自動的にサイズ調整されます。|今まで| |これから|
|—|:—:|—|
|All Sizes
|→|Single SizeこれでAppアイコンを1つだけ作成すればOK!。
たくさんのサイズのAppアイコンを作ったり設定する手間が省
iOS16ベータ版からiOS15に戻す
# 実現したいこと
**iOS16のβ版からiOS15の最新版に戻したい。**
(やることとしては通常のOSダウングレードと変わりません。)おそらくiOS17、iOS18でも同様だと思います。
毎年恒例のiPhone新OSリリース前の事前テストをするためにiOS16のβ版をインストールしましたが、諸事情によりiOS15に戻す必要がありました。
(通常であれば別に戻す必要はないので、iOS16の最新版アップデートの案内が来たらアップデートをすれば良いと思います。)前提として、メイン機器をベータ版アップデートはしない方がいいです。
データなど消えてもいいサブ機器で行いましょう。# 出来なかった方法
以下のApple公式サイトに従ってやってみました。https://support.apple.com/ja-jp/HT203282
しかしどうしても
> 2. デバイスをコンピュータに接続して、以下の手順にそって、デバイスをリカバリモードにします。の部分でリカバリーモードに入ることができずに困っていました。
裏技みたいなボタン操作をすれば入れると書いてあるのですが何度やっ
【Swift】Alamofireで簡単にデコードする方法
# はじめに
Alamofireにデコードした結果を返してくれる便利なメソッドがあったので紹介します# サンプルデータ
“`swift
import Foundationstruct SampleModel: Codable {
let id: Int
let idStr, name, screenName, location, description: Stringenum CodingKeys: String, CodingKey {
case id
case idStr = “id_str”
case name
case screenName = “screen_name”
case location
case description
}
}
“`# 実装
“`swift
AF.request(“https://sample.com/”, method: .get, headers: headers).responseDecodab
【iOS】UICollectionViewでドラッグ&ドロップを実装する
# ? ゴール
![uicollection.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468787/7647c1d1-2068-ebc5-f4cd-1349df54a13c.gif)
# ? 仕様
– ドラッグ&ドロップで並び替えができるUICollectionView
– 並び替えをすると配列の更新もされる
– データの入ってるセルでのみドラッグ&ドロップが可能# ✏️ 完成版コード
少し長いですが、まずは完成版のコードです。解説は後述してます ?
“`swift
import UIKitclass ViewController: UIViewController {
// storyboardのUICollectionViewを接続
@IBOutlet weak var collection: UICollectionView!
// UICollectionViewFlowLayoutを使用してcellのレイアウトを制御します
privat
FlutterでKintoneにデータを記録してみる
Flutterのデフォルトのカウンターアプリで増えた数だけKintoneにデータを送って記録してみました。
まずは環境構築からしていきます。FlutterのSDKをインストールしPATHを通したらflutterコマンドを入力できるか確認します。
“`
flutter –versionFlutter 3.3.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 4f9d92fbbd (5 days ago) • 2022-09-06 17:54:53 -0700
Engine • revision 3efdf03e73
Tools • Dart 2.18.0 • DevTools 2.15.0
“`
VSCodeのターミナルから、`command + shift + P`でFlutter: New Projectを選択。
![スクリーンショット 2022-09-12 17.56.44.png](https://qiita-image-store.s3.ap-northea
【Xcode】一括リネームする方法
# はじめに
私はいままでリネームをする際に1つ1つ手動で変えていました。
一括でリネームする方法があると教えていただいたのでやり方を記録しておきます。# 方法
リネームの対象を選択します。
![スクリーンショット 2022-09-13 14.18.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/0db35fa1-b905-d8e4-95ee-da5f44010793.png)右クリックでメニューを表示させます。
「Refactor」の中の「Rename…」を選択します。
![スクリーンショット 2022-09-13 14.31.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/52bdf04a-d57c-ac7f-d234-d6a943d35d56.png)変更が完了したら右上の「Rename」を選択します。
![スクリーンショット 2022-09-13 14.33
iOS16新機能ロック画面ウィジェットの対応方法
起きたらiOS16がリリースされたので、自分のためのロックスクリーンウィジェット作り
## iOS16でようやくロック画面にもウィジェットを配置できるようになった
## ロック画面用のウィジェット3種類が追加された
WidgetFamilyに `.accessoryInline`、`.accessoryCircular`、`.accessoryRectangular` の3種類が追加されています。`.accessoryInline`は上の画像では日付が表示されている部分、
`.accessoryCircular`、`.accessoryRectangular`は時計の下のエリアに配置できるようです。
`.accessoryCircular`はまるく切りに抜かれて1スロット使用、`.accessoryRectang
【Javascript】PWAでお絵かきアプリを作った時の技術的課題について【Apple Pencil】
## 成果物
どんなものを作ったか?を先に見てもらう方が分かりやすいと思うので成果物から先に置いておきます。
– [大人用](https://kurokky.github.io/whiteboard/tablet)(画像を保存できる)
– [こども](https://kurokky.github.io/whiteboard/child)(画像を保存できないシンプル版)作る経緯についてはnoteの[こどものためにスマホ・タブレットで使える「ホワイトボード」を作った話](https://note.com/kurokky/n/ne4260f983498)に記載しています。
qiitaは技術的な課題と解決方法について同不順で記載します。## debugが超絶面倒だった
個人開発について回る問題ですけど。
– iPad(HTML/PWA)
– iPad + **Apple Pencil**(HTML/PWA)
– iPhone(HTML/PWA)
– Android(HTML/PWA/OS違い)
– FireTablet(HTML/PWA)これを1人でチマチマやるのが、面
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