CatHand Blog

アプリ開発やMac弄り

開発

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…

M1 Macでシミュレータ向けビルドが通るようにする

CocoaPods等でバイナリの形で公開されているライブラリの中には、実機ビルドや Intel Mac のシミュレータ向けビルドは通るのにM1 Macのシミュレータ向けビルドが通らないものがあります。 例えば GoogleSignIn です。これは以下のissueでも盛んにリクエスト…

PHPickerViewControllerで複数選択した場合のエラー

iOS14では UIImagePickerController の代わりに PHPickerViewController を使うことで複数の画像を選択することができます。 複数選択した画像を全部UIImageにして取得したくて、以下のようなコードを書きました。 func picker(_ picker: PHPickerViewContro…

SwiftUIのListのseparatorを消す

SwiftUIの List はデフォルトでセパレータ(区切り線)が表示されていて、非表示にすることができません。 iOS13 iOS13では、以下のどちらかの方法で消すことができます。 UITableView のappearanceを変更する List { ListItem(title: "タイトル1") ListItem…

SwiftUIに足りないイージングアニメーションを追加する

SwiftUIのAnimationには easeIn とかはあるんですが、 easeInCubic とかがありません。 ちょっと検索してみたところ、↓が見つかりました。 github.com しかしこれは時間に対する値を返す関数群のライブラリなので、SwiftUIの Animation では使用できません。…

MXParallaxHeaderのヘッダーの高さを可変にする

Twitterのユーザー詳細画面のような、上からヘッダー、タブ、コンテンツのような画面を作る時、MXParallaxHeaderが便利です。 github.com こういう画面。 SwiftUI対応 ヘッダーの高さを中身によって可変にする ということがやりたかったんですが、地味に大変…

BitriseからDeployGateへデプロイする

BitriseからDeployGateへデプロイするのは DeployGate Upload ステップがあるので簡単そうです。 ですが、既存のDeployGateアプリの配布ページへデプロイ設定する際にいくつかハマった部分があるのでメモしておきます。 DeployGate: API Key API Keyには、De…

Xcodeが断続的にレインボーカーソルになる

Xcodeを使っているとランダムにレインボーカーソルが発生して数分操作不能になる、という現象が発生しました。 MacBook Air (M1, 2020) / macOS 11.1 / Xcode 12.3 キャッシュ削除、シミュレータ全削除、Xcode再インストール等試したが改善せず Wifiを切ると…

Carthageでxcframeworkを作成する

Carthageでxcframeworkを作成できるようになりました。M1 Macで開発するにはライブラリのxcframework化はほぼ必須なので助かります。 github.com 既にCarthageのreadmeでは carthage update --use-xcframeworks を使うよう案内されていますが、現状最新のバ…

コマンドラインでターミナルのアーキテクチャを変更する

Apple Silicon対応していないコマンドをターミナルから使う時、いちいち「情報を見る」から「Rosettaで起動」をチェックしてターミナルを再起動するのは面倒です。 コマンドを呼び出す際に先頭に arch -x86_64 をつけるとRosettaでコマンドを実行することが…

M1 macでcocoapods-binaryを使う

cocoapods-binaryはcocoapodsで管理しているライブラリをプレビルドしてくれる便利なプラグインです。主にCIサービス等でビルド時間を短縮するのに役立ちます。 github.com ですが、cocoapods-binaryでプレビルドするとarm64シミュレータ向けのバイナリが作…

MacBook Air (M1, 2020)

届いてから2週間くらい経ちました。 www.cathand.app 現状の開発環境の方針です。 iOS carthage 使うのやめてcocoapodsかSwift Package Managerにする cocoapodsでビルド通らないやつ Firebase SDK Swift Package Managerで入れる OpenCV 自前でビルドしてxc…

OpenCVを含んだiOSプロジェクトをApple Silicon macでビルドできるようにする

MacBook Air (M1) の開発環境を構築してます。 www.cathand.app OpenCVを含んだiOSシミュレータ向けビルドが通らない問題ですが、どうもlipoコマンドでは同じアーキテクチャのデバイス向けとシミュレータ向けのバイナリを混在できないようで、それらを混在さ…

MacBook Air (M1, 2020)

届きました。メモリ16GB / SSD512GB です。 きた pic.twitter.com/NctAaQSUhu— nya (@cathandnya) 2020年11月22日 とりあえず Apple Silicon mac でのアプリ開発環境を整備しています。現状(11/22)の問題点をまとめました。 Rosettaで動くやつ Homebrew Co…

Automatic preview updating paused

SwiftUI で Automatic preview updating paused というエラーが出てプレビューが表示されない場合の対処法です。 stackoverflow.com ↑に書いてあるとおりなんですが、 Run script phase でプレビューの時にスクリプトが実行されないようにすると直ることがあ…

Illustail 4.1.0

でてます。 IllustailCatHand.orgソーシャルネットワーキング無料apps.apple.com iOS14のWidgetを追加しました。任意のタイムラインの最新投稿を順番に表示します。 Widget やっと動いた pic.twitter.com/r5l50bkFYC— nya (@cathandnya) 2020年9月25日 ↑のよ…

iOS14でMultipeerConnectivity.frameworkがエラーになる件の解決編

www.cathand.app ↑のiOS14でMultipeerConnectivity.frameworkがiOS14実機でエラーになる件ですが、Appleのデベロッパーフォーラムに解決策が載っていました。 developer.apple.com Info.plist で NSLocalNetworkUsageDescription を追加する 以下のような NS…

PINRemoteImageでビルドエラー

App Extension と本体アプリの両方で PINRemoteImage を使っていると Archive に失敗することがあります。 環境 macOS 10.15.6 Xcode12 cocoapods 1.9.3 abstract_target 'main' do pod 'PINRemoteImage' ... target 'App' end abstract_target 'widget' do …

iOS14でMultipeerConnectivity.frameworkがエラーになる

近距離で P2P 通信ができる MultipeerConnectivity.framework ですが、iOS14 でエラーが発生する場合があります。 MCNearbyServiceAdvertiser や MCNearbyServiceBrowser 等が NSNetServicesErrorCode = "-72008"; 的なエラーを返します。 このエラーは Xcod…

BitriseでビルドしたAdHocバイナリがインストールできない

www.cathand.app ↑で作っていたけいさんカードアプリのビルドと配信を Bitrise と Firebase App Distribution で自動化したんですが、配信されたバイナリがインストールできません。 いろいろやってみた結果、 Xcode Archive & Export for iOS ステップの Re…

AndroidのOpenCVで

More than one file was found with OS independent path 'lib/x86/libc++_shared.so' のようなエラーが出る時。 アプリモジュールの build.gradle に android { packagingOptions { pickFirst 'lib/x86/libc++_shared.so' pickFirst 'lib/x86_64/libc++_sha…

けいさんカード

1年生の算数の宿題でけいさんカードというのがあります。 ↑こういうカードを親が出して子供が答えるんですが、めんどいのでアプリにしました。 github.com 娘のiPhoneにインストールしたところ、勝手にやっているようです。 今後掛け算などにも対応していこ…

Ore2 2.6.0

Ore2CatHand.orgソーシャルネットワーキング¥250apps.apple.com Twitter の API 制限が解除されました。 ただし、API Key が変更になりましたので、再度ログインしてください。ログアウトせずにそのままログインするとタイムラインを引き継ぐことができます…

Ore2

以前、自分用にOre2というTwitterクライアントを作りました。 Ore2CatHand.orgソーシャルネットワーキング¥250apps.apple.com 何度かTwitterから謎のAPI制限を受けることがありましたが、その度連絡して解除してもらっていました。 ですが、1年くらい前に制…

json-serverとGoogle Spreadsheetでモックサーバーを作る

json-serverはREST APIモックサーバーが簡単に作れるOSSです。 github.com json-serverではモックデータはjsonで記述するのですが、非エンジニアにもデータが作成しやすいようにGoogle Spreadsheetでデータを作成できるようにしてみました。 Google Spreadsh…

OAuthConsumerをApp Extensionで使う

iOSでOAuthするライブラリで昔からあるやつなんですが、OAuthConsumerというのがあります。 cocoapods.org シンプルで使いやすいんですが、内部で - [UIApplication openURL:] を使っているのでApp Extensionでビルドが通りません。 他のライブラリを使うこ…

BitriseでFirebase App Distributionへのデプロイが失敗する

Error: failed to upload distribution. it took longer than expected to process your binary, please try again のようなエラーが出るようになりました。 ググると、どうもFirebase CLIのアップデートで直っているらしい。Bitriseのログをみたかんじ、Fir…