yujiro's blog

エンジニアリング全般の事書きます

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSSingleObjectArrayI objectAtIndex:]: index 18446744073709551615 beyond bounds [0 .. 0]'

先日、iOSアプリのクラッシュログで以下が発見された

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSSingleObjectArrayI objectAtIndex:]: index 18446744073709551615 beyond bounds [0 .. 0]'
続きを読む

RxJava での購読解除はuber のAutoDisposeを使ったほうが良さそう、という話

現在、仕事場のAndroid のコードでは2種類の購読解除方法を使っている

1つめは、bindToLifeCycle、bindUntilEvent を使う方法

single
    .compose(bindToLifeCycle())
    ...

もう一つは、Autodispose を使う方法

https://github.com/uber/AutoDispose

single
    .as(AutoDispose.autoDisposable(RxLifecycleInterop.from(this).requestScope()))
    ...

※ 実際にはPresenter で購読開始するので、view を引数に渡している事が多い。

続きを読む

Swift でprivate なプロパティを書き換える

小ネタです。

ユニットテストを書いているとき、テスト対象のprivate なインスタンス変数を書き換えたいと思うことがあります。

標準のリフレクションだと結構面倒くさいことになります。

詳しくは、https://stackoverflow.com/questions/31589405/using-reflection-to-set-object-properties-without-using-setvalue-forkey をご参照ください。

上記のStackoverflow でも紹介されていますが、Runtime というライブラリを使うと簡単になるみたいです。

    class Hoge {
        private var flag: Bool = false

        func printFlag() {
            print(flag)
        }
    }

    func testHoge() {
        var h = Hoge()
        let info = try! typeInfo(of: Hoge.self)
        let property = try! info.property(named: "flag")
        try! property.set(value: true, on: &h)
        h.printFlag()
    }

=> true

簡単です。

iOSアプリにクリーンアーキテクチャをいれてみた

この記事では、iOSアプリで実際にクリーンアーキテクチャを取り入れてみた例を紹介します。

クリーンアーキテクチャが何か、というところについてはここでは割愛します。

定義・前提等の全体感は省略させていだき、iOSアプリに取り入れる上で必要なクリーンアーキテクチャの知識は触れられればと思っています。

構成

まず、全体の構成要素は以下になりました。

図1 f:id:bambookun:20191104201001p:plain

続きを読む

クロスサイト・スクリプティング(XSS)

はじめに

この記事の内容は 「体系的に学ぶ 安全なWebアプリケーションの作り方 第2版」 の第4章3節の要点をまとめたものです。

www.sbcr.jp

※ 基本的に引用は避けています。

続きを読む