- 1. Yolov5を独自のデータでトレーニングする
- 2. flutter で iosの実機テストをするまで
- 3. 【SwiftUI】Listをカスタマイズ
- 4. クラウド上で実機スマホをレンタルできるRemote TestKitを触ってみた
- 5. Codableで複数の型を取りうる配列を持つJSONに対応する
- 6. Swift Codableの公式解説をちょっと補足
- 7. SwiftのComputed PropertiesはFunction内でも宣言できる
- 8. Swiftで[String: Any]型の等価性チェックをする
- 9. iOS Simulatorが起動しない時の対処法
- 10. 【Android Java】いまさら聞けないActivityとは?
- 11. 【Xcode】コードスニペットについて
- 12. collectionViewのFallbackでクラッシュ
- 13. [Swift] structのMemberwise Initializerを残しつつカスタムのInitializerも実装する方法
- 14. クラウド上のスマホ?!RemoteTestKitを実際に使って見た!【RemoteTestKit】
- 15. 【Swift】アプリのバージョン情報を表示
- 16. 【SwiftUI】TimelineViewを使ってデジタル時計を作る
- 17. 【React Native】Expo製のiOSアプリでService Workerを使う
- 18. Apple キャンペーンリンクの作り方
- 19. Bitriseのビルド環境に事前にインストールされているものが何かを知る方法
- 20. [Swift] 一度だけ変更可能なプロパティを実装する方法
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
クラウド上で実機スマホをレンタルできるRemote TestKitを触ってみた
この記事は、Qiita Engineer Festa 2022 [Remote TestKitを使ってレビューを書こう!](https://qiita.com/official-events/f0e8b25feb05af6326b3)の参加記事です。
https://qiita.com/official-events/f0e8b25feb05af6326b3
## はじめに
クラウド上で実機のスマートフォンをレンタルできるサービスがあると知って、面白そうだったので触ってみました。
また、Androidのスマホは多種多様なものが多く、Webの開発でも実際にどう見えてるのかを検証してみたいときに便利かもと思い、触ってみました。なお、僕はネイティブアプリの開発経験はないので、Web開発の面での内容になります。
## 概要
公式の紹介動画が概要としては非常にわかりやすいです。
要約すると、クラウド上で実機のスマホをレンタルでき、今まで手元の実機で行っていた検証をクラウド上で行えるようになるというものです。
Codableで複数の型を取りうる配列を持つJSONに対応する
とあるAPIのレスポンスをデコードする処理を書いていて、以下のように配列の中の型が複数あるケースに対応する必要がありました。
“`json
{
“products”: [
{
“id”: 1,
“type”: “FOO”,
“foo”: “foofoo”,
“bar”: “barbar”
},
{
“id”: 2,
“type”: “BAZ”,
“baz”: “bazbaz”,
“qux”: “quxqux”
}
],
“next”: “xxxxxxx”
}
“``id`と`type`のように、一部共通のプロパティも持っていて、これらを抽象的な型でまとめて表現したいというモチベーションもありました。
参考になる(というかほぼそのまま使える)コードをStackOverflowで見つけてなんとか実現
Swift Codableの公式解説をちょっと補足
Codableについての公式の解説記事はこちらですが、JSONの具体例がなかったり読んでるだけだと若干わかりづらいところがあったので、自分なりに補足をつけてみたいと思います。主にCodingKeys周りを見ていきます。
https://developer.apple.com/documentation/foundation/archives_and_serialization/encoding_and_decoding_custom_types
# 具体的なJSONで理解する
解説記事のコードをまとめるとこんな感じです。デコード部分に絞ってます。“`swift
struct Coordinate {
var latitude: Double
var longitude: Double
var elevation: Doubleenum CodingKeys: String, CodingKey {
case latitude
case longitude
case addition
SwiftのComputed PropertiesはFunction内でも宣言できる
SwiftのComputed PropertiesはFunction内でも宣言できます。
“`swift
struct State {
var foo = “foo”
}var state = State()
func testComputedProp() {
var result: Bool { // ここにComputed Propertiesが宣言できる!
someLogic(str: state.foo)
}
print(result)
state.foo = “bar”
print(result)
}func someLogic(str: String) -> Bool {
return str == “bar”
}testComputedProp()
// 以下の順で出力される
// false
// true
“`限定的な具体例になっちゃいますが、、
TCAのReducerを実装してるときに、同じデータ取得のコードをあちこちに書いていました。“`swi
Swiftで[String: Any]型の等価性チェックをする
Swiftで以下のコードはコンパイルエラーになります。
Any型がEquatableに準拠していないというのが理由です。“`swift
let dict1: [String: Any] = [“foo”: “bar”]
let dict2: [String: Any] = [“foo”: “bar”]
print(dict1 == dict2) // Protocol ‘Any’ as a type cannot conform to ‘Equatable’
“`そこで、以下のように[String: Any]をNSDictionaryにキャストして比較します。
こうするとコンパイルすることができ、結果は`true`になります。“`swift
let dict1: [String: Any] = [“foo”: “bar”]
let dict2: [String: Any] = [“foo”: “bar”]
print(dict1 as NSDictionary == dict2 as NSDictionary) // true
“`
iOS Simulatorが起動しない時の対処法
最近、Flutterアプリの実行をする際に溜まったキャッシュなどでiOS Simulatorが起動しなくなることが頻発したので、その対処法を残します!
まだまだ浅学で少し誤った情報があるかもしれないので、その点を考慮して読み進めてもらえると幸いです?# 対処法
以下の手順で試していくと、解決します!
手順を試す→iOS Simulatorの動作確認、の流れで動作確認失敗した時に
以下の手順を進めていきましょう?
1. iOS Simulator関連の削除
1. coreSimulator/casheの削除
1. DerivedDataの削除
1. iOS DeviceSupportの削除
1. Library/Cachesの削除## 1. iOS Simulator関連の削除
iOS Simulatorの表面的なキャッシュを削除します。
“`zsh
# シミュレーターの一覧表示
xcrun simctl list devices# 使えないシミュレーターを削除
xcrun simctl delete unavailable# キャッシュの削除
xcrun –kill
【Android Java】いまさら聞けないActivityとは?
## はじめに
Android Javaって何?という初学者向けの記事になります。
アンドロイド特有の`Activity`についての内容です。仕事でAndroid Javaを使って修正、開発をしています。
業務に携わってから約半年が経ちました。Android Javaを使うにあたって、学んだことをアプトプットしようと思い記事にしました。
エンジニアになって1年の未熟者なので暖かい目で見ていただけると助かります。
## あなたは誰?
> 現職:SESエンジニア(歴1年)
前職:営業
年齢:27歳
使用言語:Java, Android Java, C++
工程:テスト、実装(設計もやってみたい…)
好きなこと:サウナ/登山/ダーツ/ピアノ/酒/運動全般
もくもく会主催:[新宿もくもく会](https://shinjuku-realize0707.connpass.com/)## Acyivityとは
簡単に言うと`Activity`とは、スマホでいう**一つの画面全体**のことを言います。
【Xcode】コードスニペットについて# はじめに
コードスニペットとは?
正確かはわかりませんが私の認識では、「何度も使うコードを定型文として登録する」みたいな感じで思っています。今回はSwiftUIでダークモードを検知する事ができるコードを登録します
`@Environment(\.colorScheme) var colorScheme`これ毎回忘れて必ずググっちゃうんです笑
# やり方
登録したいコードを選択します。
![スクリーンショット 2022-07-02 16.45.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/a0947b81-5fae-9cfa-c2da-75e86f310cd7.png)選択したコードの上で右クリックします。
「Create Code Snippet」を選択します。
![スクリーンショット 2022-07-02 16.47.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745
collectionViewのFallbackでクラッシュ
# きっかけ
tableViewで
“`tableViewController.swift
if hoge {
return UITableViewCell()
}
“`
このようにFallbackしていて、同様にcollectionViewにも
“`collectionViewController.swift
if hoge {
return UICollectionViewCell()
}
“`
としていたらクラッシュしてしまった。【クラッシュログ】
“`
Terminating app due to uncaught exception ‘NSInternalInconsistencyException’, reason: ‘the cell returned from
– collectionView:cellForItemAtIndexPath: does not have a reuseIdentifier
– cells must be retrieved by calling
– dequeueReusableCellWithReuseId
[Swift] structのMemberwise Initializerを残しつつカスタムのInitializerも実装する方法
Swiftの構造体(struct)は**Initializerを一つも実装しない場合**にMemberwise Initializerと呼ばれるInitializerが自動で生成されます。
> Structure types automatically receive a memberwise initializer if they don’t define any of their own custom initializers.
https://docs.swift.org/swift-book/LanguageGuide/Initialization.html
例えば、以下のUser型にInitializerは定義されていませんが、コンパイラが自動でMemberwise Initializerを与えてくれます。
“`swift
struct User {
let firstName: String
let lastName: String
}
“`よってこのような初期化が可能です。
“`swift
クラウド上のスマホ?!RemoteTestKitを実際に使って見た!【RemoteTestKit】
# はじめに
開発中のアプリを動かす時「こっちのデバイスだとレイアウトが崩れた」
「iOSだとここの処理がうまく動かない」
「最新のスマホではどうなるんだろう」なんてことありますよね。
しかしそのためにわざわざ実機を用意するのは大変だと思います。
そこで、この問題を解決するサービスが「RemoteToolKit」と言うサービスです。# 概要
「RemoteTestKit」は簡単に言うと、クラウド上のスマホやタブレットを借りれるサービスです。なんと、利用可能な端末はなんと1132件もありました!(2022 7月1日現在)
ラインナップはAndroid 2.3.3などの古いOSから最新のAndroid 13まで幅広くあります。
下のリンクから利用可能な端末を一覧で見れるので是非見てみてください~~https://appkitbox.com/testkit/devicelist/
# 使い方
RemoteTestKitにはWeb版と、ソフトウェア版があります。
ソフトウェア版のほうが圧倒的に便利なので、ソフトウェア版の利用をオススメします!
このソフトはWindow
【Swift】アプリのバージョン情報を表示
# はじめに
アプリ内でこのような表示を見たことはありませんか?
![IMG_0579.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/2b9c3adb-a88c-04ea-e81e-96f0a555e093.jpeg)
これはXcodeで設定できるIdentityのVersionとBuildで構成されているアプリのバージョン情報です。
![スクリーンショット 2022-07-01 15.16.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/3539297f-cb5c-83ce-1d35-bb4caf84721f.png)バージョンの設定をどのように取得するのでしょうか
今回はやり方を紹介します
# 方法
## Version
“`swift
var version: String {
guard let version = Bundle.main.object(for
【SwiftUI】TimelineViewを使ってデジタル時計を作る
# はじめに
iOS15から`TimelineView`というものが登場していたらしいです
コンポーネント一覧を見ていたら発見しました笑
気になったので`TimelineView`を使用して簡単なアプリを作成しようと思います。# 完成形
![Videotogif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/257b146a-ef0d-f222-e6ed-69b67fab5b3f.gif)# 完成コード
“`swift
import SwiftUIstruct ContentView: View {
var body: some View {
GeometryReader { geo in
ZStack(alignment: .center) {
Color(red: 132/255, green: 209/255, blue: 78/255).edgesIgnoringSafeArea(.al
【React Native】Expo製のiOSアプリでService Workerを使う
以前開発していたExpo製のアプリでService Workerを使用することになったのですが、Androidでは問題なく動作するのに対して、iOSではService Workerが動作せずハマりました。
というのも、iOSのWKWebViewではデフォルトでService Workerが使用できないようになっているためでした。
わかってしまえば簡単ですが、WKWebViewでService Workerを使用するための設定や手順で躓いた点をまとめました。# iOSにおけるWebView
大前提として、iOSのWebViewにはWKWebViewとSFSafariViewControllerがあり、Service Workerを使用できるバージョンやカスタマイズできるポイントが異なります(UIWebViewは非推奨なので除外してます)。|| WKWebView | SFSafariViewController |
|:-:|:-:|:-:|
|Service Worker|iOS 14.0から使用可能|iOS 11.3から使用可能|
|見た目のカスタマイズ|自由にカスタマイズ可
Apple キャンペーンリンクの作り方
### これは
本業でキャンペーンリンクについて調べたので、備忘録を兼ねてまとめます。キャンペーンリンクとはアプリまでのURLに任意のパラメータを付与したもので、
そのパラメータごとのダウンロード数を見ることができます。基本的にこちらを参考にしてますが、少しわかりづらいところもあるので、下に詳しく書きます。
[キャンペーンリンクとは](https://developer.apple.com/jp/app-store/measuring-app-performance/)
[キャンペーンリンクの作り方](https://help.apple.com/app-store-connect/?lang=ja#/itcfa7936330)### 実際の作り方
1.App Store Connectにログインして、”Appアナリティクス”を選択します。
![スクリーンショット 2022-06-30 17.09.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/393442/cd5a460a-
Bitriseのビルド環境に事前にインストールされているものが何かを知る方法
Bitriseのビルド環境(Stackと呼ぶ)では、HomebrewやCocoaPods、Bundlerなど、iOSアプリをビルドするために必要なツールが事前にインストールされています。
ただ、これらのツールのバージョンがいくつなのか、他にどんなツールがインストールされているかを知りたいことがあります。実は、以下のリポジトリにStackに関する情報がまとまっています。
https://github.com/bitrise-io/bitrise.io
例えば、現在の最新版であるXcode13.4のStackの情報はこちらです。
https://github.com/bitrise-io/bitrise.io/blob/master/system_reports/osx-xcode-13.4.x.log
Homebrewのバージョンは`3.4.11`であることがわかります。
![Cursor_と_https___raw_githubusercontent_com_bitrise-io_bitrise_io_master_system_reports_GEN
[Swift] 一度だけ変更可能なプロパティを実装する方法
初期値はnilで、その後1回値を代入したら、その後何度代入しても値が変わらないプロパティを実装したい。
didSetを使うと、以下のようにシンプルに実装できました。
“`swift
struct User {
var id: Int? {
didSet {
if oldValue != nil {
id = oldValue
}
}
}
}
“`“`swift
var user = User()
print(user.id) // 初期値はnil
user.id = 1
print(user.id) // 1に変わった
user.id = 2
print(user.id) // 1のまま変わらない
“`