CatHand Blog

アプリ開発やMac弄り

開発

gStat

gStatというアプリをリリースしました。 GitHub Actions のステータスを表示したり、実行したりできるアプリです。 play.google.com 最近 CI/CD 環境をBItriseからGItHub Actionsに移行しています。BitriseはbStatというアプリをリリースしていましたが、そ…

FailedToLaunchAppError で SwiftUI のプレビューが表示されない問題の解消法

SwiftUIのプレビューが表示されないことはよくありますが、原因が特定しづらいので困ります。今回は failed to launch... というエラーで表示されない問題が解決できたケースを紹介します。 環境: macOS Sonoma 14.2.1 Xcode 15.2 エラーは以下です。 Failed…

AppStore Connect APIを使わずにfastlaneでAppStore Connectへバイナリをアップロードする

fastlaneでAppStore Connectへアップロードする方法を検索すると、AppStore Connect APIを使う方法ばかり出てきますが、Apple IDのアプリ用パスワード(Application Specific Password)のみを使ってアップロードする方法があります。 まあドキュメントに書…

Github Actionsでビルドナンバーにオフセットを設定する

Github Actionsでいいかんじのビルドナンバーをつけたいとき、 github.run_number が使えます。これはworkflowの実行番号を表しています。 これをそのままではなく、オフセットをつけたい場合は以下のようにコマンドでできます。↓の例では +2000 しています…

Cycle inside ... building could produce unreliable results.

Xcode15でArchiveするとCycle inside ... building could produce unreliable results.のようなエラーが発生する場合があります。 App Extensionを含むプロジェクトで起きることが多いようなのですが、 Embed Foundation Extensions ステップを Copy Bundle …

大きな画像をリサイズして読み込む

Share Extension等、メモリ制約が大きい場合に、大きな画像を普通にUIImage(contentsOfFile:)で読み込むとメモリ不足でクラッシュする場合があります。 そのような場合には、リサイズしつつCGImageで読み込んでからUIImageに変換するとよいです。 gist.githu…

Twitter API v2 で画像付きポストをする

先日、Twitter API v1.1 がcloseされました。アクセスすると↓のようなエラーになります。 投稿APIについてはv2 APIが無料で提供されているので、投稿のみなら無料でできます。ただし、画像などを添付したい場合、v2 APIではメディアアップロードAPIが提供さ…

firebase functions から firebase functions を呼ぶ

firebase function から firebase function を呼びたい場合があると思います。 呼ばれる方の function が公開されている場合は簡単ですが、呼ばれる方を公開したくない場合は呼ばれる方の function を要認証にして、bearer tokenを指定して呼ぶことができま…

Illustail v5.3.0 (macOS)

でてます。 IllustailNaomoto Niwayamaソーシャルネットワーキング無料apps.apple.com macOS版のみですが、タイムラインのメディアを自動ダウンロードする機能をつけました。 設定の↓ここからいけます。 タイムライン 保存先フォルダ メディアの種類(動画、…

Jetpack Composeで滑らかなViewPagerを作成する

Composeで横にページングするViewを実現したいとき、AccompanistのHorizontalPagerを使います。 google.github.io ですが、HorizontalPagerはページごとにバウンスするような挙動になっており、連続してスワイプすると引っかかるような動きになります。(し…

Illustail v5.0.1

でてます。 IllustailNaomoto Niwayamaソーシャルネットワーキング無料apps.apple.com Share Extension経由でInstagtamの投稿をIllustail Cloudへ保存できるようになりました Illustail Cloudへ保存時のデフォルトをプライベートにしました 投稿へのアクショ…

Illustail v5.0.0

Illustail v5.0.0 でてます。TwitterやTumblr等に対応した画像収集アプリです。 IllustailNaomoto Niwayamaソーシャルネットワーキング無料apps.apple.com ↑ iOS / macOS どちらも同じURLです。 Illustail Cloud 今回、画像投稿をタグを付けてクラウドへ保存…

App Extension ターゲットがビルドできない

App Extension を含んだアプリターゲットはビルドできるけど、App Extension ターゲット単体では Multiple commands produce ... のようなエラーが出てビルドできない、ということがありました。 原因は Scheme の設定に複数のアプリターゲットが含まれてい…

Visual Studio CodeのTerminalのアーキテクチャをarm64にする

↓の方法でターミナルのアーキテクチャを表示するようにしていたところ、VSCodeのターミナルがx86アーキテクチャで実行されていることに気づきました。 www.cathand.app のでarm64で実行されるようにします。 VSCodeの環境: バージョン: 1.69.1 コミット: b06…

dart_twitter_api で users/lookup を呼ぶ

dart_twitter_api はFlutterのTwitter APIラッパーです。 github.com 便利なんですが、 users/lookup が notImplemented になっていて呼べませんでした。 github.com なので呼べるようにしたコードがこちらです。 gist.github.com 同じような方法で、他のAPI…

bStat Android

Bitriseのステータスを表示したりトリガーをかけたりするアプリ、bStatのAndroid版が公開されました。 play.google.com SwiftUIのマルチプラットフォームでiOSとmacOS向けに作成していたものをFlutterで書き直しました。なのでiOS / macOS版も同じUIでアップ…

BitriseでflutterのmacOSアプリをビルドしてAppStore Connectへアップロードする

Workflowは↑のようなかんじになります。 Flutter Install 必要なバージョンのFlutterをインストールします。今回は 3.0.1 を使いました。 Script flutter build macos します。 ただし、必ず error: Provisioning profile "******" doesn't include the curr…

flutterとmacOSネイティブアプリでやり取りする

ネイティブアプリの一部をflutter化したとき、ネイティブコードとflutter間でやり取りするには FlutterMethodChannel を使います。 api.flutter.dev ネイティブ側とflutter側でお互いに FlutterMethodChannel を作ってやり取りする形になります。 iOSでは [F…

Failed to commit edit, error: googleapi: Error 400: Prices are missing for the following billable countries: GI., badRequest

Google Play API でバイナリをアップロードすると表題のようなエラーが返る場合があります。 Failed to commit edit, error: googleapi: Error 400: Prices are missing for the following billable countries: GI., badRequest これは、有料アプリで国別の…

Bitrise の Set Xcode Project Build Number ステップが反映されないとき

BitriseでXcodeプロジェクトのビルドナンバーをセットするのに Set Xcode Project Build Number ステップを使います。 devcenter.bitrise.io いつのまにかこのステップが効かなくなっており、ビルドナンバーが常に 1 でアプリが配信されていました。Set Xcod…

macOSのFirebase SDKでTwitter認証

公式ドキュメントのやり方は以下のようになっています。 firebase.google.com ですが、macOSでは getCredentialWith() が呼べません。 API_UNAVAILABLE(macos, tvos, watchos); となっています。なので別のアプローチが必要です。 FIRTwitterAuthProviderは …

Combineのassign()で循環参照

SwiftUIの @Published されてる値をUIKit側から監視したいとき等、↓のようなかんじでCombineのassign()を使うことがあります。 class HogeViewController: UIViewController { private var cancellables = Set<AnyCancellable>() private var hugaValue: Data? { didSet { up</anycancellable>…

Unexpected nil property at path: 'Provider/attributes/developerTeamId'

XcodeからAppStore Connectへアプリをアップロードするときに Unexpected nil property at path: 'Provider/attributes/developerTeamId' というエラーが発生するようになりました。 XcodeのPreferences -> Accountから該当アカウントを選択しても同様のエラ…

IllustailがiOS14で起動しない(解決)

画像収集アプリ Illustail の動画対応を行いました。 IllustailCatHand.orgソーシャルネットワーキング無料apps.apple.com それ以降TwitterでIllustailが起動しないという報告をいくつか見かけたのですが、再現できず困っていました。ありがたいことに環境な…

Spotlightプロセスが暴走する

macOS Monterey にアップデートしたあたりから、Spotlightプロセスが高効率コアを100%占有しっぱなしになる現象が発生していました。MacBookを閉じていても動作しているようでバッテリーを消費して落ちてしまうので困ります。 最近スリープ中にバッテリー消…

ITMS-90283 エラー

去年の今頃くらい(たぶんXcode12がでたあたり)から、IllustailのMac版がAppStore Connectに登録できなくなっていました。Xcodeからアップロードしようとすると以下のようなエラーになります。 ERROR ITMS-90283: "Invalid Provisioning Profile. The provi…

Bitriseのビルドステータスをステータスバーに表示するアプリ作りました

CI / CD サービスはBitriseを使っています。 app.bitrise.io Bitriseでは手動でWorkflowを実行することが多いんですが、BitriseのWebは割と重いので、ステータスバーに常駐してビルドステータスを表示したりWorkflowを実行したりできるMacアプリを作りました…

Carthageで作成したxcframeworkを追加した後archiveのvalidationでエラーになる

CarthageでRealmとかFirebase等の大きめのライブラリがxcframework化できるようになったのでビルド時間短縮のために導入しています。 その際、ストアに提出しようとしたときに以下のようなエラーが出る場合があります。 error: exportArchive: IPA processin…

PixelFinder 1.1.0 で動画に対応しました

Mac用画像ビューアの PixelFinder ですが、v1.1.0で動画に対応しました。 PixelFinderCatHand.orgユーティリティ無料apps.apple.com サムネイルのマウスオーバーでプレビュー再生したり、画像と混ぜて見開き表示されたりするところはアニメーションGIF等と同…

Xcode12.5でCould not attach to pidエラー

久しぶりにMacアプリのプロジェクトを開いて実行しようとしたら以下のようなエラーでデバッガ接続できなくなっていました。 Could not attach to pid : “1948” Domain: IDEDebugSessionErrorDomain Code: 3 Failure Reason: attach failed (Not allowed to a…