酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

開発

DevelopersIOで2024年10月に執筆した記事

技術系の記事はDevelopersIOで執筆することにした。一方、すぐに修正されそうなトピックやワークアラウンド的な内容は記事の寿命が短くなる可能性があるため、引き続き「酢ろぐ!」で書くことにしている。 毎月の終わりには、DevelopersIOで執筆した記事への…

DevelopersIOで2024年9月に執筆した記事

技術系の記事はDevelopersIOで執筆することにした。一方、すぐに修正されそうなトピックやワークアラウンド的な内容は記事の寿命が短くなる可能性があるため、引き続き「酢ろぐ!」で書くことにしている。 毎月の終わりには、DevelopersIOで執筆した記事への…

DevelopersIOで2024年8月に執筆した記事

技術系の記事はDevelopersIOで執筆することにした。一方、すぐに修正されそうなトピックやワークアラウンド的な内容は記事の寿命が短くなる可能性があるため、引き続き「酢ろぐ!」で書くことにしている。 毎月の終わりには、DevelopersIOで執筆した記事への…

DevelopersIOで2024年7月に執筆した記事

技術系の記事はDevelopersIOで執筆することにした。一方、すぐに修正されそうなトピックやワークアラウンド的な内容は記事の寿命が短くなる可能性があるため、引き続き「酢ろぐ!」で書くことにしている。 毎月の終わりには、DevelopersIOで執筆した記事への…

DevelopersIOで2024年6月に執筆した記事

技術系の記事はDevelopersIOで執筆することにした。一方、すぐに修正されそうなトピックやワークアラウンド的な内容は記事の寿命が短くなる可能性があるため、引き続き「酢ろぐ!」で書くことにしている。 毎月の終わりには、DevelopersIOで執筆した記事への…

DevelopersIOで2024年4月に執筆した記事

技術系の記事はDevelopersIOで執筆することにした。理由は、技術記事の信頼性や検索性を高めるためである。一方、すぐに修正されそうなトピックやワークアラウンド的な内容は、記事の寿命が短くなる可能性があるため、引き続き「酢ろぐ!」で書くことにして…

DevelopersIOで2024年3月に執筆した記事

技術系の記事はDevelopersIOで執筆することにした。一方、すぐに修正されそうなトピックやワークアラウンド的な内容は記事の寿命が短くなる可能性があるため、引き続き「酢ろぐ!」で書くことにしている。 毎月の終わりには、DevelopersIOで執筆した記事への…

DevelopersIOで2024年1月に執筆した記事

技術系の記事はDevelopersIOで執筆することにした。一方、すぐに修正されそうなトピックやワークアラウンド的な内容は記事の寿命が短くなる可能性があるため、引き続き「酢ろぐ!」で書くことにしている。 毎月の終わりには、DevelopersIOで執筆した記事への…

DevelopersIOで2023年12月に執筆した記事

技術系の記事はDevelopersIOで執筆することにした。一方、すぐに修正されそうなトピックやワークアラウンド的な内容は記事の寿命が短くなる可能性があるため、引き続き「酢ろぐ!」で書くことにした。 毎月の終わりには、DevelopersIOで執筆した記事へのリン…

DevelopersIOで2023年11月に執筆した記事

技術系の記事はDevelopersIOで執筆することにした。一方、すぐに修正されそうなトピックやワークアラウンド的な内容は記事の寿命が短くなる可能性があるため、引き続き「酢ろぐ!」で書くことにした。 毎月の終わりには、DevelopersIOで執筆した記事へのリン…

お手軽多言語対応!GoogleドキュメントのスプレッドシートからiOSとAndroidの文字列リソースを生成 (2023年10月版)

多言語対応アプリの開発は非常に大変だ。特に、アプリ内で使用される各種テキストを管理する「文字列リソース」の取り扱いについては、更新や検証に多大な労力を要する。この課題を解決するために、csv2strings というスクリプトを公開した。 csv2strings は…

RevenueCatで `The receipt is not valid.` エラーが発生して、共有シークレットを更新してもエラーが解決できなかった

アプリ開発界隈で、課金管理をスムーズに行うために多くの開発者が利用する「RevenueCat」だが、導入する際に「The receipt is not valid.(レシートが無効です)」というエラーが発生する。 これは大抵の場合、「アプリ固有の共有シークレット」が間違って…

`bundle exec pod update` 実行時に `bundler: failed to load command: pod` エラーが発生する

2023年10月7日の activesupport のアップデートによって CocoaPods が使えなくなった。すぐに修正されると思うが、直近で困ってる方のために備忘録を残す。 bundler: failed to load command: pod エラーが発生する bundle update のあと、 bundle exec pod …

macOS Sonoma (14.0)で OS X El Capitan の USBインストーラーを作成する

MacBook Air (11-inch, Mid 2011)でリカバリができなくなってしまった。 内部ストレージとインターネットの両方で再インストールが失敗。MacBook Pro (2021)を使用してMac OS X El CapitanのUSBインストーラーを作成することにした。 本当はMBAの初期OSであ…

Xcode 15.0 アップデート後、R.swift の ColorResource や ImageResource の extension でエラーが発生する

さくさんは Assets.xcassets や Colors.xcassets にアクセスするために R.swift を愛用している。Xcode 15.0 アップデート後、R.swift の ColorResource や ImageResource の extension でエラーが発生するようになった。 R.swift の ColorResource や Image…

Xcode 15.0 アップデート後、CocoaPods経由でインストールした Firebase Apple SDK でコンパイルエラーが発生する

Xcode 15.0へのアップデート後、CocoaPods経由でインストールしたFirebase Apple SDKでコンパイルエラーが発生する。 解決方法 CocoaPods 1.13.0 のリリースされると、この問題は解消される見込みである。ただし v1.13.0がリリースされるまでの間は、ワーク…

macOSで librsvg を使って SVG から PNG へ変換する

大量にある SVGファイルを PNGファイルへ変換したい。 大量にある SVGファイルの例(例:国旗アイコン) 本記事では、rsvg-convert コマンドを使って、指定したディレクトリ内のSVGファイルをPNGファイルに変換する方法を以下に説明する。 rsvg-convert のイ…

Intel Macを初期化するために Mist を使用してUSBインストーラーを作成した

家庭内サーバーマシンをリプレイスした。いままで使っていた Mac mini (Late 2014) が不要になったため、Mist を使って USBインストーラーを作成して初期化した。 あらすじ 今年の3月に「ThinkCentre M715q Tiny」を譲ってもらった*1。しかし、デスクトップ…

Cloud Firestore の Collection references は偶数個のセグメントだと例外が発生する

長いあいだ、Swift でのデータ操作が煩雑な Cloud Firestore を使う気になれなかったのだが、いつのまにか Swift Concurrency に対応していた。async / await が使えると話が変わってくる。格段に使いやすくなっていたので、お試しで簡単なアプリを作ってみ…

iOSユニットテストでテスト専用リソースの組み込みと利用方法

たとえば画像識別アプリを開発中には、テスト画像を Bundle からロードして、画像を識別してその結果を評価するユニットテストを作成する。または、HTMLをスクレイピングするアプリを開発中には、ダミーのHTMLを Bundle からロードして、スクレイピング処理…

Python を使って Gmail からメールを送信する

自宅サーバーでは毎日メールを送信するバッチを処理している。これまではmacOS上のJenkinsで動かしていたため、Swiftで実装したプログラムを使用していたが、JenkinsをWindowsマシンへ移行することに伴い、Pythonへ移植することにした。 本記事では、Python…

SwiftUI で検索モードを解除する。dismissSearch() は searchableモディファイアを設定したViewの 子View でないと使えない

本文はあとで書く。 developer.apple.com dismissSearch() を実行すれば、検索モードがオフになり、検索バーに入力していたテキストもキーボードも消える。 Sets isSearching to false. Clears any text from the search field. Removes focus from the sear…

Misskey .py を使って画像を添付したステータスを misskey.io へ投稿する

Python を使って、画像を添付したステータス「Hello, Misskey!」を misskey.io へ投稿する方法を紹介する。 Mastodon.py のインストール Python で Misskey にメッセージを投稿するには Misskey.py というパッケージを使用する。Python から Misskey API に…

atproto を使って画像を添付したステータスを Bluesky へ投稿する

Python を使って、画像を添付したステータス「Hello, Bluesky!」を Bluesky へ投稿する方法を紹介する。 atproto のインストール Python で Bluesky にメッセージを投稿するには atproto というパッケージを使用する。Python から Bluesky (AT Protocol) に…

atproto を使ってステータスを Bluesky へ投稿する

Python を使って、Bluesky に「Hello, Bluesky!」と投稿する方法を紹介する。 atproto のインストール Python で Bluesky にメッセージを投稿するには atproto というパッケージを使用する。Python から Bluesky (AT Protocol) に簡単にアクセスするためのツ…

Swift で上付き文字・下付き文字を表示させる

iOSアプリで「H₂O」や「x²」のような上付き文字や下付き文字を表示する方法について調査する機会があった。 さくさんは、2010年頃(iPhone OS 3.xの時代)からiOSアプリの開発を行っているが、上付き文字や下付き文字を扱うのは今回が初めてだった。他の多く…

Flutterで、Firebase Authentication の認証プロバイダーの増減を監視する

Firebase Authentication を使った Flutter アプリを開発している。ログインプロバイダーが増減したときのイベントを取得したい。 たとえば、ユーザーアカウントに Apple アカウントが接続されている時には「Appleアカウントと連携中!」と表示し、接続解除…

Misskey .py を使ってステータスを misskey.io へ投稿する

Python を使って、misskey.io に「Hello, Misskey!」と投稿する方法を紹介する。 Mastodon.py のインストール Python で Misskey にメッセージを投稿するには Misskey.py というパッケージを使用する。Python から Misskey API に簡単にアクセスするためのツ…

Mastodon .py を使って画像を添付したステータスを Mastodon へ投稿する

Python を使って、画像を添付したステータス「Hello, Mastodon!」を Mastodon へ投稿する方法を紹介する。 Mastodon.py のインストール Python で Mastodon にメッセージを投稿するには Mastodon.py というパッケージを使用する。Python から Mastodon API …

Mastodon .py を使ってステータスを Mastodon へ投稿する

Python を使って、Mastodonに「Hello, Mastodon!」と投稿する方法を紹介する。 Mastodon.py のインストール Python で Mastodon にメッセージを投稿するには Mastodon.py というパッケージを使用する。Python から Mastodon API に簡単にアクセスするための…