- 1. iOSでバーコードを検出する
- 2. UIView.animateくらい簡単にカスタムイージング
- 3. 開発アプリ3つのリリース後?【広報・反響・改善点】
- 4. iOS15のライブラリアップデート対応でやった事
- 5. 【Flutter】Github ActionでiOSアプリをDeployGateに自動デプロイする
- 6. 【Swift】ViewControllerのライフサイクルについての備忘録
- 7. 【Android】MVVM で Hilt
- 8. GitHubのPRテンプレート(iOS・Android)
- 9. iOSのUIテスト(E2Eテスト)にPageObjectを適用した感想
- 10. リアルタイムの会話も倍速で聞きたい
- 11. Realmモデルの単体テストで RLMObject subclasses with the same name cannot be included twice in the same target. Please make sure ‘Employee’ is only linked once to your current target.
- 12. 【Flutter】iOS課金処理の、PurchaseStatus.pendingの挙動について
- 13. iOSのコンピュータビジョンで人物の全身ボックスを検出する
- 14. watchOS 8 から表示されるようになった NavigationBar の Large title 表示をやめたい
- 15. SwiftUIでかんたんにパーティクルを表示する
- 16. Unity Asset Storeでアセットを販売してみました
- 17. 【SwiftUI × Combine】さくっと無限スクロールを実装する
- 18. プロジェクトにWidgetExtensionを追加して’WidgetFamily’ごとに表示してみる
- 19. 【Swift】PDFThumbnailViewの実装
- 20. IoTデバイスの脆弱性とAWS IoT Core が VPC エンドポイントのサポート
iOSでバーコードを検出する
Visionのバーコード検出は、複数の種類のバーコードを一度に読み取ることができる。
医療分野などの業務用に活躍も考えられる。![Dec-10-2021 08-08-16.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/df4d228d-deb0-035f-0f3f-0c8fa214bc81.gif)
#検出方法
“`swift
let detectBarcodeRequest = VNDetectBarcodesRequest()
detectBarcodeRequest.revision = VNDetectBarcodesRequestRevision2
let handler = VNImageRequestHandler(cvPixelBuffer: pixelBuffer, orientation: .right, options: [:])
do {
try handler.perform([detectBarcodeRequest])
guard
UIView.animateくらい簡単にカスタムイージング
UIKitを使ったアニメーションでカスタマイズしたイージングを使う方法がわかったので共有です。色々調べた結果、UIView.animateくらい簡単にカスタムイージングを設定することができました。
イージングとは…
アニメーションの緩急のこと。これを調整することで、ぬるっとしたアニメーションなどを実現させることができます。
[世界一わかりやすい「イージング」と、その応用|ritar|note](https://note.com/ritar/n/n5e8ed0e07917)とかがわかりやすいと思います。イージングの調整は、3次ベジェ曲線でパラメータを指定します。(他の指定方法を知らないだけかもしれません…)
3次ベジェ曲線とイージングの関係や調整は[cubic-bezier.com](https://cubic-bezier.com/#.17,.67,.83,.67)で色々試してみると理解しやすいと思います。
### UIView.animateでのイージング
iOSでのアニメーションといえ
開発アプリ3つのリリース後?【広報・反響・改善点】
#はじめに
開発したアプリについてそれぞれ以下のようなことを書いていきます。サービスやアプリのリリース後についての参考になれば幸いです。・機能の簡単な説明
・広報活動
・その後の反響など
・改善点や展望なお、記事内のアプリは全てiOS向けのものです。
# [禁欲フィルタ](https://apple.co/3dk1gdr)
[](https://apple.co/3dk1gdr)
## アプリの機能
**「大人のためのコンテンツフィルタ」**がコンセプトのアプリです。Safari拡張成人向けサイト、性的に過激な単語や広告をブロックします。継続日数を記録し、それを共有することで自分にプレッシャーをかけることもできます。誘惑の多い現代において健康や集中のための節制を必要とする人を対象にしています。
## 広報活動
広告としてApp
iOS15のライブラリアップデート対応でやった事
初投稿となります。
iOSやAndroidの開発や保守等の業務を主に行っています。
iOSとAndroidを行き来したりしているのでよく忘れる内容や頻繁に起こらない事を主に書いていこうと思います。### 本題
毎年恒例のiOSアップデートの対応ですが、久々にアップデート対応を行うことになったので
よく使われるライブラリの修正と参考にしたものを備忘録として残しておこうと思います。##ライブラリ
よく使われるものは以下になるかと
※バージョンは2021/11/30時点のものを記載しています### Carchage
– Rx Swift (6.2.0)
– https://github.com/ReactiveX/RxSwift
– XCGLogger (7.0.1)
– https://github.com/DaveWoodCom/XCGLogger
– SwiftyJSON (5.0.0)
– https://github.com/SwiftyJSON/SwiftyJSON### Pods
– R.swift (6.0.0)
– https://g
【Flutter】Github ActionでiOSアプリをDeployGateに自動デプロイする
Flutterで作ったアプリをiOS向けにクローズド配信する時に、せっかくなので自動化したいと思い、Github Actionsを使用してCI/CD環境を構築する方法をまとめました。
masterブランチにpushされた時に、自動でDeployGateにアップロードされるようになっています。また、今回の方法はこちらの記事を参考にしました。
https://www.mum-meblog.com/entry/research-detail/flutter-ios-ci-cd
# 完成版
“`yml:main.yml
name: iOS CI/CDon:
push:
branches: [ master ]jobs:
build:
runs-on: macos-lateststeps:
– uses: actions/checkout@v2– name: Select Xcode version 13.1
run: sudo xcode-select -s ‘/Applications/Xcod
【Swift】ViewControllerのライフサイクルについての備忘録
#ViewControllerのライフサイクル
下記の順番で呼び出されるからコピーして使ってね。“`swift
import UIKitclass LifeCycleViewController: UIViewController {
// MARK: – viewが表示されるタイミング
// 1 viewを生成時に一度だけ呼ばれる。
override func loadView() {
super.loadView()
}// 2 viewが生成された時に一度だけ呼ばれる。
override func viewDidLoad() {
super.viewDidLoad()
}// 3 viewが表示される直前に呼ばれる。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
}//
【Android】MVVM で Hilt
✅ @HiltAndroidApp
Application クラスに付ける。✅ @AndroidEntryPoint
Android クラスに付ける。最低でも ViewModel をktx経由で inject するのでほぼ必須。
Activity / Fragment / Service /✅ @HiltViewModel
AAC ViewModel クラスにつける。Repository を取り込むためにconstructor に @Inject も付ける。✅ @Inject
コンストラクタ – constructor に付けてインスタンス名と型を明示する。
フィールド – @AndroidEntryPoint を付けたクラス内のフィールドに付ける。private であってはならない。→ Android クラスでなければ フィールドインジェクションはできない。
→ ViewModel の Android クラスへのフィールドインジェクションでは不要。✅ @Module / @InstallIn
コンストラクターで注入できない型のバインディングを追加できるクラス。
→
GitHubのPRテンプレート(iOS・Android)
## はじめに
本記事は [エムティーアイ Advent Calendar 2021](https://qiita.com/advent-calendar/2021/mti) の8日目の記事です。
昨日は @uhooi で [標準エラー出力する方法(Swift)](https://qiita.com/uhooi/items/f490d14602a7bc114948) でした。iOSとAndroidアプリ開発で使える、GitHubのPRテンプレートを紹介します。
## PRのテンプレート作成
PRのテンプレートは `.github/` フォルダに `pull_request_template.md` ファイルを作成することで、自動的に適用されます。
## PRのテンプレート紹介
PRのテンプレートを紹介します。
### iOS
iOSアプリ開発で使えるPRのテンプレートです。
“`markdown:pull_request_template.md
## Issue– close #TBD
## Overview
TBD
## Details (Option
iOSのUIテスト(E2Eテスト)にPageObjectを適用した感想
この記事は [ビビッドガーデン Advent Calendar 2021](https://qiita.com/advent-calendar/2021/vivid-garden) の 9 日目です。
こんにちは!
ビビッドガーデンにてiOSアプリ開発をさせていただいております、田中です!iOSのアプリケーションにUIテスト(E2Eテスト)を組み込む際、アーキテクチャとしてPageObjectパターンを適用したので、実際に適用してみた感想をお伝えできればと思います。
PageObjectパターンの実装方法などは既にドキュメントも多々存在しますので、今日はあくまで感想を伝えさせて頂き、UIテストアーキテクチャ選定の参考になれば嬉しいです?## PageObjectパターンって?
感想をお伝えする前に、PageObjectパターンについて簡略化して説明させていただきます。
PageObjectパターンとはテストに必要なコードの中から **UIに関するコードをPageObjectというクラスに委譲する** アーキテクチャです。例えば、アプリのホーム画面からマイページに遷移するテ
リアルタイムの会話も倍速で聞きたい
この記事は [クソアプリアドベントカレンダー2](https://qiita.com/advent-calendar/2021/kuso-app) の5日目の記事です。これを書いている今は実は12/9なのですが、現時点で枠がまだ空いていて、衝動的につくりたいクソアプリを思いついたので急遽参加させていただきました。
ちなみに先日はこんなクソアプリで参加させていただきました。
https://qiita.com/shu223/items/9bf0f24058665ec2fc6e
## もはや「リアル」は遅い
Podcastなどの音声コンテンツでは1.5xや2.0xでの倍速再生が普通で、たまに間違って1.0xで再生すると「あれ、Miyagawaさん今日は眠いのかな?」などと感じてしまったりするのはあるあるかと思います。YouTubeではそもそもジェットカットなんて用語もあるぐらい「間」を極限まで減らす編集が好まれる上に、やはり倍速再生している人が多い印象です。最近ではついにはNetflixでも倍速再生が可能となり、映画やドラマも倍速で鑑賞する時代になってきました。
一方で、リアルタ
Realmモデルの単体テストで RLMObject subclasses with the same name cannot be included twice in the same target. Please make sure ‘Employee’ is only linked once to your current target.
Realmのモデルの単体テストを追加したところ、テストを実行するとAppDelegateで以下のエラーが表示されテストがクラッシュするようになりました。
“`
Thread 1: “RLMObject subclasses with the same name cannot be included twice in the same target. Please make sure ‘Employee’ is only linked once to your current target.”
“`原因としてはRealm ObjectのサブクラスとしてEmployeeを定義していますが、そのEmployeeをアプリとテストの両方のTargetに追加していたのが、良くなかったようです。
今回RealmのObjectのサブクラスとしてEmployeeクラスをテスト対象としています。
## ダメだった状態
* Employeeクラスをアプリとテストの両方のターゲットに含めていた## テスト可能な状態
* Employeeクラスはアプリのターゲットのみに含める
* テストコー
【Flutter】iOS課金処理の、PurchaseStatus.pendingの挙動について
この記事は、[and factory.inc Advent Calendar 2021](https://qiita.com/advent-calendar/2021/andfactory)の **9日目** の記事です。
昨日は、@rd0501さんの「[iOSチームレビュー体制(ルール/目的/観点/よくある質問) まとめ (2021/12)](https://zenn.dev/domonr/articles/b926de7960f2fc)」でした。# はじめに
Flutterの課金処理を、[公式のプラグイン](https://pub.dev/packages/in_app_purchase)を使って実装している方に向けた記事となります。
iOSのトランザクションステータスは、Flutterの課金ステータス `PurchaseStatus` と若干異なる為、注意するべきポイントを紹介します。
課金タイプは `消耗型` を想定しています。※最近Ver.2.0.0がリリースされましたが、本記事ではVer.1.0.9をもとにした内容となっております。
# 課金ステータスの種類
iOSのコンピュータビジョンで人物の全身ボックスを検出する
これまでVisionの人物ボックス検出(DetectHumanRectanglesRequest)では、上半身のボックスしか取得できなかった。
2021年のアップデートから、全身のボックスも検出できるようになった。新しいVNDetectHumanRectanglesRequestRevision2を使う。
“`swift
let request = VNDetectHumanRectanglesRequest()
request.revision = VNDetectHumanRectanglesRequestRevision2
request.upperBodyOnly = false // trueにすれば上半身のみのBoundingBoxを取得する
“`|upperBodyOnly|結果|
|—|—|
|true||
|false|
watchOS 8 から表示されるようになった NavigationBar の Large title 表示をやめたい
## はじめに
ご存知の通り watchOS 8 から NavigationBar のタイトル部分が
デフォルトで Large title 表示されるようになりました。|watchOS 7|watchOS 8|
|:–:|:–:|
|![スクリーンショット 2021-12-09 7.39.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88266/6b1e604d-95b1-46b7-43e0-3064de614405.png)|![スクリーンショット 2021-12-09 7.37.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88266/617ab349-8247-ae12-7846-719a688b2e42.png)|今夏 Watch App 開発していたのですが,watchOS 8 での動作確認は
後回しにしていてリリース前に確認して,あぁ〜変わったんだという感じでした。
Apple Wa
SwiftUIでかんたんにパーティクルを表示する
# 概要
SwiftUIで、以下のような、ボタンを押すとスパークする画面効果を使ってみたいと思います。
![Simulator Screen Recording – iPod touch (7th generation) – 2021-12-06 at 15.18.02.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687960/4a127334-e4ee-8ba3-d735-bb81b20a0103.gif)
# 手順
今回のパーティクルは`SpriteKit`を使って実現します。
## パーティクルファイルの用意
New Fileより、 `SpriteKit Particle File`を選択し、新しいパーティクルファイルを作成します。
パーティクルファイルには、`Fire`や `Snow` など様々なテンプレートが用意されているので、これだけでもいい感じのアニメーションが実現できます。![スクリーンショット 2021-12-06 15.20.23.png](https://qiit
Unity Asset Storeでアセットを販売してみました
## 概要
[KLab Engineer Advent Calendar 2021](https://qiita.com/advent-calendar/2021/klab) 12月9日の記事です。
開発推進部の庄司です。お仕事では、スマートフォンゲーム開発案件のサポートをしています。「MIDI Plugin for Mobile Devices」というUnityアセットを作成して、アセットストアにリリースしてみましたので、その経緯や手順を共有します。
https://assetstore.unity.com/packages/tools/audio/midi-plugin-for-mobile-devices-198917
### MIDIについて
いきなりの余談ですが、「MIDI」ってご存知でしょうか? とってもレガシーな規格(1983年)です。Music Instruments Digital Interfaceの略で、要は楽器同士や、楽器とコンピュータとを接続するための規格です。時代がかった規格ではありますが、現在でもいろんなところで使われています。ゲームサウンドの制作
【SwiftUI × Combine】さくっと無限スクロールを実装する
## やること
SwiftUIとCombineを用いて無限スクロールを実装します。このような仕様のアプリを作ってみました。
1. TextFieldで何かしら検索を行なって、結果をリストに格納し、表示する
2. スクロールが終わりそうなときに追加のコンテンツを読み込み、リストに追加し、表示する2の部分について書いていきます。
実際にはAPIを呼ぶことを想定していますが
今回は無限スクロールをどうやって実現するのかという点に絞ります。## 環境
macOS 11.4
xcode13.1
swift5## できたもの
無限スクロールの記事を書きました。
スクロールバーをよくみないとわからないかも。。。【SwiftUI × Combine】さくっと無限スクロールを実装する #Qiita
プロジェクトにWidgetExtensionを追加して’WidgetFamily’ごとに表示してみる
## はじめに
ウィジェットの技術検証とキャッチアップを兼ねて社内で勉強会を開催しました。
今回は、WidgetExtensionを追加してWidgetFamilyごとに表示するところまでを記事にします。## 環境
Swift 5.5
Xcode 13.1## サンプルプロジェクト
GitHubにPushしました。気になる方はご覧ください。
https://github.com/ken-sasaki-222/WidgetTraining
![QR_961482.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/fb53454c-1f96-c7eb-4dbc-a98dc8cd61b9.png)## ウィジェットをローカルでビルドする
#### ウィジェット機能を利用したいアプリの作成
`Xcode起動 → Create a new Xcode project → iOS → App`を選択して諸々設定
今回アプリ名は`WidgetTraining`とします。#### Widget
【Swift】PDFThumbnailViewの実装
SwiftでPDFKitを使ってPDFThumbnailViewを実装する方法。
## 実装コード
SwiftでPDFKitを使ってPDFThumbnailViewを実装する方法。“`swift
import UIKit
import PDFKitlet pdfView = PDFView()//細かい設定は省略します
let pdfThumbnail = PDFThumbnailView()pdfThumbnail.frame = CGRect(x: 0, y: view.frame.maxY – 100, width: view.frame.width, height: 100)//縦幅100、横幅全部のサイズ
pdfThumbnail.layoutMode = .horizontal//横向き
pdfThumbnail.pdfView = pdfView //PDFViewを紐付け
self.view.addSubview(pdfThumbnail)
“`## 参考
https://developer.apple.com/documentation/pd
IoTデバイスの脆弱性とAWS IoT Core が VPC エンドポイントのサポート
2021年7月に発表された「AWS IoT Core が VPC エンドポイントのサポート」の意味を考えるために書いています。
AWS公式の発表記事は以下です。
[AWS IoT Core が VPC エンドポイントのサポートを開始](https://aws.amazon.com/jp/about-aws/whats-new/2021/07/aws-iot-core-supports-vpc-endpoints/)
#1.VPCエンドポイント とはなんのことか?
AWS上のVPC内のサービスと、VPC外のサービスをプライベート接続で通信できるようにするための仮想デバイスです。
・PrivateLink と呼ばれるサービスを使って、各サービスを接続させることが出来ます
・PrivateLink の実体はVPC内のENI(Elastic Network Interface) になります
・PrivateLink自体がIPアドレスを持ってVPCの中にエンドポイントが出来ます[公式ドキュメン](https://docs.aws.amazon.com/iot/latest/develo