skyplace
Blog
About
skyplace
soranobaのチラシの裏 - アニメとかプログラムとか
Category 'programming'
動的アクター分離チェックの調査方法
Swift6の動的アクター分離チェックによってクラッシュした場合、正しいコードに飛べず、原因が分かりにくい場合があります。 その場合の調査方法を紹介します。
[Swift6] アクター分離境界 (Actor isolation boundary) を考慮したcallback
この記事では、同期関数 (no-async) のcallbackにおけるアクター分離境界(以降、アクター境界)の考え方について解説します。
[Swift6] アクター分離境界 (Actor isolation boundary) を考慮したasync関数の定義パターン
アクター分離境界(以降、アクター境界とする)を意識しなければならない箇所はいくつかありますが、その際たる例はasync関数です。 この記事ではasync関数におけるアクター境界の考え方について解説します。
[Swift6] アクター分離境界 (Actor isolation boundary) を理解する
Swift6から本格導入された、Actor isolation boundaryについて解説します。 Swift5でもActorは導入されていましたが、Swift6がリリースされるまでの過程でいくつかの変更が入っており、それらを踏まえたものなので、Swift5のActorの説明とは異なる箇所がある点には注意してください。 また、それなりに調べた上で書いていますが、正確な情報を保証する物ではない為、必要に応じて公式ドキュメントを参照してください。この記事において参照したソースについては、末尾に記載しています。
Combineの実行タイミングについて理解する
delegateで自分で実装した場合は、実行の割り込みタイミングは自明だが、Combineについては今まで雰囲気で使っていたので、理解を深めつつ備忘録として調査内容を残す。
SwiftUIでPreviewの内容が実体と異なる場合がある話
SwiftUIにおいて、そのView(A)のPreviewでは正しいのに、Aを使ったView(B)のPreviewでは正しくないという現象に遭遇した。 まずは結論から。
iOS17 Simulatorだとin-app purchaseのテストでSKError.Code.unknownが返る問題の対策
SKTestSessionを用いたテストが、Xcode15になってからiOS17 Simulatorでのみテストが通らなくなった場合の対応方法を紹介する。
iOSアプリにビルドハッシュを組み込む方法
iOSアプリでビルドハッシュ (git hash)を含めるやり方はいくつかありますが、個人的に良いと思った「xcconfigとPre-actionsを用いた」方法を紹介します。
_UIResponderForwarderWantsForwardingFromResponderのクラッシュへの対応方法
iOS16になってから_UIResponderForwarderWantsForwardingFromResponderでクラッシュするケースが散見されるようになりました。 一例を上げると以下のようなクラッシュログのようなものが該当します。
CocoaPodsで依存に追加したFramework内の画像が正常に読み込めない場合の対処法
画像リソースの使い方
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を始めた.
AWS EC2 + Wordpress + Let's Encrypt + Dockerでブログを始めることにした
ブログを始めることにした.
2年目のErlangプログラマが身につけておきたい12のデバッグ術
この記事はQiitaに投稿した記事のコピーです。一部システムが対応している表記の都合で変更しています。 投稿日時は上記記事の投稿日で設定しています。
let it crashが生んだ誤解
この記事はQiitaに投稿した記事のコピーです。一部システムが対応している表記の都合で変更しています。 投稿日時は上記記事の投稿日で設定しています。
1年目のErlangプログラマが嵌まる20のポイント
この記事はQiitaに投稿した記事のコピーです。一部システムが対応している表記の都合で変更しています。 投稿日時は上記記事の投稿日で設定しています。
Categories
programming (50)
anime (6)
other (4)
movie (1)
Games (1)
Tags
Erlang (7)
AWS (1)
consideration (2)
React (2)
ReactNative (3)
react-router (1)
Xcode (1)
TravisCI (1)
Jekyll (1)
アニメ総括 (1)
Ruby (2)
Rails (3)
Heroku (1)
MachineLearning (1)
Golang (1)
Docker (1)
Swift (21)
iOS (28)
PHP (1)
Composer (1)
CircleCI (1)
counter_culture (1)
AVAudioEngine (2)
Objective-C (1)
Arknights (1)
FFmpeg (1)
TypeScript (1)
StoreKitTest (1)
SwiftUI (1)
Combine (1)
Swift6 (4)