酢ろぐ!

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

開発

Colab でマウントしている Google Drive に対してファイル書き込み後、書き込んだランタイムからは参照できるのに、別のランタイムからはファイルが見えない

Google Colaboratory (以下Colabと記す) に Google Drive をマウントし、大きい .tar ファイルを解凍して Google Drive に保存した。解凍をした Colab ランタイム側ではファイルが確認できるが、別のランタイムからは解凍したファイルが見られないという問題…

Cloudflare R2 で静的サイトを公開する

CloudFront + S3 で https://ch3cooh.net/ をホストしている。このサイトでは単に welcome! としか表示しない。特に何をやっているわけではなく、AdMob で規定されている 「アプリ向けの認定販売者宣言システム(app-ads.txt)」置き場である。そのためでき…

Cloudflare でカスタムメールアドレスを作成して任意のメールアドレスへ転送する

ドメインを所有している証明として info@example.com か webmaster@example.com にメールを送ってくるサービスがあった。このためだけに現在「さくらのメールボックス」を契約している。 Cloudflare には info@example.com や webmaster@example.com などの…

ドメイン管理を AWS Route 53 から Cloudflare に移管した

2022年11月に AWS Route 53 のドメイン更新料が値上げされた。一時期と比較してマシになったとは言えるものの円安傾向にある今日日 $1 の値上げでもドメイン数があると結構厳しいなと思っていた。 先日「Route 53 から Cloudflare にドメイン移管したい」と…

Parallels Desktop 18 for Mac を導入した

Parallels Desktop 18 for Macが、ARM版の「Windows 11 Pro」と「Windows 11 Enterprise」の動くソリューションとして正式に Microsoft による認証を受けたと話題になっていたのでこの機会に導入してみた。 Parallels Desktop 18 Retail Box JP(通常版)/仮想…

CoreML 向けの mlmodel モデルで物体検出/物体識別が可能なラベルの一覧を取得する

CoreMLでは画像識別/オブジェクト検出をおこなう機械学習モデルは .mlmodel または .mlpackage ファイルである。モデルファイルをダブルクリックするとXcodeが開き、下図のようにメタデータが表示される。 ここに表示されている Class Labels が検出または識…

Flutter で Riverpod を利用してデバイス名やデバイスのOSバージョンを取得する

Flutter でデバイス名やデバイスのOSバージョンを取得するためには device_info_plus と apple_product_name を利用する。riverpod での利用を想定しており、本記事で紹介するサンプルコードでは FutureProvider を使っている 。 device_info_plus では iOS…

Flutter for macOSで firebase_core と flutter_secure_storage をインストールしたときにビルドに失敗してしまう

FlutterでFirebaseを使うために firebase_core および flutter_secure_storage を導入したところ、ビルドエラーが発生してしまうようになった。iOSでは問題なくビルドできているが macOSの場合に問題が発生するようだ。 pub.dev pub.dev firebase_core を導…

Flutter for macOSアプリで twitter_login パッケージを使った場合にTwitterログインが失敗する

開発には MacBook Proを使っているが、Flutter でのデバッグ実行で最速なのは「macOS (desktop)」だと思う。そのため画面遷移のテストなどは macOSアプリで動作確認している。 現在、Twitter APIを利用するアプリを開発しているが、煩雑なログイン処理のため…

KMMライブラリをiOSプロジェクトから利用する

Kotlin Multiplatform Mobile (以下KMM)を使ってアプリを開発したいと考えている。 将来的には Jetpack Compose を使って UI を実装すれば、Flutter のように共通のコードで iOS側でも実行できるようになるようだが現時点では難しそうだ。Android Studio 上…

iOS 16 の場合、SwiftUI の List で セクションヘッダー上部にマージンが入ってしまう

iOS 15 / iOS 16 の場合、SwiftUI の List で セクションヘッダーに top padding (top margin?) が入ってしまう問題がある。 ヘッダー上部にマージンが入る現象自体は iOS 15 の時にも発生していたが UITableView.appearance().sectionHeaderTopPadding = 0 …

NovelAI では同一プロンプト・同一シードでも同一の画像を生成できない

NovelAI では同一パラメータ(プロンプト・シードなど)でも同一の画像を生成できないのではないかと思い検証をおこなった。 結論としては「ピクセルベースで同一画像の生成はできない」であった。 2022年10月17日、NovelAI はユーザー数の増加に処理を捌きき…

Xcode 14.0 と iOS 16 シミュレータの使用時、AdMob SDKの初期化をおこなうとセキュリティワーニングが表示される

アプリの起動時に紫色の警告が表示されるようになった。 調査したところ、Xcode 14.0 と iOS 16 シミュレータの使用時に AdMob SDKの初期化をおこなうと、このセキュリティワーニングが表示されるようだ。 AdMob SDKの初期化をおこなうとセキュリティワーニ…

Androidで 背景色に応じた見やすい文字色を求める

ユーザーがタグ色を選択できるプロダクトの場合、ユーザーが決めた色の上にテキストを配置しなければいけない。たとえば、下図の GitHub のタグのような場合である。 背景色に応じて、視認しやすいテキストカラーが利用されていることがわかる。 enhancement…

Swiftで 背景色に応じた見やすい文字色を求める

ユーザーがタグ色を選択できるプロダクトの場合、ユーザーが決めた色の上にテキストを配置しなければいけない。たとえば、下図の GitHub のタグのような場合である。 背景色に応じて、視認しやすいテキストカラーが利用されていることがわかる。 enhancement…

flutter で go_router を使って画面遷移する

注意:go_router は現在更新頻度が高くバージョンアップも頻繁におこなわれています。この記事は go_router v3.x時代に書かれたもののため、現行の go_router では動かない可能性があります。ご注意ください。 flutter での画面遷移に躓いたので「flutterで…

iOS/macOSでFFmpegを使ってh264エンコードすると画質が悪くなる問題 (h264_videotoolbox vs libx264)

iOSアプリにtanersener/ffmpeg-kitを組み込んで、iPhoneで録画した動画をffmpegを使ってh264エンコードするとどの動画にもノイズが入る問題が発生した。macOS上で同じ動画をエンコードした場合にはノイズが乗らない。なぜノイズの有無が発生してしまうのか?…

macOSで KMMのスケルトンプロジェクトの iosApp のビルドが通らない

macOSで Kotlin Multiplatform Mobile(KMM) のスケルトンプロジェクトの iosApp のビルドが通らない問題が発生した。 JVMのバージョンを11にする必要があったが、Android Studio内の設定で「Gradle JDK」を変更しても、システムのJDK(macOS組み込みのJDK)が…

VNRecognizeTextRequestを使って画像からテキストを取得する

iOS 13から画像から顔認識やバーコード、テキスト認識する Vision.framework が実装された。本記事では VNRecognizeTextRequest を使って画像からテキスト(String)を抽出する方法を紹介する。このクラスでは Convert Image to String をおこなう。 よく似た…

Xcode 13.3でアプリバイナリのexportに失敗する問題

昨日、App StoreにてXcode 13.3がリリースされた。早速アップデートしたところ、Bitriseにて特定のアプリで下記のようなエラーが発生した。コンパイル自体は問題なくその後のアーカイブの段階で失敗している。 error: exportArchive: ipatool failed with an…

UIImagePickerControllerを使って写真.appで編集済みの動画を選択しても編集前のオリジナル動画が使われてしまう

動画のアップロード機能を実装していると、iOS標準の写真.appでクリッピングやトリミングしている編集済みの動画を選択した場合に、編集しているにもかかわらず編集前のオリジナル動画がアップロードされてしまう現象に気が付いた。 動画を選択するのに UIIm…

UIImagePickerControllerを使って動画を録画しようとすると __TCCAccessRequest_block_invoke でクラッシュしてしまう

プロフィール画像などの静止画の撮影にUIImagePickerControllerを使うことはよくあり、UIImagePickerControllerを使って動画の録画ができることも知っていた。iOSアプリ開発に携わって11年ちょっと経つが、いままでUIImagePickerControllerを使って動画録画…

macOSにHomebrewを使ってpythonをインストールする

久しぶりにpythonをいじることになったため、macOSにHomebrewを使ってpythonをインストールする。 環境情報 MacBook Pro(16インチ、2021) Apple M1 Pro macOS Monterey v12.1 Homebrew 3.3.9 macOSでアプリ開発をしている場合、おそらくすでにHomebrewがイ…

Swift Package Managerでマルチモジュール化しているアプリでCoreDataの.xcdatamodeldファイルが参照できない

注意:このプロジェクトではCoreDataの定義ファイルを TweetAlbum.xcdatamodeld としている。もし存在するかわからないが、本記事を読んで同じ現象でハマった方がいれば、TweetAlbumの部分は各々で読み替えていただきたい。 Appの外にあるCoreDataの.xcdatam…

macOSでJenkinsを起動させるまで

macOSにJenkinsを入れるのはかなり大変で職人芸を駆使して対応していた記憶がある。2021年ではhomebrewを使ってインストールができた。 macOSの初期化+インストールディスクの作り方。一度稼働させたら基本的にアップデートさせないので今回はMontereyを使う…

xcframeworks に対応した Rome を使って Carthage のキャッシュをS3にアップロードして Bitrise で超高速にビルドしよう! #bitrise #bitrisearticle

CarthageのキャッシュをS3で共有できる「Rome」がxcframeworksに対応して帰ってきた!!この記事はiOS Advent Calendar 2021の12日目の記事です。 Romeとは? はじめに Carthage/Build ディレクトリを zip でまとめて Bitrise でダウンロードしていたが…… Ro…

備忘録:SwiftUIのListでrefreshした時に前回のデータが表示されている。画面が再描画されると新しいデータが反映される

備忘録として書き残しておく。気が向いたら書き直すかもしれない。 SwiftUIのListで下図のような画面を実装している。 縦スクロールと横スクロールの混ざったリストは珍しくないが、この画面の厄介なところは横スクロールでも別途APIを叩いてデータを取得す…

R.swiftがv6.0にアップデートされたのでプロジェクト設定の変更が必要になった

R.swiftはプロジェクトに追加しているリソースをハードコーディングせず管理できるライブラリだ。2021/11/19、R.swiftがv6.0にアップデートされた。 プロジェクトをビルドすると以下のワーニングが出るようになったので対応した。 warning: [R.swift] For up…

OneSignal-iOS-SDK v3.9.0 をインストールするとarm64シミュレータ向けビルドでリンクエラーが発生する

Carthageで「OneSignal-iOS-SDK v3.9.0」をインストールすると、arm64シミュレータ向けのビルド時にリンクエラーが発生してしまう。iOSシミュレータでデバッグ実行できなくなってしまった。 この問題は2021/11/17にv3.9.1がリリースされたことで解決した。リ…

【未解決】SwiftUIのListに配置したTextEditorにフォーカスを当てても自動でスクロールされない

iOS 14になってからTextFieldにフォーカスを当てると適切なポジションに自動でスクロールするようになった。iOS 13ではKeyboardObservingなどのライブラリを利用する必要があったので、標準機能として実装されたのはとても嬉しい。 その一方で、SwiftUIのLis…