iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

iOS

NSCollectionLayoutDimensionの種類

iOSのCompositionalLayoutを使うにあたり、サイズを指定するためのNSCollectionLayoutDimensionの種類を調べたので軽くまとめておきます‍♀️ NSCollectionLayoutDimensionの種類 NSCollectionLayoutDimensionの種類は下記になります。 // dimension is comput…

【Swift】特定の文字列の置き換え

今回は下記のようなsemantic versioningのバージョンを 2.34.0 下記のような数値で取り出した際のメモです。(用は文字列操作) 2340 結論 StringProtocolのreplacingOccurrencesメソッドを使うことで、特定の文字列をリプレースできます。 let versionString …

【Swift】StackViewの乗ったXib(UIView)でSelf-Sizingしたい

結論 そのまま、取得したViewのsystemLayoutSizeFittingで、StackViewのAutoLayoutが反映されると思ったら、そんなことはなかった。 let v = CustomeView.instantiate() v.frame = .init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: v.systemLa…

【iOS】ScrollViewのトップに謎の余白が現れる

結論 iOS11からScrollViewの領域がsafeArea分の余白がデフォルトで追加されます。(完全に忘れてた) 結論から言うと、この余白を追加しないようにするためにはcontentInsetAdjustmentBehaviorで.neverを選択します。 scrollView.contentInsetAdjustmentBeha…

【iOS】The number of provided view controllers xxx doesn’t match the number required xxx for the requested spine location 対処法

久しぶりに、UIPageViewControllerを使ってたらうっかりミスに悩まされたので、後世に記事を残しておきます‍♀️ 結論 おそらく、あなたがそのエラーになっているのは、setViewControllersで複数のViewControllerを設定しているからでしょう。` setViewControl…

【iOS】InterfaceBuilderでCornerRadiusを設定する

iOS

本日もiOS初学者向けのTipsです‍♀️ 結論 User defined runtime attributesでlayer.cornerRadius項目を設定することで、コードベースからでなく、Interface BuilderからcornerRadiusを変更できるようになります。 ちなみにIBInspectableで下記のようにプロパ…

【Swift】Viewの制約に基づいたサイズを取得

結論 下記のようにして、AutoLayoutの制約などに基づいたViewのサイズを取得することができます。 ちなみにUIView.layoutFittingCompressedSizeは、UIViewのクラスプロパティで、可能な限りサイズを小さいサイズを返します。ここでは、制約内で最も小さくな…

【iOS】Signpostsでとりあえず計測をしてみる

Signpostsでとりあえず、メソッドの計測をしたので、本日はそのメモです‍♀️ やっていく まずは、計測するために必要なモジュールをインポートします。 import os.signpost 次に、計測したいメソッドを下記のようにマーキングします。今回はbind()というメソ…

【Swift】SafeAreaを取得する

今回もSwiftの超短い小ネタです‍♀️ 結論 iOS11以降からは、下記のようにUIViewのsafeAreaInsetsからSafeAreaの幅等を取得することができます。 UIApplication.shared.windows.filter { $0.isKeyWindow }.first?.safeAreaInsets.top ?? 0 てな感じで本日は以…

Swiftで単色のUIImageを生成する

本日はSwiftの小ネタです👷‍♀️ 結論 下記のようにして、単色のUIImageを取得することができます。UIGraphicsBeginImageContext()は、GraphicsContextを作成してスタックにプッシュします。次に、プッシュされたコンテキストをUIGraphicsGetCurrentContext()で…

【Swift】translatesAutoresizingMaskIntoConstraintsって結局なんなんだっけ?

SwiftのコードベースでAutoLayoutを設定する時によくやるこれ。 view.translatesAutoresizingMaskIntoConstraints = false view.widthAnchor.constraint(equalToConstant: 18).isActive = true view.heightAnchor.constraint(equalToConstant: 18).isActive …

【Xcode】必要なバイナリのみ生成するようにする

結論 XcodeのBuild Active Architecture Onlyを有効にすることで、開発時などに使う端末のアーキテクチャのバイナリのみを生成できるようになり、ビルド時間を削減することができるようになります。基本的には、デフォルトで有効になっています。(なぜかstag…

【Swift】タップスルーなViewを作成する

このViewのタップイベントをスルーして、背面にあるViewをタップできるようにしたいという場面は、たまに遭遇するかと思います。今回はそんな場面で使えるSwiftの小ネタについて書こうかと思います‍♀️ 結論 hitTest(_:with:)で受け取ったイベントが自分自身…

【Swift】TableViewで空のCellを表示しない

本日は初学者向けの内容で、UITableViewで空のCellを表示させないための簡易的な処理を紹介したいと思います‍♀️ よくあるこれです。 結論 tableFooterViewプロパティに空のUIView()をセットすれことで、空のCellが表示されないようになります。 tableView.ta…

【Swift】ユーザにアプリのレビューリクエストをする

最近ユーザにアプリのレビューリクエストを行う対応をしたので、備忘録として残しておきます✍️ ちなみにこれ。 結論 iOS10.3以降はこれでできる。ちなみにこのリクエストダイアログは一年で3回までしか表示できないらしいので注意が必要。 import StoreKit S…

【Swift】makeKeyAndVisibleってなにしてるんだっけ?

結論 makeKeyAndVisible は、windowを key window として設定することで、同一レベル(もしくは同一レベル以下)の windowの最前面に表示するためのメソッドです。 ちなみにレベルには下記のようなものがあり、LevelはrawValueとしてCGFloat値を持ちます。 ext…

【iOS】キーチェーンの概要

「セキュアなデータをローカルに保存したい!」時によく使うiOSのキーチェーンについて、初学者向けに超ざっくりな概要を書きました。 キーチェーンとは? キーチェーンは機密性の高いユーザ情報などを iCloud 領域にセキュアに保存する仕組みのことです。ま…

【Swift】Assertのあれこれ

今回はSwiftにあるassert 系メソッドのあれこれを調べていきたいと思います‍♀️ そもそもassertionとは? プログラムの実行時に満たされるべき条件をチェックして、条件を満たしていない場合はプログラムを停止したり、エラーを吐いたりする仕組みのことを言…

【Swift】UIView.animate で連続したアニメーションをする際のコールバック地獄をどうにかしたい

今回は Swift の UIView.animate で連続したアニメーションを実行する際のコールバック地獄を解消する方法を紹介したいと思います 結論 今回の悩みを解消できる素晴らしい記事があったので、車輪の再発明はしません✨ qiita.com Swift の Variadic Parameters…

【Swift】iOSのクリップボードにテキストを設定するメモ

本日は iOS のクリップボードにテキストを設定する方法をメモ程度に残しておこうかと思います 結論 とりあえずテキストを代入したい時はこんな感じで設定ができます。 UIPasteboard.general.string = "hoge" UIImage を設定したい場合はこんな感じ。 UIPaste…

【Swift】UIWindowを使用してポップアップを表示する

今回は、iOSアプリでポップアップを表示する際に UIWindow を使ってグローバルに表示できるような実装を行ったので、そのメモを残しておきます‍♀️ やっていく とりあえず、ポップアップを表示するための Class は下記のようになります。AppDelegate なんかで…

【Swift】アクセスコントロールを学ぼう

本日はちょっと記事を書く時間が取れなかったので、初学者向けの内容で Swift のアクセスコントロールについて紹介します‍♂️ 一覧 結論 Swift には下記のようなアクセス修飾子があります。ちなみにアクセス修飾子を付けない場合はデフォルトで internal にな…

GoogleMap と Map で経路表示するときのメモ

Google Map と Map それぞれの Custom URL Scheme を使って経路表示をする実装をしたのでメモ程度に残しておきたいと思います 結論 ということで、それぞれの経路表示を Alert として落とし込んだメソッドが下記になります。 執筆時点では、下記のような URL…

Carthageでインストールしたライブラリを削除しよう

とあるプロジェクトにて、Carthage でインストールしていたライブラリ達をそろそろ Swift Package Manager に移行しようということで、今回はそんな移行作業に必要な Carthage ライブラリの削除方法を紹介しようと思います‍♀️ Carthage もう使わないだったら…

iOSプロジェクトをとりあえずビルドできるようにするためのMakefileを作ってみた

とあるプロジェクトで Carthage のビルド済みバイナリをソース管理から除外したことで、今後の iOS プロジェクトのセットアップの手順が増えてしまったので、これを機に Makefile にプロジェクトのセットアップをまとめてしまおうという記事です‍♀️ 結論 と…

【Swift】Date から UNCalendarNotificationTrigger を生成するメモ

Local Notification を設定する際に、指定した日時でトリガーされるようにした時の UNCalendarNotificationTrigger の生成方法をメモしておきます 結論 結論としては下記のようになります。日時でトリガーする際に必要な UNCalendarNotificationTrigger は D…

Building for iOS Simulator, but the linked and embedded framework 'xxx.framework' was built for iOS + iOS Simulator 対処法

先日開発を行っているプロジェクトの Xcode バージョンを 12.0.1 から 12.4 に更新すると下記のようなエラーが発生していました 「シュミレーターのビルドでこけてるん?」と思い実機ビルドを試してみましたが、同じようなエラーが発生してビルドできません…

【Swift】Date で「〇〇日前」的なやつを表示する

今回は Swift の Date で、現在から特定の Date までがどの程度離れているかを示す Text の表示方法を簡単に紹介したいと思います 結論 今回は下記のように Date に Extension メソッドを追加し、1週間以上前の Date に関しては日付を取得できるようにしてみ…

Swift5.4 つまみ食い【SR-10069編】

ということで今回も Swift5.4 をちょろっと見てみます SR-10069 requested the ability to overload functions in local contexts, which in practice means nested functions can now be overloaded so that Swift chooses which one to run based on the t…

【Swift】TableView のセクションごとに Separator を出しわけよう

今回は UITableView で、セクションごとに Separator を出し分ける方法を紹介したいと思います‍♀️ 結論 Separator を表示したくない Cell の場合、下記のように UITableViewCell の separatorInset プロパティの値をうまく調整することで非表示にすることが…