Category 'programming'

iOS17 Simulatorだとin-app purchaseのテストでSKError.Code.unknownが返る問題の対策

SKTestSessionを用いたテストが、Xcode15になってからiOS17 Simulatorでのみテストが通らなくなった場合の対応方法を紹介する。

iOSアプリにビルドハッシュを組み込む方法

iOSアプリでビルドハッシュ (git hash)を含めるやり方はいくつかありますが、個人的に良いと思った「xcconfigとPre-actionsを用いた」方法を紹介します。

_UIResponderForwarderWantsForwardingFromResponderのクラッシュへの対応方法

iOS16になってから_UIResponderForwarderWantsForwardingFromResponderでクラッシュするケースが散見されるようになりました。 一例を上げると以下のようなクラッシュログのようなものが該当します。

UITableViewCell.accessoryViewに設定したUIButtonにtintColorを設定する

UITableViewCellの右側にボタンを配置する際にaccessoryViewを利用すると、ボタンではなくCellを誤タップすることが回避でき大変便利です。

associatedtypeを持つprotocolをクラスのメンバ変数として使う方法

Swiftのprotocolには, protocol版Genericsとでも言うべきassociatedtypeがあります.

UIViewの表示内容をCMSampleBufferにする

任意のUIViewをPinPに利用しようとすると、CMSampleBufferにUIViewの内容を変換する必要があります。 iOSで任意のUIViewをピクチャーインピクチャーするという素晴らしい記事と実装を公開してくださっているのですが、CMSampleBufferへの変換方法が少し微妙な気がしたので、そこの部分のみ実装を紹介しようと思います。

runtypesでenumの型を表現する

外の世界のデータをTypeScriptの世界に持ってくる際に、型チェックを行うruntypesというライブラリがあります。 この記事はruntypesでenumを表現する方法について纏めたものです。

FFmpegでマルチストリームオーディオをシングルストリームに変換する

マルチストリームオーディオのビデオファイルを、配信などに利用しようとすると往々にしてシングルストリームオーディオのファイルに変換する必要があります。

iOS15でUITableViewCell.isHiddenを使ってはいけない

iOS15/Xcode13に対応する季節になりました. 一般的に必要な対応についてはマネーフォワードの方が記事を公開しているので改めて触れる必要はないでしょう. (調べる手間が省けて大変助かりました) ここでは殆どの人が踏み抜かないであろうiOS15で変わった点を紹介したいと思います.

iOSでh264エンコード時にフリッカーが発生する問題への対応

iPhone11ぐらいからiOSでは特定条件でh.264エンコード後の映像にフリッカーが発生するという問題があります. この対処法について紹介します.

QuickでCIの時だけ特定のテストをスキップする

CI実行時のみなど, コマンドラインからの実行時のみ特定のテストを実行したい・実行したくない場合に使える方法を紹介します.

NSPointerArray.compactでnilがなくなるとは限らない

CI実行時だけ一定確率で失敗するというテストがあり, 長らく原因が分からず仕舞いだった. たまたま実機で特定の動作手順で確実に再現するバグがあり, それを直したところ上記の問題が解消されるということがあった. 今回はそれについて紹介する.

Xib攻略ガイド

XcodeにはInterface Builderと呼ばれるUI構築ツールがあります. Xibには色々な設定方法があり, 私が使う上で守っている自己ルールを紹介します.

Erlangからドメインを切り離すモチベーション

2020年も残すところ僅か. 今年は仕事で数年ぶりにErlangでシステムの一部を書く機会があった. ーーとはいっても技術選定からコーディングまでサーバー側は全部自分でやっていたので, 何故Erlangを選んだかと, その振り返りをしようと思う.

~iOS13でURLSessionのcompletionHandlerが実行されない問題への対応

久しぶりに面白いバグに遭遇した. iOS14ではURLSession.dataTask(with:completionHandler:)のcompletionHandlerが実行されるが, それ以前のOSでは実行されないというものだ. それも全ての箇所ではなく, 1箇所だけ何故か常に実行されない.

SwiftとnilError

先日、AVAudioFile.read(into:frameCount:)の吐く例外がnilErrorという不可解なものになることがあることを知った. 最初は何故nilなのかと首を傾げたが、どうもnilErrorというエラーらしい. 不可解だったので調べてみることにした.

xib上でhiddenに設定したconstraintsのactivateが正しく機能しない問題への対応

iOSアプリ開発において, xib上でPortrait用・Landscape用のconstraintsをそれぞれ設定し, コードでactivate/deactivateを切り替えることが往々にしてあると思います. activate/deactivateの処理が正しく機能しなくなる現象に遭遇したので, その対応方法についてのメモです.

OTP23から入るpgのコードを読む

最近は久しぶりにプロダクションでErlangのコードを書いたりしています. かなり小規模な物ですが. そこでOTP23で新しく入るpgのコードを読む機会があったので, pgの実装についてまとめようと思います.

SwiftのProtocolに対してKVOを行う

前回から引き続きKVOについての投稿です. SwiftにおけるKVOは対象のpropertyの制限 (@objc dynamic) は広く知られていますが, Protocolに対してKVOを行うのもハードルが高かったりします. delegateを自分で実装した方が早い気もしますが, Property Binding的なことをしようとすると, KVOの方が直感的なコードを書けるので悩ましいところです. この記事では, Swift Protocolに対してKVOをする方法を紹介します.

KVOのクラッシュ地獄から脱却する

iOSにはKey-Value Observing (KVO)というpropertyの変更を監視する仕組みがあります. NSObjectが提供する機能である為, Swiftで使うにはいくつもの制限があり必ずしも使いやすいとは言えませんが, サードパーティライブラリを使うことなく利用できるのは大変便利です. そして, AVPlayerなどを扱う際には避けて通れない機能でもあります. しかし, KVOを利用すると解放済みオブジェクトに対して通知が行ってクラッシュすることがあり, 長らく悩まされてきました. 長年の悩みの原因の1つが解消されたので, それを紹介します.

AVAudioEngineでエコキャン実装 (with ManualRendering) その2

前回の続き。 前回の実装では周期的に音が断続的になる不具合がありました。 ManualRecordingでない場合は、この現象が発生していなかったので、どこかでバッファが枯渇しているのでは? と当たりをつけて修正していきます。

AVAudioEngineでエコキャン実装 (with ManualRendering)

iOS13からAVAudioEngineでVoiceProcessingIOを用いたエコーキャンセルがsetVoiceProcessingEnabled(_:)によって簡単にできるようになりました。 とはいえ、iOS13以前のバージョンでもエコーキャンセルをできるようにしたいので、以前のバージョンでも対応する形で実装してみました。

UIKitのisHiddenを二値だと信じてはいけない

先週、なぜかコード的にはおかしくないはずなのに、Viewの表示状態が壊れるという現象に遭遇しました。 どうも調べてみると、isHiddenで代入しても値が反映されないようでした。

iOS13の外観モード(ダークモード)に対応する方法

これは、iOS13から追加される外観モードの対応方法を纏めたものです。現時点ではまだbeta8なので、情報が正しくなくなる可能性があります。 また、まだ対応はしていないので、間違っていたら随時更新するかもしれません。

after_destroyは削除回数と実行回数が一致する訳ではない

例えば投稿Aに対するFavの数を表示しようと思った際に、都度SQLでCOUNTを実行するのは避けたいという時に、Fav数をレコードに書き込む実装をとあるシステムでやっていました。 具体的にはcounter_cultureを使っていました。

PHP ExtensionsをCircleCIで使用する

CircleCIが提供しているPHPイメージに入っていないExtensionsを依存に含めた際に、どうすればいいのか調べても信頼性の低い情報ばかりだったので、やり方を残す。 このやり方はcomposerを使用し、composer.jsonのrequireに依存を記述していることを前提としている。 独自にやる場合はdocker-php-ext-installを実行すればよい。

SwiftのDecodableなenumで将来的な値追加に対応する

Swift4から追加されたDecodableは, APIのレスポンスモデルを定義する際にとても便利な機能です. しかし, 将来的に値が増える可能性のあるenumの場合には注意が必要です.

DockerfileのENTRYPOINTでシェル形式を使いつつ引数を渡す

事の発端は「DockerfileのENTRYPOINTでENVの変数展開ができない!」でした。以下の指定は正しく動作しません。

Golangのinterfaceとレシーバの自動解決

Golangのinterfaceは多態性 (ポリモーフィズム) を実現する為の機能であるが、Javaのinterface、C++のInterface Classとは名称が同じであるものの全く別物であり、その実態はダック・タイピングです。 静的型付け言語でダック・タイピングを実現することで、多くの言語のそれとは異なる特徴を持ちます。

Gmailのメールを自動削除する

thunderbirdを起動する頻度が減り、同期する度にthunderbirdが固まるようになってしまい、 取り敢えず、メール消そ? となったので、自動削除することにしました。 Gmailはプロモーション判定が優秀なので、ひとまずこれらを定期的に削除することにします。

ActiveRecordでRDBのゴミ掃除を都度行う

開発時間が限られる個人開発だと、Railsの有り難みを感じる、この頃です。

heroku.ymlでRailsをデプロイする

Rails (API) + React.js (Web)を1つのレポジトリで作成し, RailsをHerokuに, React.jsをNetlifyにデプロイしたところ, Heroku周りで色々躓いたので備忘録がてら書こうと思います.

WordPressからJekyllに移行しました

8月からWordPressで動かしていましたが、静的ホスティングできるJekyllに移行しました。 Hugo, Hexo, Octopress etc……と似たようなフレームワークはいくつかありますが、取り敢えず脱WordPressができれば良かったので, 一番肥えてそうなJekyllにしました。

OTP21でなぜerlang:get_stacktrace/0が廃止されたか

OTP21がリリースされてから4ヶ月ほど経過しているので今更感がありますが, OTP21でerlang:get_stacktrace/0が廃止になりました. try~catchで書かないといけない理由があったんだろうな. ぐらいの気持ちで当時リリースノートを流し見していたのですが, たまたま理由を目にする機会がありました.

Software caused connection abort

Xcode10とiOS12が気づいたらリリースされていた. ライブラリのtravis.ymlの更新作業をしていたのだが, 今回はSoftware caused connection abortで手元では動くけどCIサーバーでは動かない状態で苦戦した.

react-router-nativeでタブナビゲーター+スワイプ対応をする

react-routerのネイティブ用実装であるreact-router-nativeでスワイプ対応のボトムタブナビゲーションを実装してみました.

bbmustache 1.6.0をリリースしました

hex: https://hex.pm/packages/bbmustache/1.6.0 Github: https://github.com/soranoba/bbmustache/releases/tag/1.6.0

[ReactNative] subviewからタッチイベントを奪う

ネイティブアプリにおいて, ちょっと面倒だけどよく使うものの1つにsubviewのタッチイベントを無効化して, superviewがタッチイベントを処理したいケースというのがある. iOSでいうところのUIView # hitTest:withEvent:で行う処理である.

ReactとReactNativeは別物だけど, iOS, Android, Webのコードシェアリングをする

ReactとReactNative使えばiOS, Android, Web同時に開発できるんでしょ? 凄すぎでは? ちょっとやってみよう. ということで最近ReactとReactNativeを始めた.

2年目のErlangプログラマが身につけておきたい12のデバッグ術

この記事はQiitaに投稿した記事のコピーです。一部システムが対応している表記の都合で変更しています。 投稿日時は上記記事の投稿日で設定しています。

let it crashが生んだ誤解

この記事はQiitaに投稿した記事のコピーです。一部システムが対応している表記の都合で変更しています。 投稿日時は上記記事の投稿日で設定しています。

1年目のErlangプログラマが嵌まる20のポイント

この記事はQiitaに投稿した記事のコピーです。一部システムが対応している表記の都合で変更しています。 投稿日時は上記記事の投稿日で設定しています。