酢ろぐ!

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

開発

最新のFirebase SDKをインストールすると「Use of unresolved identifier 'FirebaseApp'」エラーが発生する

最新のFirebase SDKをインストールすると「Use of unresolved identifier 'FirebaseApp'」エラーが発生するようになった。 Use of unresolved identifier 'FirebaseApp' 解決編 import Firebase から import FirebaseCore に変更する // import Firebase imp…

Andriodで 動画ファイルを保存するとギャラリーには表示されるがサムネイルが表示されない/再生できない

FFmpeg for Andriodで書き出した動画ファイルを保存したあと、ギャラリーアプリで確認すると動画のサムネイルが表示されていない不具合があり、再生もできない。静止画を保存した場合は、特に問題なくサムネイルが表示されていた。 下記のデバイスにて検証し…

FFmpeg for Androidを使っている場合、target sdkを29にすると処理に失敗するようになる

Projectレベルの build.gradle のtarget sdkを 29 にすると、Android Q(10)上でFFmpeg for Androidでの処理に失敗することがわかった。 Target SDKが29だとPermission deniedが発生する 生成したコンテンツをギャラリーに保存するためにコードを書いていてAn…

Androidで テキストを縦方向の中央揃えで描画できない

縦方向の中央揃えでテキストを描画できない 期待する動作。 現実。尻尾(descent)の分だけ下方向にズレてします。 問題点 paint.getTextBoundsで、文字の高さは取得できる… 取得した高さを使って、描画領域を求めることはできる。 しかし、drawTextで描画する…

Bitriseの記事を書いたらBitriseグッズが送られてきた!

最近Bitriseの記事をよく書きます。……というのも弊社でも遅まきながらJenkinsを捨ててBitriseを利用することになったからです。 無料枠だと10分制限*1、有料枠であれば90分制限と1ビルドあたりの時間制限があります。iOSアプリはライブラリを利用していると…

大きな写真を分割してTwitterでシェアするアプリ「Four Cropper」を2時間で作った

嫁に出かけるので近くの喫茶店で待っておいてと言われ、喫茶店で待つ間あまりにも暇だったので即興で思いついたアプリを作りました。 写真を選び、分割して Twitterへシェアします。2分割・3分割・4分割と写真とマッチした分割数にしてください。 Four Cropp…

iOSで UIAlertControllerを表示すると「width == - 16」の制約エラーが発生する

iOS 13.5 になっても一向に修正される気配がないので仕方なく対応することにした。この現象はiOS 12.2〜13.5で発生することが確認されているらしい。 UIAlertControllerを表示すると制約エラーが発生する ごく普通に UIAlertController を使ってアクションシ…

AndroidアプリがTransactionTooLargeExceptionでクラッシュする

Androidアプリで画像ビューア画面を表示するとTransactionTooLargeExceptionが発生してクラッシュする問題に頭を悩ませていた。 発生している状況について MainActivity (ホームFragment) → DetailActivity (詳細Fragment → リストFragment ) → ImageActivit…

iOS 13.0以降で「モーダルで開いた画面」上でUIActivityViewControllerを使うと「モーダルで開いた画面」まで閉じられる現象

iOS 12.4のiPhone Xでは発生しておらず、iOS 13デバイスでのみ発生している事象です。 iOS 13.0以降、「モーダルで開いた画面」上で UIActivityViewController を使うと「モーダルで開いた画面」まで閉じられます。 発生する現象 画面A -> fullScreenのモー…

Bitriseで Xcode 11.5を使ってビルドしたIPAファイルが App Store Connect に拒否される

先週末あまりにも暇だったので「Four Cropper」というアプリを開発しました。 Four CropperKENJI WADAユーティリティ無料 最近は動画編集に凝っているので、大きな動画を四分割してTwitterに投稿したら面白いんじゃないか?という発想で進めたものの、ひとつ…

Androidで 静止画と動画のピッカーで選択したコンテンツのファイルパスを取得する

Androidで 静止画と動画のピッカーを表示して、単一のコンテンツを選択する方法です。 静止画と動画のピッカーを表示する 選択したコンテンツのURIを取得する 「ファイルパスを取得する権限」を取得する URIからファイルパスを取得する 参考記事 動画確認環…

ffmpegを使って動画編集する

動画編集を扱うので一番簡単なのは ffmpeg を使うことです。 macOSへのインストール ffmpegを使って動画編集する 動画の情報を取得する 動画フォーマットを変換する 動画のサムネイル画像を取得する クロップ領域を切り出して動画を生成する 動画をリサイズ…

R.swiftを v5.2にアップデートすると rswift が消滅して R.generate.swift が生成できなくなってしまう

先日、急に R.generate.swift が生成できなくなる問題に遭遇しました。 げ。急にR.swiftが使えなくなって、調べてみたら Pods/R.swift/rswift がいなくなってる— さくさん (@ch3cooh) 2020年5月23日 R.generate.swift が生成できない R.swiftを v5.2.2 へア…

Four Cropper:プライバシーポリシー

Privacy policy of this app is written in Japanese. (このプライバシーポリシーは日本語で書かれています) プライバシーポリシーについて これは本アプリケーションを利用されるユーザーのためのプライバシーポリシーです。本アプリケーションは、ユーザー…

Androidで 動画編集できるライブラリを探す (2020年5月調査)

iOSアプリで動画編集したい場合には「SwiftでAVFoundationを使って元ある動画から異なる動画を生成する (動画編集の基本編) - 酢ろぐ!」で取り上げたように、標準API(AVFoundation) を使うことで動画編集処理を実装できます。 一方、Androidではこれといっ…

iOS 13.4シミュレータで AVVideoCompositionCoreAnimationTool を使うとアプリがクラッシュする

現在、iOSアプリ内での動画編集機能を実装しています。 過去に 動画にウォーターマークをつける方法については調査済みでしたので、簡単に対応できると考えていましたが、謎のアプリクラッシュ現象が発生してしまいお手上げになってしまいました。 左:ウォ…

SwiftでAVFoundationを使って元ある動画から異なる動画を生成する (動画編集の基本編)

SwiftでAVFoundationを使って動画を編集をできるようになりたいと考えている。まずは基本を抑えるために、元ある動画の情報をそのまま使って異なる動画を生成する処理を本記事では紹介したい。 本記事は「AVFoundationを使ったiOSの動画編集 - Qiita」を参考…

Swiftで Photos.frameworkを使って動画からサムネイル画像を生成する

UIImagePickerControllerを使うと静止画を選択することができます。それだけではなく動画も選択することが可能です。選択した静止画(または動画)はPHAssetオブジェクトの形でデータを扱うこととなります。 本記事では、取得したPHAssetオブジェクトからサ…

Bitriseで iOSアプリのビルドが遅い原因は Firebase SDKなのか検証する

Bitriseで iOSアプリのビルドが遅いのは Firebase SDKが原因なのか検証しました。 検証した理由としては、CocoaPods経由でしかインストールできない Firebase SDK を頑張ってCarthage経由にした場合にどれくらいビルド時間を短縮できるのかのおおまかな指標…

Node.jsで Expressのパスパラメータを取得してFirestoreのデータを表示する

Express.jsには ルーティング機能があり、https://****.web.app/cards や https://****.web.app/cards/sa01a_001 にアクセスした場合にそれぞれ指定した index.js が呼ばれる仕組みがある。 Expressのルーティング機能 app.js (Cloud Functionsで動…

Node.jsで FirestoreにJSONデータをアップロードする

温度計センサーや株価データなど、ローカルPCにあるデータをCloud Firestoreにアップロードしたいことがあるかと思います。 Cloud Firestore に JSONデータ をアップロードする たとえば、以下のような s01a.json ファイルがあるとします。このデータをFires…

Node.jsで コマンドラインのパラメータを取得する

コマンドラインのパラメータを取得する node boo.ts /PATH/foo.json を実行したとき、3番目のパラメータ(つまり foo.json の部分)を取得したい。 console.log(process.argv); 上記の js を書くと、ターミナルに配列が出力された。 [ '/Users/ch3cooh/.nodebr…

#一人GWハッカソン 2020では ptcgnote のアップデートをしました

去年の10連休あったので一人GWハッカソンではポケカデッキ構築アプリ「ptcgnote」をリリースしました。今年は5連休とちょうど半分でしたので、まとまった時間が取れずじまいでした。悲しいかなTwitterを見てだらだら過ごしました。 これではいかんと思い、若…

Bitriseで iOSアプリのビルド速度を cocoapods-binary を使って高速化する

普段デバッグ時などは気にならないのですが、ipaファイルを生成する(アーカイブする)と、とても時間がかかって困ります。「bitrise.ioでiOSアプリのビルド速度を高速化したい!」という気持ちで、昨晩から cocoapods-binary の評価をしています。 github.com…

UISearchBarをUINavigationBarに設定して、画面遷移すると画面がめり込む/画面に隙間が開いてしまう

iOS 13以降で、UISearchBarを navigationItem.titleView に設定している場合や、UISearchControllerを navigationItem.searchController に設定している場合、ドリルダウンで画面遷移して戻ってくると、画面がめり込んでしまう問題があります。これは UISear…

UISearchBarをタップしたらテキストを入力していなくても searchResultsControllerの背景を表示したい (UISearchController使用時)

UISearchControllerを使うと、入力したテキストをベースにして検索結果を表示させられます。OSとして標準的な検索手段をユーザーに提供することができます。 ただ、検索結果の絞り込みに UISearchController を使っている例は多いのですが、実際には navigat…

Facebook SDKをCarthage経由でインストールする (2020年3月版)

開発中のアプリでFacebook認証したいという要件が追加され、およそ2年ぶりにFacebook SDKを導入することになった。CIがJenkinsではなくbitriseに移行しているため、ビルド時間短縮のためにCarthage経由でインストールしたらしっちゃかめっちゃかになった記録…

SwiftでAVFoundationを使って複数枚の静止画から動画(mp4)を生成する

動画生成について知識を深める必要がでてきました。まずは簡単なところから始めるべく複数枚の静止画から動画(mp4)を生成しました。Xcode 11.3.1 / Swift 5.1を使って実装しています。 事前準備 事前に用意したものは3枚の静止画です。1024 x 1024 ピクセル…

Bitriseでトラブル発生!Cartfile.resolved がルートディレクトリにないリポジトリのビルドが通らない

2020年になってから本格的にBitriseを使うようになりました。いままでJenkinsを使っていましたが、Jenkins係に負荷が押しつけられることになっていました。 BitriseはCIサービスのなかでもかなり簡単な方だとは思いますが、いままでジョブスクリプトを手書き…

Xcode 11.xで新規プロジェクトを作成したときに window?.rootViewController を変更しても画面が変わらない

久しぶりにXcodeで新しいプロジェクトを作成しました。 ログイン画面とホーム画面の切り分けを window?.rootViewController で実施していました。他のプロダクトでは使えているのに新規作成したプロジェクトでだけ window?.rootViewController を変更しても…