えいむーさんは明日も頑張るよ

iOSアプリでZipをダウンロードしてプログラム内で利用する

背景 iOS アプリ内で例えば画像を利用したい場合は、Assets にファイルを格納してリリースするのが一般だと思われる。 しかし、この方法ではアプリのアップデートなしに Assets を更新することができない。 また、ライセンス上の問題で Assets として同梱できないような場合にも問題が発生する。これを回避するために、インターネットを利用して Assets を取得し、それをアプリ内で利用する ...

SwiftUIのSearchableを理解せよ

SwiftUI3.0 から実装された Searchable SwiftUI は肝心な機能がなかったりでうーんとなる場面も多かったのですが、SwiftUI3.0 でそれがいくらか改善されています。 例えば、今まではリストを検索するみたいな機能もなかったのですが、それがSearchableという機能として実装されています。 詳しくは公式ドキュメントを読んでもらうとして、これがどのように利用可能であるか ...

SwiftUIのレイアウトで使えるテクニック

SwiftUI のレイアウトテクニック SwiftUI では UIKit と違って直接的な制約条件などがない。 よって相対座標や絶対座標によってフレーム内にオブジェクトを配置していくのだが、ここの理解がかなり曖昧だったのでそこをしっかりと理解していく。 GeometryReader 本ブログで何回も登場しているよくわからないコンポーネント。 大事なのはこれ自体はフレームサイズを提供しないということ ...

Combineを理解しよう

Combine Combine とは Apple 公式の非同期処理のフレームワークのこと。 使い方がさっぱりわからなかったのだが、最近ようやくちょっと理解できてきたので忘れないために書いておく。 Combine の基本 Publishersで非同期処理を定義して、それをSubscribersで購読することで実行されます。また、出力される値などを加工することができるOperatorsもあります。 P ...

構造体をEquatableに準拠させる

構造体と Equatable 構造体は便利なのだが、何かしらの処理をするときにそういう処理が定義されていないことが多い。 例えば、以下のような構造体を定義したとしよう。 struct Person { let name: String let age: Int } そして、今回は名前は全てユニークで重複がないものとして考える。もしも名前がユニークでないのであれば適当にユーザ ID などを割り当てれ ...

SwiftPackageManagerに複数のライブラリを同梱する

SwiftPackageManage SwiftPackageManager(以下 SPM)の仕様はわからないところが多い。というのも、ドキュメントを見てもよくわからないからだ。 例えば、ライブラリによっては取り込んだときに複数のモジュールが同梱されている場合がある。アレはどのように実装されているのか考えてみよう。 Package.swift 例えば、CocoaLumberjack というログライ ...

Delegateパターンを理解する

Delegate とは Delegate とはあるクラスからの処理の一部を別のクラスに委譲するための仕組みのこと。 何かをすることは決まっているけれど、何をするかは時と場合によって変更したいときに使えます。なお、ここで紹介しているコードは全て Playground 上で動作します。チェックに使ってみてください。 Delegate を定義しよう 基本的には Delegate はプロトコルで定義されま ...

タッチしたときに振動するアレを実装する

タッチするときに振動するアレ タッチするときに振動するアレとは iPhone8 以降で実装された軽く震えるアレです。例えば、Twitter で RT とかしたときに軽く震えますよね、アレです。 他にはトグルを切り替えたときにも軽く震えますよね、アレです。 で、あの機能はUINotificationFeedbackGeneratorを使って実装されています。 あの振動があれば、小さいボタンや反応に時 ...

GoogleMobileAdsをiOSアプリに組み込む

GoogleMobileAds 必要なもの Admob アカウント(一人一つしか持てないので注意) SPM 対応のGoogleMobileAds 広告ユニットの作成 広告ユニットを作成すると二つの ID が生成されます。 // 共通ID [Info.plist] ca-app-pub-XXXXXXXXXXXXXXXX~YYYYYYYYYY // ユニットID [View] ca-app-pub-X ...
    えいむーさんは明日も頑張るよ © 2022