Tag 'iOS'

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

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

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

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

Xib攻略ガイド

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

~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の処理が正しく機能しなくなる現象に遭遇したので, その対応方法についてのメモです.

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なので、情報が正しくなくなる可能性があります。 また、まだ対応はしていないので、間違っていたら随時更新するかもしれません。

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

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