- 1. SwiftUIを実務で使ってわかったアレコレ
- 2. iOSアプリにSharePlayを追加して、FaceTime通話中に参加者間でデータをやり取り(Group Activities)の完全なガイド
- 3. iOS15メールプライバシー保護機能という闇への防衛術
- 4. YouTube SDKを利用してインライン再生を実装する
- 5. 【Swift】動画と音楽を合成すると動画が横を向くバグについて
- 6. DJI公式アプリ+αなドローン操作アプリ(iOS)を作った話
- 7. iOSのアクセスガイド(Guided Access)下で実行中のアプリが落ちたときの挙動を調べる
- 8. ARをさわる【コンピュータ・ビジョン*AR】
- 9. [Tips]Xcode13.1のSwiftUIのpreviewでCPU使用率が高くなるのをSpotlightを止めて回避する(iOS15)
- 10. 【SwiftUI】チャットアプリのような動的な高さの TextEditor を実装する
- 11. データの暗号化・復号とSwiftでの実装の仕方について改めて調べてみた
- 12. Crashlyticsとクラッシュ レポートツールを併用する話
- 13. flutterのFriendlyChat(codelabs)をAPI操作にする
- 14. クロージャでメモリリークする原因と解決策(Swift)
- 15. Fat Singletonを救いたい【Swiftでデザインパターン攻略 #2】
- 16. アイコン作成等のツールリンク集
- 17. 【Flutter】バッテリーの充電状態を検知する方法
- 18. Swifアプリケーション開発に、NoSQLドキュメント指向モバイルデータベースCouchbase Liteを使ってみる
- 19. Interface Builder 上で maskedCorners を設定
- 20. CocoapodsにPrivateのフレームワークを作ってみる
SwiftUIを実務で使ってわかったアレコレ
![swiftui_advent_2021.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10943/2b756c9b-6a55-c6ea-18bf-8efb54975ea3.png)
この記事はGoodpatchエンジニアアドベントカレンダー5日目の記事です。
こんにちは!iOSエンジニアのとうようです。[2日目の記事](https://goodpatch-tech.hatenablog.com/entry/engineer_communication_elementary)も書いているのですが、あまり技術的な内容は触れなかったのと、まだ空いていたので急遽この枠で技術的な記事も書いていこうということにしました。
多分このアドベントカレンダーはほとんどQiitaに書く人がいないので、一個ぐらいはQiitaに書き残しておこうかなとここで書き進めています。今回書く内容は、自分が実際に参加した案件での実例を通したSwiftUI周りのお話になります。実際どのアプリなのかは伏せさせていただきますが、以下の
iOSアプリにSharePlayを追加して、FaceTime通話中に参加者間でデータをやり取り(Group Activities)の完全なガイド
# はじめに
SharePlayはWWDC 2021でiOS 15に導入された新技術です。
この記事は、SharePlayを使ったデータ共有機能の実装についてご説明します。
手順に従って、SharePlayのセッションを開始し、FaceTime参加者とデータをやり取りするアプリを作ります。
#### プロセスを詳しく説明するため、図をいくつか作成して記事に追加しました。画像をクリックすると拡大できます。
## SharePlayについて
ユーザーの立場で言うと、このフレームワークを使った場合、FaceTimeの参加者がオンラインの活動を一緒にやる(例えば映画の鑑賞など)ことができるようになります。
開発者の視点で言うと、FaceTimeの参加者の間のデータ交換が可能になります。
そのため、一緒に映画を見る場合、FaceTime参加者間では再生時間のみが同期され、映画は各端末からストリーミング再生されることになります。
動画配信: Internet -> ユーザーの端末
再生時間: 他のFaceTimeの参加者 -> SharePlay -> ユーザーの端末## S
iOS15メールプライバシー保護機能という闇への防衛術
# iOSのメールプライバシー保護機能が闇動作なので紹介したい
iOS15(2021/9/21リリース)では、メールプライバシー保護機能(MPP – Mail Privacy Protection)なる機能が導入されました(iPadOSやMacOSも同様に導入)。標準メールアプリが対象で、iOS15で標準メールアプリを起動するとこんな画面が出てきます(画像はiPadOS15ですが)。見たことある方、多いのではないでしょうか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314396/2f95b563-6e8a-0e85-7c9f-e5b59773de2f.png)この機能に関するAppleさんの説明は [iPhoneでメールプライバシー保護を使用する](https://support.apple.com/ja-jp/guide/iphone/iphf084865c7/ios) にあり、
1. 送信者に対しIPアドレスが隠されること
1. メールが開かれたかどうか送信者は確認で
YouTube SDKを利用してインライン再生を実装する
##今回実装すること
今回はアプリでもよくあるインライン再生を実装してみたいと思います。
実装する機能は次のとおりです。
・インライン再生
・画面上では一つの動画しか再生できない(一つ再生させればもう一つはポーズする)##完成イメージ
![simulator_screenshot_F236E870-EA2F-45E6-B463-F41475148AAB.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552896/bdf2d59a-d495-ac4f-99ea-b8f5708eacdc.png)##画面の構造
![スクリーンショット 2021-12-04 23.23.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552896/78b4dc52-aa97-5e89-281b-371e54dba3d3.png)
![スクリーンショット 2021-12-04 23.19.09.png](https://qi
【Swift】動画と音楽を合成すると動画が横を向くバグについて
#はじめに
※こちらはSwiftVideoGeneratorライブラリについての記事となります。私がSwiftVideoGeneratorにて動画と音楽を合成させる際に解決まで時間を消費したので、
同じ状態で困っている方の助けになればと思います。https://github.com/dev-labs-bg/swift-video-generator
#解決方法
VideoGenerator.swiftファイルに下記のコードを追加するだけです。“`swift
if let aVideoAssetTrack: AVAssetTrack = aVideoAsset.tracks(withMediaType: .video).first, let aAudioAssetTrack: AVAssetTrack = aAudioAsset.tracks(withMediaType: .audio).first {//fixes the orientation issue
mutableCompositionVideoT
DJI公式アプリ+αなドローン操作アプリ(iOS)を作った話
## はじめに
DJI 製のドローンを触れる機会があったので、ドローンを操作できるiOS アプリを作ってみました。
ドローン操作アプリってハードル高そう? と思っていたのですが、DJI が用意しているSDK を利用することで案外簡単に作ることができたので、敷居を下げるきっかけになればと思います。### 書くこと
– 今回使用した DJI 製ドローン (Mavic 2 Enterprise) の基本的な概要
– DJI SDK を使った DJI 公式アプリ +α なアプリ作成の要点
– DJI SDK の辛いポイント
– DJI SDK を使用した写真の扱い方### 書かないこと
– iOS アプリの基本的な作り方
– Onboard SDK / Payload SDK
– 詳細な実装方法、ソースコード## 使用したドローン
ここでは、今回使用したドローン「Mavic 2 Enterprise」について説明します。
今回使用したドローンは、株式会社メディア・リース様から無償で貸していただきました。?### Mavic 2 Enterprise
以下公式サイトより
iOSのアクセスガイド(Guided Access)下で実行中のアプリが落ちたときの挙動を調べる
## 概要
iOSには、[アクセスガイド(Guided Access)](https://support.apple.com/ja-jp/HT202612)の機能があり、動かせるアプリを1つに制限することができます。
このエントリでは、筆者が「アクセスガイドを有効にしているときにアプリが落ちた場合はどのような挙動になるのか」がふと気になり、実験してみた内容を紹介します。
## ご注意
– ご自身でも実験される場合には、アクセスガイドについて[Appleのサイトの説明](https://support.apple.com/ja-jp/HT202612)をよく理解した上で取り組まれてください。特に、アクセスガイドをパスワード付きで設定した上で、パスワードを忘れてしまうと解除ができなくなります。ご注意下さい。
– アクセスガイドを理解しないで使用すると大変なことになる場合があるので注意してください。
– アクセスガイドを理解しないで使用すると大変なことになる場合があるので注意してください。(大切なことなので2回繰り返しました)## 前提
本エントリでは、下記を使用しています。
ARをさわる【コンピュータ・ビジョン*AR】
ARオブジェクトにさわれたらいいと思いませんか?
【ARをさわる】VisionとRealityKitで指が触れたARオブジェクトを反応させられます。
まずはVisionで指先の位置を取得します。
“`swift
import Vision
import RealityKit…
var handPoseRequest = VNDetectHumanHandPoseRequest(completionHandler: handDetectionCompletionHandler)
// 手のポイントを取得してくれるリクエスト
// CompletionHandler内で結果を処理します…
func session(_ session: ARSession, didUpdate frame: ARFrame) {
[Tips]Xcode13.1のSwiftUIのpreviewでCPU使用率が高くなるのをSpotlightを止めて回避する(iOS15)
## このエントリでできること
– タイトル通りです。
## おことわり
– このTipsは、2021年12月時点のXcodeの最新版(13.1)を使用するときを対象としています。iOSシミュレータのバージョンは15.0です。
– この後のXcodeでは必要がなくなっているかもしれません。
– 上記以外のバージョンでは動作を確認していません。## TL;DR;
筆者の場合は、ターミナルで以下を実行してからXcode再起動でCPU使用率が低くなりました。
“`shell
cd ~/Library/Developer/Xcode/UserData/Previews/Simulator\ Devices/find . -name com.apple.suggestions.plist -exec plutil -replace SuggestionsAppLibraryEnabled -bool NO {} “;”
“`## 対象
– Xcode 13.1
– 筆者はM1なMacBook Airで確認しましたが、IntelなMacでもおそらく同様では。– i
【SwiftUI】チャットアプリのような動的な高さの TextEditor を実装する
# やりたいこと
チャットアプリで使われるような動的な高さの TextEditor を実装する。[![Image from Gyazo](https://i.gyazo.com/c71ab0d56b11a8ad0216229594abfb26.gif)](https://gyazo.com/c71ab0d56b11a8ad0216229594abfb26)
# 実装
多少ハッキーな気もしますが、SwiftUI のみで実装しました。“`swift
struct DynamicHeightTextEditor: View {
@Binding var text: String
let placeholder: String
let maxHeight: CGFloatvar body: some View {
ZStack(alignment: .leading) {
// プレースホルダー
if text.isEmpty {
Text(p
データの暗号化・復号とSwiftでの実装の仕方について改めて調べてみた
# はじめに
この記事は[and factory.inc Advent Calendar 2021](https://qiita.com/advent-calendar/2021/andfactory) 4日目の記事です。
and factory iOSエンジニアのy-okuderaです!
最近はちょいちょいFlutterを触ったりもしているのですが、今回はiOSの記事を投稿します。最近、iOSでデータを暗号化/復号する処理をSwiftで実装してみたので、実装時に調べたことなども含めてまとめてみようと思います。
# そもそも暗号化ってなんだろう?
「暗号化」とは、データを何らかの鍵を使わないと意味を成さないような形に変換することです。
暗号化によって変換されたデータを「暗号文」といいます。
鍵を使ってこのプロセスを逆に行い、データを元の形(平文)に戻すことを「復号」といいます。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103695/7b93b0b2-1c03-a4ff-345e-
Crashlyticsとクラッシュ レポートツールを併用する話
この記事は、ゆめみ [Advent Calendar 2021](https://qiita.com/advent-calendar/2021/yumemi) の3日目の記事です。
ちょっと間に合わなかった# はじめに
Firebase Crashlyticsはよく使われるクラッシュ検知ツールです
別のクラッシュ検知ツールからCrashlyticsへ載せ替えが必要になったのですが
一定期間は元のツールとCrashlyticsを併用して欲しい要件へ対応した際のメモです## 環境
* OS:macOS Big Sur 11.6.1
* Swift:5.5
* Xcode:13.0 (13A233)## 現象
クラッシュレポートがCrashlyticsか他ツールのどちらかにしかレポートされない
## 原因
クラッシュ検知ツールは概ねtop-level error handlerを利用して、クラッシュ検知などを行なっていると考えられます
ただtop-levelとあるため、一つしか登録できず複数のクラッシュ検知を有効にした場合に、競合してしまう場合があります## 対応
flutterのFriendlyChat(codelabs)をAPI操作にする
flutter勉強のためにcodelabs(https://codelabs.developers.google.com/codelabs/flutter)
をやっていたのですが、こちらで作成するチャットアプリのメッセージが腹持ちだったため、apiで管理することができるようにしました。
サーバー側はbeegoとgormで作成してます。
参考: https://qiita.com/yufuku/items/dff8597e00fc0bdc6864今回作成したflutterコード: https://github.com/fu-yuta/flutter_friendly_chat/tree/chat_api_access
# 環境
“`shell
$ flutter doctor -v
[✓] Flutter (Channel stable, 2.5.3, on macOS 11.2.3 20D91 darwin-x64, locale ja-JP)
• Flutter version 2.5.3 at /usr/local/flutter
• Upstream re
クロージャでメモリリークする原因と解決策(Swift)
## はじめに
本記事は [Swift/Kotlin愛好会 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/love_swift_kotlin) の4日目の記事です。
昨日は @n_takehata さんで [【Kotlin初心者向け】KotlinでvarとMutableListを使わなくする方法](https://blog.takehata-engineer.com/entry/not-use-var-and-mutable-list) でした。Swiftのクロージャでメモリリークする原因と解決策を紹介します。
## 環境
– OS:macOS Big Sur 11.6
– Swift:5.5
– Xcode:13.0 (13A233)## 現象
どのような場合にクロージャでメモリリークが発生するか紹介します。
URLから画像を取得し、キャッシュした上でcompletion handlerに画像を渡す `ImageCacheManager#cacheImage(imageUrl:complet
Fat Singletonを救いたい【Swiftでデザインパターン攻略 #2】
## はじめに
今回は「FatSingletonを救いたい」と題して、Singletonパターンについて書きました。
自分は、Singletonパターンを結構使うので、かなり馴染み深いデザインパターンです。Singletonパターンは便利なのですが、気をつけて使わないと、何でもありコードになってしまうので、そのあたりを記事にできたらと思い書いてみました。
## この記事で学べること
– SwiftのSingletonパターンの書き方
– Singletonのメリット、デメリット
– `FatSingleton`にならないようにするためのリファクタリング **<- Point** - UnitTestに都合の良いSingletonクラスにしておく **<- Point** ## Singletonパターンとは #### 概要 特定のクラスのインスタンスがアプリケーションの中で1つしか生成されないことを保証するデザインパターンのことです。 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0
アイコン作成等のツールリンク集
たまたまどこかで知り、便利じゃん!と思ってブックマークに入れたは良いが、
本当に必要なときに結局どこにしまったか忘れているので、
個人的にたまに使ったりするツール系のリンクを備忘録としてまとめてみました。# Android/iOS
– AndroidAssetStudio(各種アイコン作成)
https://romannurik.github.io/AndroidAssetStudio/
– MakeAppIcon(アイコン作成)
https://makeappicon.com/
– resizeappicon(アイコン作成)
https://resizeappicon.com/
– (Android用)BundleToolを使用してaabファイルを実機にインストール
https://apuridasuo.hatenablog.com/entry/2019/09/25/144546
# 画像系
– RemoveBackground(透過画像作成)
https://www.remove.bg/
– MethodDraw(SVGエディタ)
https://
【Flutter】バッテリーの充電状態を検知する方法
本記事はFlutter Advent Calendar2021 3日目の記事です。
スマホを使うにあたって、切っても切れない関係にあるのがバッテリーですよね。
今回はFlutterでバッテリーの充電状態を検知する方法を提供するパッケージ、
battery_plusを紹介します。https://pub.dev/packages/battery_plus
こちらについて日本語での解説記事が見つからないため、
今回紹介しようと考えた次第です。本記事では、
– buttery_plusパッケージでできること
– 実装サンプルを記載します。
参考になれば幸いです。##buttery_plusパッケージでできること##
buttery_plusパッケージでできることは以下の3つです。
– 充電量(%)を取得する
– 充電状態(後述)の変化を検知する
– パワーセーフモードか否かを取得するやれることはシンプルですね。
一つ一つ解説していきます。
####充電量(%)を取得する####
“batteryLevel“のメソッドで現在の充電量を%で取得します。
このメソ
Swifアプリケーション開発に、NoSQLドキュメント指向モバイルデータベースCouchbase Liteを使ってみる
## はじめに
本稿では、Swiftアプリケーション開発に、NoSQLドキュメント指向モバイルデータベース Couchbase Liteを使うための具体的な方法について解説します。本稿では、Couchbase Lite 3.0.0ベータ版をKotlinアプリケーションで利用する際の動作確認までを行います。
Couchbaseをモバイルアプリケーションで利用する意義については、以下の記事をご参考ください。
https://qiita.com/yoshiyuki_kono/items/3abd5e32801060a449d2
### 確認環境
– macOS Catalina Version 10.15.7
– Xcode Version 12.4## 実行手順
### プロジェクト作成・Couchbase Liteインストール
本稿では、Swiftパッケージマネージャーを使用して、Couchbase Liteをセットアップする手順を紹介します(Swiftパッケージマネージャーを使用してCouchbaseLiteSwiftをインストールするにはXcode12 +が必
Interface Builder 上で maskedCorners を設定
## 背景
iOS11 より、 View の四隅を丸める際に `maskedCorners` を指定することで、一部だけに `cornerRadius` を設定することが可能となりました。
https://qiita.com/hachinobu/items/dc2ff32fa2be6b78ea86
コード上での設定するとなると
“` swift
view.layer.cornerRadius = 16
view.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXminYCorner]
“`となるのですが、レイアウトを Interface Builder で組んでいる場合、このためだけにコード側で処理するのは面倒なため、 Interface Builder 上で `maskedCorners` の設定が完結することを目指します。
## 設定方法
Interface Builder 上の _User Defined Runtime Attributes_ にて、 `layer.maskedCorners` の
CocoapodsにPrivateのフレームワークを作ってみる
# はじめに
株式会社ピー・アール・オーのアドベントカレンダー3日目です。今までiOSプロジェクトを開発時、共通で使えるユーティリティクラスを既存のプロジェクトからコピーして、新しいプロジェクト側に流用する形でした。しかし、ユーティリティクラスに修正や機能追加が入った場合、全てのプロジェクトにファイル更新を行う必要があり、効率は良くないです。
そこで、共通のユーティリティークラスをフレームワーク化し、Cocoapods経由で全てのプロジェクト内にインストールすれば今後楽になると思いました。フレームワークのソースコードは公開できない場合もあるため、CocoapodsにPrivateのフレームワークを作成する方法を調べて、作ってみました。
# 事前準備
– Cocoapodsのインストール“`
sudo gem install cocoapods
“`# プライベートのSpecリポジトリを作成する
さて、一番最初に用意する必要があるのはSpecリポジトリです。今回はGitHub上にリポジトリを用意します。
※リポジトリ自体はpublicにする必要がないです。ただし、チー