酢ろぐ!

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

開発

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 を使って画面遷移する

flutter での画面遷移に躓いたので「flutterでの画面遷移方法がわからない」で色々試した。画面遷移ライブラリはたくさんあるようだが、現状では go_router についての情報が一番多かったので、右に倣えで私も go_router を使うことにした。 go_router のイ…

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…

M1 Macbook ProでAndroid Studioの初期セットアップに失敗する(Android SDKがインストールできない問題)

先週M1 Macbook Pro*1が届いたので、試行錯誤して既存プロジェクトでRosettaを使わずにiOSシミュレータで起動させることができた。その後、1週間が経過したがiOSアプリ開発には特に問題なく使えることがわかった。 今週はM1 Macbook ProをAndroidアプリ開発…

Xcode 13.1でAdHocバイナリのエクスポート中にXcodeがクラッシュする問題 〜無限ビルド編〜

M1チップ(Apple Silicon)搭載のMacBook Pro (16-inch, 2021)に移行した。社内の開発環境の足並みを合わせるため、すべてのアプリで Rosettaを使わずに実機およびiOSシミュレータでデバッグ実行できるようにしたかった。 使用しているライブラリやソースコー…

ankurp/DollarはCarthage経由でインストールするとApp Store Connectへのアップロード時にERROR ITMS-90056が発生する

Swiftで配列を操作するのに ankurp/Dollar を使っている。 利用しているライブラリをxcframeworkに変更する一連の対応のなかで、DollarをCarthage経由でインストールするように変更したところ、出力したipaファイルをApp Store Connectへアップロードする段…

Android エミュレータでCharlesを使いたい (Android 6.0 / Android 7.0 以降の両対応)

アプリからAPIを正しく実行できているのかどうかを検証するため「Charles(チャールズ)」を導入しました。 www.charlesproxy.com Charlesはデスクトップで動くプロキシツールで、リクエストを書き換えてサーバーに送ったり、ステータスコードが400で返ってき…

低需要の個人開発アプリのASO対策をしてから4ヶ月が経ったので結果をまとめた

「アプリをリリースしているんだったらASO対策をした方が良い」と言われたので、今年の1月にASO対策をしてみた。ASOとは「Application Store Optimization」の頭文字をとった略称でアプリストア最適化のこと。いわゆるアプリストア版のSEOだ。 アプリストア…

Androidアプリでバックグラウンド状態で位置情報が取得できるのか調査した

2,3年くらい前にバックグラウンド・サービスで実装されていた位置情報取得処理をフォアグラウンド・サービスに移行(移植)したことがあった。 さくさん自身、位置情報取得の処理は1年に数回書いているような気がするが、いずれもアプリがフォアグラウンドにい…

AmazonアプリストアでAndroidアプリを公開するために調査した

Four CropperのAndroid版をゼロからスクラッチで作り直しました。一機能しかないアプリなので、フットワーク軽く作り直せるのが助かります。 過去にGoogle Playで公開しているアプリのGMS/Amazon/HMS対応を迫られたことがあって、たま〜に思い出しては調査し…

macOS Big Sur (11.3)にアップデートするとAndroid Studioのエミュレータが起動しなくなった

macOS Big Sur (11.3)にアップデートするとAndroid Studioのエミュレータが起動しなくなった。Android StudioのRunタブには以下のようなメッセージが表示されていた。 04/30 08:46:35: Launching 'app' on No Devices. Error while waiting for device: The …

Androidアプリを実行しているデバイスがAmazonデバイスかどうか判定する

実行しているデバイスがAmazonデバイスであるかどうか判定します。 Amazonデバイスかどうか判定する Amazonデバイスであるかどうかはデバイス名を確認する、または amazon.hardware.fire_tv 機能を持っているかどうかで判断することができます。 object Devi…

AndroidアプリでRSA暗号の公開鍵と秘密鍵を作成する

Androidアプリ内でRSA暗号の公開鍵と秘密鍵を作成して、公開鍵を使って生テキストを暗号化、秘密鍵を使って暗号テキストを復号化する方法を紹介する。 RSA暗号の公開鍵と秘密鍵を作成する RSAで鍵ペアを作成する。 package jp.ch3cooh.common.utility import…