- 1. 【SwiftUI】iOS15から発生するPickerのバグ
- 2. addSubviewしたカスタムビューのUIButtonが押せない時
- 3. SwiftUI4, iOS16以降で使用できる NavigationStackについて軽く調査した
- 4. Swift 画面を強制的に回転させたい!
- 5. TypeScript で デバイスの傾きを検知する
- 6. NSURLErrorDomainの内容
- 7. 【Flutter】カメラの使用許可を得るための設定【iOS】
- 8. SwiftUIで割り勘アプリの作り方を徹底解説!
- 9. FlutterのIOSシュミレーターで設定画面に遷移させる。
- 10. Firebase AuthenticationでのSign in with Appleの削除要件に対するCloud FunctionsとFlutterの実装
- 11. APIKitのエラーを整理する
- 12. FlutterでIOSシュミレーターが作動しない問題。
- 13. 【SwiftUI】モディファイアを条件によって変える
- 14. WWDCのセッションビデオ一覧表の作り方
- 15. 【SwiftUI】入力値チェック
- 16. 【UIKit】画面遷移の方法
- 17. Swift UIで燃費計算アプリを作ってみた!
- 18. Yolov5を独自のデータでトレーニングする
- 19. flutter で iosの実機テストをするまで
- 20. 【SwiftUI】Listをカスタマイズ
【SwiftUI】iOS15から発生するPickerのバグ
# はじめに
iOS14では機能していたコードがiOS15で突然挙動がおかしくなるバグに遭遇しました。
解決方法が分かる方はコメントください。# 条件
– iOS15
– スタイルが`wheel`# 仕様?バグ?
まず前提として、なぜか`Picker`スタイルが`wheel`だと`frame`だけでサイズ変更する事ができません。
`clipped()`を追加する必要があります。
“`diff_swift
import SwiftUIstruct ContentView: View {
@State var index: Int = 0
var body: some View {
Picker(“”, selection: $index) {
ForEach(0..<5) { i in Text("選択肢\(i + 1)") } } .labelsHidden() .pickerStyle(.wheel)
addSubviewしたカスタムビューのUIButtonが押せない時
# はじめに
xibでカスタムビューを作成し、viewControllerでaddSubviewしたのですが、カスタムビュー内のUIButtonをタップしても反応してくれなかったので対処法をメモ
# 原因
カスタムビューのサイズ指定をviewControllerではなくカスタムビューで行っていました。
“`CustomView.swift
final class CustomView: UIView {@IBOutlet private weak var button: UIButton!
init() {
let view = UINib(nibName: “UpperSearchView”, bundle: nil).instantiate(withOwner: self, options: nil).first as! UIView
view.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 50) //カスタムビューでサイズ指定
ad
SwiftUI4, iOS16以降で使用できる NavigationStackについて軽く調査した
## まえがき
WWDC2022にてNavigationStackが新しく発表されました。
iOS16からNavigationViewはdeprecatedで、NavigationStackを使わないといけないです。SwiftUIは画面遷移周りがよくない・・・・!と、
SwiftUIを実戦投入していても、画面遷移まわりはUIKitを使用しているという話をチラホラききますし、
私が参画している現場においても画面遷移はUIKitで書いてます。NavigationStackをどんなものか気になっていたので、軽く調査してみました。
## Case 1, NavigationStackとNavigationLinkのみを使って遷移
NavigationStackの中にNavigationLinkを配置して遷移するだけ。
NavigationStackをdeprecatedされたNavigationViewのようです。“` swift
struct NavigationStackSample1: View {
let parkList: [Park] = [.init(
Swift 画面を強制的に回転させたい!
回転のコードはこれ!
“`swift
override func viewDidLoad() {
//右か左か判定
if(UIDevice.current.orientation.rawValue == 4){
UIDevice.current.setValue(4, forKey: “orientation”)
}
//左横画面以外の処理
else {
//最初の画面呼び出しで画面を右横画面に変更させる。
UIDevice.current.setValue(3, forKey: “orientation”)
}
}//MARK: 回転設定
override var shouldAutorotate: Bool {
return true
}
//MARK: 横画面のみ許可
override var supportedInterfaceOrie
TypeScript で デバイスの傾きを検知する
## 目的
– ios でもデバイスの傾きを検知したい。
– TypeScript で書きたい。## ソースコード
“`typescript
const permitOrientation = async () => {
if (typeof (DeviceMotionEvent) !== “undefined” && typeof (DeviceOrientationEvent as any).requestPermission === ‘function’) {
//ios ブラウザでアクセスを求める
const res = await (DeviceOrientationEvent as any).requestPermission()
if (res !== “granted”) {
return //許可しない場合、イベントリスナー起動できない。
}
}
/**
* 傾き検知時に起動
*/
window.
NSURLErrorDomainの内容
[NSURLErrorDomainのコード一覧](https://qiita.com/temoki/items/aaf96408de14cb40b704)、参考になったのですが、それぞれどういった内容なのかも知りたくなり、説明を見つけたので残しておく。
→ [URL Loading System Error Codes](https://developer.apple.com/documentation/foundation/1508628-url_loading_system_error_codes)
故意的に、これらのエラーを発生させる方法も知っておきたいが、50コもあるので一旦保留。[参考][NSURLErrorDomainのコード一覧](https://qiita.com/temoki/items/aaf96408de14cb40b704)
【Flutter】カメラの使用許可を得るための設定【iOS】
# Runner.xcodeprojファイルの設定をする
簡単にできたのでメモ程度です。## 設定を行いたいFlutterアプリのファイルを開きRunner.xcodeprojを開く
パスはおよそこんな感じかと思います
/Users/ユーザー名/StudioProjects/アプリ名/ios### Runner.xcodeprojはこの青いファイル
![スクリーンショット 2022-07-05 12.12.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2030574/9273c4aa-5161-919a-9128-bbfc75504d1a.png)## RunnerディレクトリのInfoを開く
開いてみるとこんな感じになるかと思います。
![スクリーンショット 2022-07-05 12.06.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2728559/edaae867-2a55-d753-
SwiftUIで割り勘アプリの作り方を徹底解説!
SwiftUIを学んでいく過程でポートフォリオがてら作成した「**割り勘アプリ**」の作成手順と方法をまとめていきます。
初心者の方でも同じものが作れるように解説できたらなと考えています。
拙い点や至らぬ点も多いと思いますがよろしくお願いいたします。
# 今回作っていくアプリ
:::note
割り勘アプリ
:::● 機能
+ 金額を入力して蓄積していく
+ 割り勘にする人数を指定
+ トータル金額 ÷ 人数 = 一人当たりの金額***
● 環境
+ SwiftUI***
● 作成(編集)するページ
+ ContentView(入力ビュー)
+ CalcBill(計算ビュー)
+ FileController(ファイル操作クラス)***
● 作成していくポイント
+ ユーザーが金額を入力できるようにする
+ 入力された金額を蓄積
+ 蓄積した金額のリセット
+ 割り勘する人数の指定## 新規プロジェクトの立ち上げ
今回はSwiftUIを使ってiOSアプリを作成していきます。必要になってくるのは**XCode**のみです。
[Xcodeのインストー
FlutterのIOSシュミレーターで設定画面に遷移させる。
最終的にはアプリ内からIOS設定画面に遷移できれば良いので。
![スクリーンショット 2022-07-06 12.16.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1134006/da0a4f2b-3643-bab5-72d5-5cbd877fdcba.png)
まずは、[permission_handler](https://pub.dev/packages/permission_handler)を`dependencies`の中に最新版を書きます。
“`pubspec.yaml
dependencies:
permission_handler: ^XX.X.X <-latest ``` `flutter pub get`する前に下記2行を`Info.plist`内に追記と↓ `PermissionGroupNotification
通知をするため `
“`ios/Runner/Info.plist
~省略~
Firebase AuthenticationでのSign in with Appleの削除要件に対するCloud FunctionsとFlutterの実装
こんにちは。[virapture株式会社](https://virapture.com)でCEOしながら[ラグナロク株式会社](https://ragna-rock.com)でもCKOとして働いている[もぐめっと](https://mogmet.com)です。
![IMB_I6Cq1q.GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/87b7c585-c4c4-1e04-42b5-337089d9e511.gif)
趣味はスノボです。まだまだ初心者ですが最近ルックバックかっこインディーという新しい技ができました。あまりにも嬉しかったのでつい動画にしてしまいました。本日は**Sign in with Apple**を用いているときに、アカウント削除機能を実装しないとレビューが通らなくなるようになってしまったので、Firebaseを使ったプロジェクトでどう実装すればいいかの共有をします。
https://developer.apple.com/jp/news/?id=12m75xbj
#
APIKitのエラーを整理する
[APIKit](https://github.com/ishkawa/APIKit)ではどのようなエラーが定義されていて、それらがどういうときにスローされるかを整理します。
APIKitでAPIClientを実装するときに、エラーハンドリング周りをどう実装するかを考える際の参考になるかと思います。
# 前提とサンプルコード
APIKitが提供しているデフォルトの実装、つまりURLSessionAdapterを使用することを前提としています。本記事執筆時点では、APIKitでは以下3つのエラーを定義しています。
– RequestError
– ResponseError
– SessionTaskErrorHTTP通信処理の起点となる`send(_:callbackQueue:handler:)`メソッドを実行してエラーになると、`handler`にはSessionTaskErrorが渡されます。なのでRequestErrorとResponseErrorはSessionTaskErrorに内包される形になります。
エラーのパターンを整理すると、こんな感じの
FlutterでIOSシュミレーターが作動しない問題。
久々に修正しようとflutterを立ち上げてiosシュミレーターを開こうとしたら、デバッグコンソールに下記エラーが出て立ち上がらなくなっていました。
“`
Running “flutter pub get” in hogehoge…
The current Dart SDK version is 2.17.0-182.0.dev.Because flutter_hooks 0.18.5+1 requires SDK version >=2.17.0 <3.0.0 and no versions of flutter_hooks match >0.18.5+1 <0.19.0, flutter_hooks ^0.18.5+1 is forbidden. So, because hoge depends on flutter_hooks ^0.18.5+1, version solving failed. pub get failed (1; So, because hoge depends on flutter_hooks ^0.18.5+1, version solving
【SwiftUI】モディファイアを条件によって変える
# はじめに
今回作成するサンプルはindexが3の倍数の場合にpaddingを付けるというものです。
いい案が思いつかなかったので、サンプルとしてはわかりにくいかも知れないです笑
完成形はこのような形になります。
![simulator_screenshot_606CF1B6-853E-400A-A0E9-684FC1AD1D5F.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/bf77a33d-5135-04f5-70df-b79683d393b4.png)# やり方
Viewを拡張してif文で条件分岐します。
“`swift
import SwiftUIstruct ContentView: View {
var body: some View {
List {
ForEach(0..<30) { index in Text("テキスト \(index)")
WWDCのセッションビデオ一覧表の作り方
こちら [[WWDC22]セッションビデオ一覧 – Qiita](https://qiita.com/YokohamaHori/items/a67dcc89463ea9e7bcb0) でWWDC22のセッションビデオの一覧表をMarkdown形式で作成した手順になります。
もっとスマートな方法をとりたかったのですが、あまり時間をかけたくなかったので、最短の調査で完成する方法にしました。(やっつけ仕事なので、後で思い出せるようにメモしておきます)
# やりたいこと
WWDCのセッションビデオを曜日ごとに一覧表示したい。
## フォーマット
“`swift
# Tuesday| 項番 | タイトル(URLリンク付き) | メモ |
| — | — | — |
| 1 | [Add accessibility to your Unity games](https://developer.apple.com/videos/play/wwdc2022/10151/) |
“`## WWDCのセッション一覧
[Sessions – WWDC22 – Appl
【SwiftUI】入力値チェック
# はじめに
入力フォームに値が入力された時にボタンをクリックできる実装について説明していきます。
それに加え、ボタンの色を変化させる方法について初めて知ったのでメモとして残しておきます!
テキストフォーム、ボタンの作成方法についてはここでは説明しませんので悪しからず。# 環境
Xcode 13.4.1
Swift 5.6.1
MacOS 12.4# 入力値チェック
## 書き方
“` swift:
.disabled(変数名.isEmpty)
“`
`.isEmpty`により文字列が空かどうかをbool値として扱う。
この値がtrueならばクリック不可となり、falseならばクリック可能となる。## ボタンの色を変える
三項演算子を用いることでif文のように処理を分けることが可能である。
これによりViewの挙動を容易に変化できる。`bool値 ? trueの場合 : falseの場合`
入力フィールドに文字列が書かれていない時、ボタンの背景色はグレーで文字の色は黒。文字が入力された時、背景色は青色で文字の色は白になるようにする。
“`swift
.
【UIKit】画面遷移の方法
# StoryBoardで遷移
Controlを押しながらButtonをViewControllerにドラッグします。
![スクリーンショット 2022-07-04 19.47.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/565859a0-9ec4-33d8-c1ac-f57d0a542b7d.png)
Action Segueの中から遷移方法を選択します
![スクリーンショット 2022-07-04 19.47.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/e586f636-b928-0c18-fdff-08adb73bb5dd.png)# コードで遷移
「Cocoa Touch Class」を選択して「Next」を押します。
![スクリーンショット 2022-07-04 20.19.33.png](https://qiita-image-store.s3.ap-nor
Swift UIで燃費計算アプリを作ってみた!
SwiftUIを学び始めて1ヶ月くらいたったので勉強がてらアプリを作ってみることにしました。
作成した流れと学習できたポイントなどをまとめていきたいと思います。
Swift学習や「SwiftUIでアプリ開発する時ってこんな感じなんだなぁ」と思ってもらえると幸いです。
# アプリの概要
:::note info
燃費計算アプリ
:::![9E2A9659-F96B-4450-B19D-46587704343E.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2264957/3bf4d5d2-b739-36a1-c13c-366b1dd952f3.png)
機能
+ 走行距離と給油量を入れると燃費を表示
:::note info
式:走行距離(km) ÷ 給油量(ℓ) = 燃費(km/ℓ)
:::+ 距離と燃費、ガソリン単価を入れると必要な料金を表示
:::note info
式:走行距離(km) ÷ 燃費(km/ℓ) × 単価(円) = 料金(円)
:::以上2つの機
Yolov5を独自のデータでトレーニングする
# 独自の物体検出モデルがほしい
![スクリーンショット 2022-07-03 13.56.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/9259ee0a-303d-ed25-f115-dff16e94aa5e.png)
# 物体検出モデルYolov5をかんたんにトレーニングできる
自分で用意したデータを学習させることで、好きな物体を検出できます。# 手順
### データを用意する
データは
**・画像
・画像に対応するアノテーション・テキスト・ファイル**を画像フォルダとテキスト・フォルダに分けて、同じ名前で用意します。
例えば、image1.jpgに対応するimage1.txtというアノテーション・テキスト・ファイルを作ります。アノテーション・テキスト・ファイルには、オブジェクトごとに1行ずつ、以下を記述します。
“`
class x_center y_center width height
“`ボックス座標は、正規化されたxywh形式(0〜1)で
flutter で iosの実機テストをするまで
## 実機テストの手順
“`shell
$ flutter clean$ flutter build ios
“`次のコマンドで利用可能なデバイス一覧を確認する。
“`shell
$ flutter devicesiPhone 13 Pro (mobile) • A15A87AB-EE19-477A-8823-1371F4FF61D4 • ios • iOS 15.5 19F77
macOS (desktop) • macos • darwin-x64 • macOS 12.4 21F79 darwin-x64
Chrome (web) • chrome • web-javascript • Google Chrome 102.0.5005.115
“`ここで、`A15A87AB-EE19-477A-8823-1371F4FF61D4`が実機テスト可能なiphoneのデバイスIDとなる。
次のコマンドを実行することで実機にイ
【SwiftUI】Listをカスタマイズ
# はじめに
SwiftUIでTableViewと同じような見た目を作成するにはListを使用する必要があります。
しかし、Listでは変更できない項目が多く存在します。
おそらくListはUITableViewで作成されているので、UITableViewの設定が反映されます。それを使用して、公式のAPIでは提供されていない機能を実装します
# 背景色を変更
“`swift
import SwiftUIstruct ContentView: View {
init() {
UITableView.appearance().backgroundColor = .red
}
var body: some View {
List {
ForEach(0..<10) { _ in Text("テキスト") } } .listStyle(.grouped) } } ``` # 区切り線の色を変更 ```swi