xyk blog

最近は iOS 開発の記事が多めです。

macOS で BlackHole を使って音声付きで画面収録する

環境:macOS Sonama 14.2.1 macOS 環境で QuickTime Player を使って画面収録(ショートカットはCommand(⌘) + Shift(⇧) + 5)を行う場合、masOS上で再生されている音声は収録されない。 音声も同時に収録できるようにするため「Soundflower」という昔からある…

macOS で右クリックメニュー(コンテキストメニュー)をキーボードショートカットで実行する

検証環境: macOS Monterey 12.5 macOS で右クリックメニュー(コンテキストメニュー)をキーボードショートカットで実行する方法について。 実現する方法はいろいろあると思うが、今回は BetterTouchTool を使うことで簡単にできた。 今回自分がやりたかったこ…

Swift 画像表示ライブラリ Nuke で画像取得失敗時のレスポンスステータスコードを知りたい

検証環境: Xcode 13.4 Swift 5.6.1 Nuke 11.0.1 Swift の画像表示ライブラリである Nuke (https://github.com/kean/Nuke) で、画像取得に失敗した時のレスポンスステータスコードを知りたい状況があったのだが、Error 情報から取り出す方法がちょっと面倒だ…

zsh で実行に失敗したコマンドを履歴に残さない

zsh

zsh で実行に失敗したコマンドは履歴(.zsh_history)に残さないようにしたい。 以下を.zshrc に追加しておく。 precmdのタイミングでフックして、zsh の fc コマンドを利用して履歴から削除している。 autoload -Uz add-zsh-hook remove_last_history_if_not_…

UIViewController で画面表示時に1度のみ処理を実行する

検証環境: Version 13.2 (13C90) Swift 5.5.2 UIViewController で画面表示時に何か処理を1度のみ実行したい時に lazy stored property を使って簡潔に書くやり方。 override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) _ = vie…

Swift で月初・月末を取得する

検証環境: Xcode Version 12.5 (12E262) Swift 5.4 Swift で、ある月の月初・月末を取得する方法。 月初の取得は1日固定で取得するだけだが、月末の取得は月初から1ヶ月進めて1日戻すことで算出できる。 例1:2020年2月の月初と月末を取得する let calendar …

Git でブランチの派生元を間違えたときに git rebase --onto で修正する

git

やるたびに調べているのでメモ。 $ git rebase --onto (新しい派生元ブランチ名) (現在の派生元ブランチ名) (ブランチ名) 派生元がブランチでない場合はコミットID指定でもOK。 例: 間違えて develop から作成した feature/hoge ブランチの派生元を master …

表示中のマップ(MKMapView)領域内に含まれるアノテーション(MKAnnotation)を調べる

検証環境: Xcode Version 12.5 (12E262) Swift 5.4 iOS Deployment Target 11.0 表示中のマップ(MKMapView)領域内に配置されているアノテーション(MKAnnotation)を調べる方法について。 MKMapView.visibleMapRectで現在表示中の領域を取得し、MKMapView.anno…

Swift 5.3 からの Multiple Trailing Closures

Swift 5.3(SE-0279、SE-0286)から追加された Multiple Trailing Closures について。 例えば、UIView.animate メソッドのような引数に複数の Closure を持つ場合の Trailing Closure は Swift5.2 までは次のように書いていた。 UIView.animate(withDuratio…

iOS アプリがユニバーサルリンクから起動されたかを判定する

検証環境: Xcode Version 12.5 (12E262) Swift 5.4 ユニバーサルリンク(Universal Link)から iOS アプリが呼び出された場合にはAppDelegateのapplication(_:continue:restorationHandler:)メソッドが呼び出される。 これはアプリが 未起動状態からアプリ起動…

App内課金の審査が「審査待ち」から進まない

ios

App内課金の審査が審査待ち状態から進まなかった時の話。 アプリの審査については最近は1~2日で終わる。 今回は新規のアプリというわけではなく、追加で消耗型のApp内課金を追加したのだが、「審査待ち」状態のまま、何の音沙汰もなく1週間ほど過ぎてしまっ…

git でリモート追跡ブランチを解除する

git

検証環境: git version 2.23.0 git で特定のブランチが既に何かのリモートブランチを追跡している状態で、その追跡をやめる方法、そして再度追跡させる方法についてメモ。 リモートブランチの追跡を解除する 以下コマンドでリモートブランチの追跡が解除され…

Swift で少数第二位や第三位で丸め処理を行う

検証環境: Xcode 12.4 Swift 5.3.2 Swift で少数第二位や第三位で丸め処理を行う方法について。 例えば第二位で四捨五入したいのであれば、対象の少数値にまず10を掛けてからrounded()で四捨五入し、その後に10で割ればよい。 実行例 let pi = Double(3.1415…

Swift の Float(CGFloat) や Double で小数点の丸め処理を行う

検証環境: Xcode 12.4 Swift 5.3.2 Swift の浮動小数点数型である Float(CGFloat) や Double で小数点の切り捨て、切り上げ、四捨五入などの丸め処理をするには Swift3 から追加された FloatingPoint プロトコルの extension に定義されている roundedメソッ…

UITabBar の特定タブの選択時の色を変える

検証環境: Xcode 12.4 Swift 5.3.2 iOS Deployment Target 14.4 UITabBar 使用時に、特定タブ(UITabBarItem)のみ、選択時の色を変える方法について。 2つ目のタブを赤に変更 その他のタブはデフォルトの tint color タイトル文字色はtabBarItem.setTitleTex…

iOS14 での CLLocationManager の変更点

検証環境: Xcode 12.4 Swift 5.3.2 iOS Deployment Target 14.4 iOS で位置情報を取得するにはCLLocationManagerを使用するのだが、iOS14から使い方が少し変更になったのでメモ。 1つ目がアプリが位置情報サービスの使用するための承認ステータスauthorizat…

MKAnnotation ピンの画像をカスタマイズする

検証環境: Xcode 12.4 Swift 5.3.2 iOS Deployment Target 14.4 マップ(MKMapView)上のピンの画像をデフォルトのものではなく別の画像にカスタマイズする方法について。 iOS11からマップビューにデフォルトでMKMarkerAnnotationViewが登録されているので、ma…

マップ(MKMapView)上にピンを立てる

検証環境: Xcode 12.4 Swift 5.3.2 iOS Deployment Target 14.4 マップ(MKMapView)を表示してピンを立てるだけの簡単な実装例。 マップビューにピンを追加するには、MKAnnotationプロトコルを適合したクラスを用意して、位置情報CLLocationCoordinate2Dを設…

git で別ブランチから特定のファイルを取得する

git

検証環境: git version 2.23.0 git で別ブランチから特定のファイルを取得する方法について。 ステージされている状態でファイルを取得する $ git checkout <別ブランチ名> path/to/file ステージされていない状態でファイルを取得する $ git show <別ブラ…

Swift - Struct のイニシャライザを Xcode で自動生成する

検証環境: Xcode 12.4 Swift 5.3.2 Swift の Struct にはデフォルトで暗黙的なイニシャライザ init メソッドが定義されているので自分で実装する必要ないのだが、public structで定義して別モジュールから import して使う場合は使用できない。 以下の Initi…

Swift - UIBezierPath でクーポン風画像のパスを描く

検証環境: Xcode 12.4 Swift 5.3.2 UIBezierPath のよるお絵描きシリーズ。 今回は UIBezierPath を使って、以下のようなクーポン用画像としてよく使われる図形をを描いてみる。 Playground コードサンプル import UIKit import PlaygroundSupport class Cou…

UICollectionViewCell の Self-Sizing で動的にセルサイズを調整する

検証環境: Xcode 12.4 Swift 5.3.2 UICollectionViewCell の Self-Sizing 機能でコンテンツに基づいて動的にセルサイズを調整する方法について。 まず今回 UICollectionView を使って実現したいレイアウトは横幅が画面幅(collectionView.frame.width)で、縦…

UICollectionView で複数 Section の Header と Footer を表示する

検証環境: Xcode 12.4 Swift 5.3.2 UICollectionView で複数セクションのヘッダーとフッターを表示する方法について。 StoaryBoard 設定 まず StoryBoard で Root View に UICollectionView 及び UICollectionViewCell のビューを設置しておく。 UICollectio…

メニューバーに常駐する masOS アプリを作る

検証環境: Xcode 12.4 Swift 5.3.2 メニューバーに常駐する簡単な masOS アプリを作ってみる。 まず Xcode のプロジェクト作成から macOS -> App テンプレートを選択する。 AppDelegate.swift ファイルに以下コードを書く。 NSMenu と NSMenuItem でメニュー…

macOS でのカーソル移動の高速化

macOS でのカーソル移動の高速化をシステム環境設定からではなくdefaultsコマンドで変更する方法について。 システム環境設定からキーのリピート、リピート入力認識までの時間ともに最速に設定しているが、defaultsコマンドを使うことでさらに高速化できる。…

Apple Pay にメルペイを登録する手順

Apple Pay にメルペイを登録したのでそのときのスクショメモ。 Wallet に追加された。

Apple Pay に Visa LINE Pay プリペイドカード(バーチャルカード)を登録する手順

Apple Pay に Visa LINE Pay プリペイドカード(バーチャルカード)を登録したのでそのときのスクショメモ。 Wallet に追加された。

UICollectionView でタグクラウド風のレイアウトを実現する

検証環境: Xcode 12.4 Swift 5.3.2 UICollectionView を使ってタグクラウド風にセルが並ぶレイアウトを実現したい。 UICollectionView のデフォルトのレイアウトである UICollectionViewFlowLayout をそのまま使うと以下のようにセル間にスペースが入ってし…

UICollectionView のセルサイズを指定しても反映されない時

検証環境: Xcode 12.4 Swift 5.3.2 UICollectionView のセルサイズを、 UICollectionViewFlowLayout.itemSizeプロパティ またはUICollectionViewDelegateFlowLayoutデリゲートのcollectionView(_:layout:sizeForItemAt:)メソッド を実装してセルサイズ(CGSiz…

UICollectionViewCell の横幅を計算する

検証環境: Xcode 12.4 Swift 5.3.2 UICollectionView のセルの横幅をいい感じに調整する方法について。 前提条件として、セルの並び方向はデフォルトのflowLayout.scrollDirection = .vertical、セルのサイズは正方形ですべてのセルが同じサイズであること。…