- 1. Viewのタップイベントを透過させる(Swift)
- 2. 「The Ultimate Guide to WKWebView」をSwiftUIで実装する #04 – Loading HTML fragments –
- 3. [RxSwift6.0] withUnretained(_: )オペレータについて
- 4. CocoaPodsのまとめ(Xcode13.2.1、M1チップ対応)
- 5. 【iOS】MatterのサンプルをiOSアプリとM5stackで試してみた
- 6. iOSのスクリーンショットでコンテンツを消す方法
- 7. 「The Ultimate Guide to WKWebView」をSwiftUIで実装する #03 – Loading local content –
- 8. 「The Ultimate Guide to WKWebView」をSwiftUIで実装する #02 – Loading remote content –
- 9. UIButtonを画面の最前面に出す!!
- 10. Firebase Storageで処理がタイムアウトしないよー
- 11. carthage で “API rate limit exceeded ~ ” と表示された場合の対処法
- 12. 【Flutter】アラート(ダイアログ)のカスタムウィジェット作ったので共有しておきます
- 13. WidgetKitで天気予報アプリ作ってみた〜Widget Extension追加編〜
- 14. [Swift] Doubleを少数第x位まで表示させる方法
- 15. 【Swift】ActiveLabelの実装
- 16. Androidアプリエンジニアへ〜〜【Xcode】でUIScrollViewを動かしてみる。
- 17. 【Flutter × Codemagic】WindowsでiOSアプリを実機テストした手順
- 18. アプリでよくみる円形のProgressView
- 19. iOSのWebViewで任意のCookieを送信するには
- 20. 【Swift】Combine入門レベルのまとめ
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
carthage で “API rate limit exceeded ~ ” と表示された場合の対処法
# 問題
Carthageでライブラリをチェックアウトするタイミングで、
“`
*** Skipped downloading SnapKit binary due to the error:
“API rate limit exceeded for xxx.xxx.xxx.xxx. (But here’s the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)”
“`このようにAPI制限された場合の対処法。
# 環境
“`
$ carthage version
0.38.0
“`# 対処法
`~/.zshrc` などに Github Access Token を追加する。
“`
export GITHUB_ACCESS_TOKEN=”xxx” carthage checkout
“`# 参考
https://github.com/Carthage/Carthage/issues/2
【Flutter】アラート(ダイアログ)のカスタムウィジェット作ったので共有しておきます
#アラート(ダイアログ)のカスタムクラス作ったので共有しておきます
Flutterモバイルのダイアログになります。
iOSとAndroidでネイティブっぽいダイアログが出したかったので
色々探した上、今後自分自身よく使うだろうからカスタムウィジェット作りました。
良かったら使ってください。フォントとかフォントサイズとかなるべく寄せてますが(主にiOS)
気に入らなければ適宜変更してください。参考にさせていただいた記事
https://dev.classmethod.jp/articles/flutter_platform_ui1/##Alertクラス
とりあえずクラス全文“`Dart:alert.dart
import ‘package:flutter/cupertino.dart’;
import ‘package:flutter/material.dart’;
import ‘dart:io’;
import ‘package:google_fonts/google_fonts.dart’;class AlertButton {
final String
WidgetKitで天気予報アプリ作ってみた〜Widget Extension追加編〜
## 投稿の経緯
前回投稿した[WidgetKitで天気予報アプリ作ってみた〜位置情報取得&保存編〜](https://qiita.com/nkekisasa222/items/249240ad36128de05557)の続編です。
今回は**Widget Extension**を追加して**Widget Bundle**を設定するとこまでを書こうと思います。前回の記事を見てない方は先に↓こちら↓を確認してください。
https://qiita.com/nkekisasa222/items/249240ad36128de05557
## 開発環境
Swift 5.5
Xcode 13.2.1## サンプルプロジェクト
GitHubにPushしています。気になる方はご覧ください。
https://github.com/ken-sasaki-222/WeatherWidget
![QR_615642.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/8c43013f-9757-f7dd-
[Swift] Doubleを少数第x位まで表示させる方法
##はじめに
今回解決したい問題は、
Double型の**3.5 → 3.50** という表示にする方法です。
これだけではイメージが湧きにくいので具体例を用いていきましょう。##前提
Double型は少数を扱えるのですが、例えば下記のようなDoubleをStringに変換するコードの場合、
不要な0(この場合、少数第二位)が勝手に切り捨てられてしまいます。“`swift
let hoge: Double = 3.50
let string = String(hoge)print(string)
//3.5 ←0が切り捨てられてしまいます。
“`
これでは何かの平均をだして少数第x位まで省略せずにlabelに表示させたいなどのユースケースの場合にとても不便です。そのような場合に下記の処理を書くことで解決できます。
“`swift
let hoge: Double = 3.50
let string: String = String(format: “%.2f”, hoge)print(string)
// 3.50 ←0が切り捨てられない。
“`
【Swift】ActiveLabelの実装
#はじめに
リンク、ハッシュタグ、メンションを埋め込みたい時にとても簡単に実装することができます。
とても使用する機会が多いライブラリの一つなので、自分の為の備忘録です。
SNSアプリを制作する際にはほぼ必須な気がしています。https://github.com/optonaut/ActiveLabel.swift
#実装
“`swift
import UIKit
import ActiveLabel
import SnapKitfinal class ViewController: UIViewController {
// リンクの実装
private let urlLabel = ActiveLabel()
@IBOutlet weak private var urlView: UIView! {
didSet {
urlView.addSubview(urlLabel)
urlLabel.snp.makeConstraints { $0.edges.equalToSu
Androidアプリエンジニアへ〜〜【Xcode】でUIScrollViewを動かしてみる。
【この記事は、iOSアプリを作成しようとしているandroidアプリエンジニアを想定しています】
特定のフレームワークで開発をしていると、そこでの考え方が期せずして定着してしまい、他のフレームワークで開発するときに妨げになることがあります。
私はもともとAndroidでアプリを開発しており、同じアプリのiOS版を作ろうとして “Xcode” という魔に足を踏み込みました。
iOSアプリを作ろうとして困ったことは多々ありますが、中でもUIScrollViewの挙動が最も理解不可能でした。
そんな理解の甘さが災いして、UIScrollViewの仕様を変更しなければならないことがあり、一念発起して勉強した結果、完全に理解した←のでまとめてみたいと思います。
手短に実装を知りたい人は3.から読み始めてください#1. Androidの場合
まず、androidのScrollViewをおさらいしておきましょう。
androidではScrollViewタグの中に、適当なLayout(ConstraintLayoutなりLinearLayoutなり)を入れて、その中にスクロールさせたいもの
【Flutter × Codemagic】WindowsでiOSアプリを実機テストした手順
初めての投稿なので間違い等ありましたら、ご指摘いただけますと幸いです。
# はじめに
FlutterとCodemagicを組み合わせて、Macを使わずにiOSアプリを実機テストする手順を紹介します。主に下記ページを参考にしました。
https://qiita.com/kami_teru/items/c7ed113d0ecdf7e48ff0
この記事は、
・Flutterのサンプルプログラムを作成し、GitHub(GitLabまたは、Bitbucket)にpushしてある。
・Apple Developer’s Programに登録するため、「**カードで約12,000円支払える**」かつ「**支払い後、最大48時間(2営業日?)待てる余裕がある**」が、「**~~Macが買えない!!or~~Macを持っていない**」
という人向けです。サンプルプログラムの作成、リモートリポジトリへのpushがまだの方は下記を参考にするとできると思います。
[【超初心者向け】Visual Studio Code(VSCode)超入門 – 2020年版](https://qiita.com
アプリでよくみる円形のProgressView
#進行状況を円形で表示する方法です
![Feb-02-2022 11-35-07.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/68fde8d8-dd36-e40a-3554-caf4aac22c0c.gif)#円形のプログレス・ビューを表示したい
棒状のProgressBarならUIKitにありますが、アプリなどでよくみる円形のProgressを表示したい。#KDCircularProgressでかんたんに表示
便利なライブラリを使ってかんたんに表示します。https://github.com/kaandedeoglu/KDCircularProgress
リポジトリからKDCircularProgress.swiftファイルをプロジェクトにドラッグ&ドロップします。
CircularProgressをセットアップします。
“`swift
var progress = KDCircularProgress(frame: CGRect(x: 0, y: 0, width
iOSのWebViewで任意のCookieを送信するには
iOSのWebViewで任意のCookieを送信する場合、WKHTTPCookieStoreにCookieをセットすることで実現できます。
実装パターンとしてはアプリの自動ログインなど、API経由などで取得したセッションCookieを送信するなどがあります。結構前の話になりますが、WKHTTPCookieStoreが使えなかった時代(iOS11未満)は、WKWebViewの`evaluateJavaScript`なんかを使ってJavaScriptで`document.cookie = “foo=bar”;`のようにセットしたりしていました。
この場合、初回ロード時にはタイミング的には当然このJavaScriptが実行前の状態になるので未ログイン状態の画面になってしまうため、NSMutableURLRequestでヘッダにCookieヘッダを詰め込む必要があったり、いろいろ苦労した思い出があります。以下は、WebViewにCookieをセットする簡単な例です。
“`
import WebKitclass PrivateWebViewController: UIViewCo
【Swift】Combine入門レベルのまとめ
## この記事でわかること
Combineを利用する上で理解が必須になってくる– Publisher
– Subscriber
– Subject
– Operatorの関係性をシンプルなサンプルコードを使って説明していきます。
## Combineとは
iOS13から追加されたApple純正のFrameworkです。
Swiftのみで利用可能で、Objective-Cでは利用できないようです。Combineの特徴を簡単に言葉にしてみると、
`イベントを発行する側と受け取る側に分かれて、あるイベントが発行されたら、それを受け取った側の処理が走ることを容易にしたフレームワーク`
という感じで捉えています。公式ドキュメントを呼んでみるとこんな説明が、
By adopting Combine, you’ll make your code easier to read and maintain, by centralizing your event-processing code and eliminating troublesome techni