- 1. 【iOS】位置情報を取得するCLLocationManagerの基本知識
- 2. iOS yuv videoRangeからyuv full rangeに変換する
- 3. 【Swift】CombineをUIKitとSwiftUIで使うときの実装を比較する
- 4. サーバに配置したWebViewのコンテンツからスマホのネイティブアプリのURLスキームの呼び出し方法
- 5. TestFlightから直接AppStoreの審査に出す方法
- 6. SFSymbolsでのアレの名前
- 7. CGImageをリサイズする
- 8. 【iOS】ライセンス表示ライブラリ「LicensePlist」を使ってみた
- 9. RxSwiftでUITextViewからハッシュタグを抽出する
- 10. Flutterで既存のiOS / Androidアプリに機能追加 (Add-to-app):基本編
- 11. Viewのタップイベントを透過させる(Swift)
- 12. 「The Ultimate Guide to WKWebView」をSwiftUIで実装する #04 – Loading HTML fragments –
- 13. [RxSwift6.0] withUnretained(_: )オペレータについて
- 14. CocoaPodsのまとめ(Xcode13.2.1、M1チップ対応)
- 15. 【iOS】MatterのサンプルをiOSアプリとM5stackで試してみた
- 16. iOSのスクリーンショットでコンテンツを消す方法
- 17. 「The Ultimate Guide to WKWebView」をSwiftUIで実装する #03 – Loading local content –
- 18. 「The Ultimate Guide to WKWebView」をSwiftUIで実装する #02 – Loading remote content –
- 19. UIButtonを画面の最前面に出す!!
- 20. Firebase Storageで処理がタイムアウトしないよー
【iOS】位置情報を取得するCLLocationManagerの基本知識
# 位置情報の取得
[iOS14で位置情報を取得する](https://qiita.com/r0227n/items/6ae818adaab029436bf5)
[iOSアプリで位置情報を取得するときに配慮する点をまとめてみた①](https://qiita.com/reo0612/items/589ea45a0ce2cbd6ec07)
[Adding Location Services to Your App](https://developer.apple.com/documentation/corelocation/adding_location_services_to_your_app)## デバイスが対応しているかを確認
`位置情報サービス`をアプリで利用する場合は、アプリを使用するデバイスが対応しているか確認する必要がある。
|メソッド|概要|
|—|—|
|[significantLocationChangeMonitoringAvailable()](https://developer.apple.com/documentation/corelocat
iOS yuv videoRangeからyuv full rangeに変換する
h.264動画でmetal処理するときよくyuv video rangeの動画がきていて、 full rang + rgb変換しないと処理できないので、knowhowとして残したいと思ってます。
## 方法1
自前でmetal変換
“` c++
fragment float4 yuvVideoRangeToRGBFragmentShader(ColorInOut in [[ stage_in ]],
texture2dbaseYTexture [[ texture(0) ]],
texture2dbaseCbCrTexture [[ texture(1) ]]) {
constexpr sampler colorSampler;
const float4x4 ycbcrToRGBTransform = float4x4(
float4(+1.0000f, +1.0000f, +1.0000f, +
【Swift】CombineをUIKitとSwiftUIで使うときの実装を比較する
# はじめに
`Combine`を学習していると、`SwiftUI`との組み合わせの実装をよく見るのですが、`UIKit`でも全然使えるとのことで、今回は、`UIKit`と`SwiftUI`で同じ動きをするサンプルアプリを作って、実装方法の違いや実装中に感じたことを記事にしました。今回は、`MVVM`で実装したので、`Model`、`ViewModel`、`View(ViewController)`の実装をそれぞれ比較したいと思います。
# 結論
僕の経験値は`UIKit`>>>>>`SwiftUI`で、圧倒的に`UIKit`の経験の方が多いですが、
`Combine`を使った実装は、個人的には`SwiftUI`>`UIKit`で`SwiftUI`のほうが書きやすかったです。実装時間も`SwiftUI`のほうが早く、今後もう少し機能を追加したいってなった時に`SwiftUI`のほうが、実装のイメージが湧きやすくて、簡単に実装できそうだと思いました。
`Combine`のキャッチアップ自体、最近はじめた影響かもしれませんが`UIKit`は、結構苦労して実装しました。
ですが、
サーバに配置したWebViewのコンテンツからスマホのネイティブアプリのURLスキームの呼び出し方法
筆者は普段サーバサイドのエンジニアとしてWebシステムの開発をしているが、
担当している案件でスマホのネイティブアプリ内のWebView内にコンテンツを組み込む案件がありました。その際に、URLスキームを使ってネイティブアプリとWebViewのコンテンツ間の連携でハマったので、備忘録として残しておきます。
本記事はあくまでサーバサイドの立場からの対処方法になります。## URLスキームの書き方
筆者ははじめ、下記のコード用にfetch関数での読み込みを想定していました。
しかしURLスキームはネイティブアプリのWebViewのURLローダーの部分で実行する仕組みのため、
fetch関数のようなJavaScriptの非同期処理では実行が出来ませんでした。
そこで以下のように `location.href` にURLスキームを設定し、
ネイティブアプリのWebViewに読み込ませることで問題を解消しました。“`
// 間違い
fetch(“【URLスキーム】”);
// 正解
location.href = “【URLスキーム】”;
// 参考例
location.href
TestFlightから直接AppStoreの審査に出す方法
# 概要
iOSにてアプリをリリースする際にチーム内でテストしてから審査に出すフローが多いかと思います。
今回はTestFlightでテスト実施から直接AppStoreに審査する方法をご紹介します。# 今回の肝
TestFlightにアップロードしたアプリのバージョンとAppStoreで審査しようとしているバージョンが揃っている必要があります。
今回の記事ではバージョン`1.0.0`として解説します。# まずは普通にTestFlightにアップロード
TestFlightにアップロードします。ここでバージョンが`1.0.0`であることを確認します。![TestFlight.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49347/088571aa-b22a-9112-0780-0f1ce71b9cbf.png)
# AppStore側でTestFlightに上がっているビルドを指定
AppStore側で`1.0.0`を作成し、TestFlightとバージョンが揃っていると
`ビルド`
SFSymbolsでのアレの名前
# 概要
SFSymbolsで欲しいアイコンの名前がわからず探すのが大変なことがたまにあるので
「SFSymbols ○○ 名前」みたいな感じで検索した時に引っかかって手助けになれば幸いです## 3点リーダ, 三点リーダ
`ellipsis`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1237483/cf3b1419-695a-2c86-4f55-6a8d1b42cf3e.png)## 共有, Shere
`square.and.arrow.up`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1237483/2c7c90e8-6cba-f5bd-1d16-7644db90a4de.png)## マウスカーソル
`cursorarrow`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.
CGImageをリサイズする
#CGImageでリサイズするメリット
手元のiPhone11で1920*1038画像を6000*6000にリサイズしました。
![image9.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/12330749-c686-7deb-5b92-6e7ef0a91a43.jpeg)
処理速度はCIImageが速いけれど、メモリ使用量はCGImageの方が少ない印象です。
ちなみに、画像の合成処理でもメモリ使用量が少なかったです。|format|time|memory(MB)|
|—|—|—|—|
|CGImage |0.356 |101||
|CIImage |0.002| 158.9|
|UIImage |0.482 |565 |メモリ使用量はデバッガのメモリを目視しただけですが、
メモリ使用を抑えたいならCGImageを使うと良いと思います。画質はUIImageが綺麗で、CIImageとCGImageは同じぐらいに見えました。
CGImage
![スクリ
【iOS】ライセンス表示ライブラリ「LicensePlist」を使ってみた
# はじめに
個人アプリにライセンス表示をしたく、有名なライセンス表示ライブラリを使ってみました。# 手順
https://github.com/mono0926/LicensePlist導入手順はGithubのページに丁寧に書かれておりますが、それでも少し詰まったのでメモしておきます。
##### 1. LicensePlistのインストール
– **Recommended**の`CocoaPods`を使う場合
`Podfile`に`pod ‘LicensePlist’`を追加して、`pod install`する– **Also Recommended**の`Homebrew`を使う場合
ターミナルにて`brew install mono0926/license-plist/license-plist`する
だけですが、
私の場合(環境の問題で)は、`Error: Cannot install under Rosetta 2 in ARM default prefix (/opt/homebrew)!`と怒られたので、
`arch -arm64 brew instal
RxSwiftでUITextViewからハッシュタグを抽出する
##前提
UITextViewに入力されたものから新しく入力されてハッシュタグを抽出するのをRxSwfitでやってみました。ReplaySubjectはあまり話題に上がらないので、こういう使い方ができるのを知っていただければと思います。
##手順
– UITextView.textとReplaySubjectをバインドする。
“` Swift
let differenceTxtSubject = ReplaySubject.create(bufferSize: 1)
txtView.rx.text
.debounce(.milliseconds(300), scheduler: MainScheduler.instance)
.bind(to: differenceTxtSubject)
.dispose(by: disposeBag)
“`ReplaySubjectはバッファされた分だけ遡ることができる。この場合はバッファサイズは1なので、1個前に流れてきたものと現在のものを比べることができる。
– 前回のものと今
Flutterで既存のiOS / Androidアプリに機能追加 (Add-to-app):基本編
# はじめに
お仕事でFlutterで作成した画面を既存のiOSアプリ・Androidアプリに追加する事になりました。
個人的にAndroidとFlutterは多少知識があるのですがiOS(特にObjective-C)の知識が皆無で少し苦戦したので、ネイティブアプリにFlutterモジュールを組み込む手順とハマったときの対応を備忘録的にまとめておきます。既存iOSアプリはObjective-C、AndroidアプリはJavaで実装されているのでこの記事もそれに合わせたものとなっています。
また、iOSアプリではCocoaPodsを使って組み込み、Androidでは`settings.gradle`でFlutterモジュールを追加させています。基本的には以下の公式ドキュメントを参考にしました。
[Add Flutter to existing app \| Flutter](https://docs.flutter.dev/development/add-to-app)# 環境
* MacBookPro M1 BigSur 11.6
* Xcode:12.5.1
* And
Viewのタップイベントを透過させる(Swift)
![Xcode-13.1](https://img.shields.io/badge/Xcode-13.1-brightgreen) ![Swift-5.5.1](https://img.shields.io/badge/Swift-5.5.1-brightgreen) ![iOS-15.0](https://img.shields.io/badge/iOS-15.0-brightgreen)
## はじめに
添付のような3階層(緑 -> 青 -> 赤)の View で赤をタップした場合は赤で処理、青をタップした場合は緑で処理をしたいということがありました。タップイベントを透過させるにはなんとなく `hitTest` をオーバーライドすればいいんだろうなと思って下記のようにしたらムリだったのでなんとなく使ってた
「The Ultimate Guide to WKWebView」をSwiftUIで実装する #04 – Loading HTML fragments –
[「The Ultimate Guide to WKWebView」](https://www.hackingwithswift.com/articles/112/the-ultimate-guide-to-wkwebvie)をSwiftUIで実装してみるの、
4つ目になります。## 目次
シリーズ化していこうと思うので、全体の目次を置いておきます。
リンクが貼られていないアジェンダは、記事作成中または未作成のものになります。|#|アジェンダ|
|——|—————–|—|
|01|[Making a web view fill the screen](https://qiita.com/kamimi01/items/b4d6cbafa587831c1be0)
(フルスクリーンのWebViewを作る)|
|02|[Loading remote content](https://qiita.com/kamimi01/items/c889979964820d5f9fa2)
(リモートのコンテンツを読み込む)|
|03|[Load
[RxSwift6.0] withUnretained(_: )オペレータについて
##はじめに
本記事ではRxSwift6.0から追加された`withUnretained(_:)`オペレータについてどんなものか追求していこうという記事です。
ぜひ最後まで読んでいただければと思います!##前提
RxSwiftを使用しているとき、subscribe(onNext:)などを使い強参照を防ぐことを目的にしたキャプチャリスト`[weak self]`や`[hoge]`で弱参照にしていることが多いと思います。
その場合、`guard let`で毎回アンラップして。。と本質の部分とは関係が薄い記述を含んでしまい、冗長なコードになりがちです。
今回紹介する`withUnretained(_:)`はそんなオブジェクトの参照を楽にしてくれます。##RxSwift6.0で追加
`withUnretained(_:)`はRxSwift6.0から追加されたオペレータです。https://github.com/ReactiveX/RxSwift/releases/tag/6.0.0
実際に使ってみます。
“`swift
// 従来のweak selfを使う場合hoge
CocoaPodsのまとめ(Xcode13.2.1、M1チップ対応)
#参考リポジトリ
https://github.com/rwakizaka7/ArchitectureIOs/releases/tag/v3
個人的には、ライブラリがしっかりローカルに保存されるので、SwiftPMより、
Cocoapodsの方が安心感があります。Github等のリポジトリ等が削除されても、
プロジェクトのPodsフォルダにライブラリがあるのでリポジトリ管理できる。##1. Homebruwのインストール
“`
% /bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
“`パスを通す(bash利用時は~/.bashrc)
“`
% vi ~/.zshrc
export PATH=$PATH:/opt/homebrew/bin
% source ~/.zshrc
“`##2. CocoaPodsのインストール
“`
$ sudo gem install cocoapods
$ pod setup
“`
【iOS】MatterのサンプルをiOSアプリとM5stackで試してみた
#はじめに
GoogleやAppleなどビッグテックが協力して策定しているMatterですが、つい先日のCES2022でも話題になっていて面白そうだなーと思い、iOSのサンプルを試して結構ハマったので備忘録です。#Matterってなに?
MatterとはConnectivity Standards Alliance(旧Zigbee Alliance)が策定しているIotの規格(プロトコル?)です。
もともとはCHIP(Project Connected Home Over IP)として立ち上げられたもので、2021年の5月にMatterという通信規格として発表されました。今までのIot機器はどれも設定方法がメーカー毎、機器毎に違っていて、Iot機器を買ってもセットアップが面倒というユーザーの困りごとと、乱立するIoT規格のどれに対応すればいいの状態だったメーカーの困りごとを解消するために、ビッグテックの面々が立ち上げたワーキンググループです。
確かに、これはアレクサで動くけど、GoogleHomeには対応してないとか、AppleのHomeKitに対応している製品はやたら高いし
iOSのスクリーンショットでコンテンツを消す方法
# はじめに
先日、PMからiOSアプリで動画配信画面のスクリーンショットや画面録画で撮られたときに
動画コンテンツの部分をNetflixやAmazon Prime Videoみたいに黒塗りにしたいけどできるかな?と相談を受けました。スクショ対策はAndroidは`WindowManager.LayoutParams.FLAG_SECURE`を付けておくだけで上手くやってくれるのですが、iOSは`UIApplication.userDidTakeScreenshotNotification`で撮影後にファイルを削除する(これもできるのか不明)などの情報ばかりでした。
そんな中、StackOverFlowに投稿されていた回答を試したところ**動作するOSバージョンに制限はあった**ものの期待通りの動きになったので、その検証結果の記事になります。
検証といってもそのまま試しただけですが、探しても成功事例の情報が少なかったので情報を流して、今後似たような対応をする方がいれば、その方の参考になればいいなと思います。
元ネタの回答はこちらです。
[Prevent screen cap
「The Ultimate Guide to WKWebView」をSwiftUIで実装する #03 – Loading local content –
[「The Ultimate Guide to WKWebView」](https://www.hackingwithswift.com/articles/112/the-ultimate-guide-to-wkwebvie)をSwiftUIで実装してみるの、
3つ目になります。## 目次
シリーズ化していこうと思うので、全体の目次を置いておきます。
リンクが貼られていないアジェンダは、記事作成中または未作成のものになります。|#|アジェンダ|
|——|—————–|—|
|01|[Making a web view fill the screen](https://qiita.com/kamimi01/items/b4d6cbafa587831c1be0)
(フルスクリーンのWebViewを作る)|
|02|[Loading remote content](https://qiita.com/kamimi01/items/c889979964820d5f9fa2)
(リモートのコンテンツを読み込む)|
|03|[Load
「The Ultimate Guide to WKWebView」をSwiftUIで実装する #02 – Loading remote content –
[「The Ultimate Guide to WKWebView」](https://www.hackingwithswift.com/articles/112/the-ultimate-guide-to-wkwebvie)をSwiftUIで実装してみるの、
2つ目になります。多少SwiftUIとWebViewに関係ない、というかiOS開発に関係ないコードも入っちゃってますが、
そういうのに触れるのも好きなので、そこら辺も混ぜ込んでます。必要なところだけお読みください。
## 目次
シリーズ化していこうと思うので、全体の目次を置いておきます。
リンクが貼られていないアジェンダは、記事作成中または未作成のものになります。|#|アジェンダ|
|——|—————–|—|
|01|[Making a web view fill the screen](https://qiita.com/kamimi01/items/b4d6cbafa587831c1be0)
(フルスクリーンのWebViewを作る)|
|02|[Loading
UIButtonを画面の最前面に出す!!
##はじめに
UIButtonを配置したものの、画面の背面に設置されてしまい、どうやったら前面に出すのか迷ってしまったので、解決方法を記述しておきます。
– – –
###結論から“`swift
view.bringSubviewToFront(UIButtonの名前)
“`
を実行すれば、UIButtonが前面に出てくれます。以下に具体例を載せておきます。
###TableViewを配置
コードでUITableViewを記述しています。
“`swift
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {let item = [“cell 1″,”cell 2″,”cell 3″,”cell 4″,”cell 5″,”cell 6″,”cell 7″,”cell 8″,”cell 9″,”cell 10”,]
override func viewDidLoad() {
override func v
Firebase Storageで処理がタイムアウトしないよー
##はじめに
Firebase Storage、アプリから便利に使ってますが、オフライン時に処理が全くタイムアウトしないことが発覚:joy:まあなんとかなったので、ご報告
##どうやる?
iOSは“`ObjC
FIRStorage *storage = [FIRStorage storage];
const int timeout=5; //5秒
storage.maxOperationRetryTime=timeout;
“`
これはdeleteするとき。Operation以外にUploadとDownloadもある。リトライだけど5秒で終わる。androidは
“`Java
FirebaseStorage storage = FirebaseStorage.getInstance();
final long timeoutMS = 5000; //5秒
storage.setMaxDownloadRetryTimeMillis(timeoutMS);
“`
なぜかdeleteはD