Objective-C

NimbleでSwiftコンパイラーのバグ(リグレッション)に遭遇した話

Xcode 10 beta 1(Swift 4.2)でNimbleのthrowAssertion()/raiseException()マッチャーなどを使うとランタイムクラッシュする事象が発生して、その成り行きが面白かったのでここに記します。 ここまで 現象: Objective-Cで定義するメソッドで、引数のクロー…

逆引きReactiveCocoa: 固定値をRACSignalでラップする

非常に基本的なことですが、あまりはっきりと触れられていない(触れる必要がない?)のが、単純に固定値をラップしたシグナルを生成するケースです。方法自体は単純で、以下のようなメソッドが用意されています。 // 値の場合 RACSignal *singleValueSignal…

ACAccountStoreのReactiveCocoaラッパーを作った

タイトルのままですが ikesyo/ReactiveAccountStore というAccounts.framework (ACAccountStore) のReactiveCocoaラッパーを作ってみました。 現時点では、以下の4つの非同期メソッドのRACSignalラップ版をサポートしています。 -requestAccessToAccountsWit…

VTAcknowledgementsViewControllerのStoryboardサポートを改善した

Pull requestしたらローカライズ依頼された - [yashigani days] などで知ったVTAcknowledgementsViewControllerというライブラリがあります。CocoaPodsが自動生成してくれる各ライブラリのライセンス表記をまとめたファイルをうまいことアプリ内で画面表示し…

UAObfuscatedString / バイナリ上での文字列難読化ライブラリー

UrbanApps/UAObfuscatedString NSLog(@"%@", @"".T.h.i.s._.i.s._.a._.t.e.s.t.dot); > This is a test. NSString *identifier = @"".c.o.m.dot.u.r.b.a.n.a.p.p.s.dot.e.x.a.m.p.l.e; サンプルを見れば分かるように、NSStringのカテゴリーとして英数字や記…

Objective-CのランタイムAPIをReactiveCocoaで解説する

iOS Advent Calendar 2013 14日目担当の @ikesyo です。 Function Reactive Programming Framework - Reactive Cocoa | Cocoaの日々情報局 iOS - ReactiveCocoaについて - Qiita [キータ] ReactiveCocoaのまとめ資料 - Qiita [キータ] Objective-C - Reactiv…

逆引きReactiveCocoa: シグナルにイベント発生時に対する処理を挟み込む

ReactiveCocoaのドキュメントにもあるように、-do...系のメソッドを使用すると、シグナルを購読せずに副作用を挟み込むことができます。 RACSignal *newSignal = [[[signal doNext:^(id x) { NSLog(@"next"); }] doError:^(NSError *error) { NSLog(@"error"…

逆引きReactiveCocoa: 毎時0分に処理を行う

元ネタ: ios - Perform action on the hour, every hour, with ReactiveCocoa - Stack Overflow 現在時刻から1時間毎だと毎時0分とならないので、まずは次の時までの分を得ておきます。 NSDateComponents *components = [[[NSCalendar sharedCalendar] calen…

逆引きReactiveCocoa: @YES/@NOをトグルで送るRACCommandを用意する

元ネタ: Command which sends alternating YES/NO values · Issue #767 · ReactiveCocoa/ReactiveCocoa ボタン・ジェスチャーなどのUI操作とRACSignalを仲介するクラスとしてRACCommandがあります。これを用いて、状態(フラグとなるインスタンス変数/プロパ…

逆引きReactiveCocoa: シグナルの現在の値だけでなく、直前の値にアクセスする

元ネタ: How to obtain KVO old value using ReactiveCocoa 2.0 API? · Issue #762 · ReactiveCocoa/ReactiveCocoa KVOのオプションを使用する場合 ReactiveCocoaではRACObserve()マクロによってKVOを非常に簡単に扱うことができますが、それだけでは、通常…

逆引きReactiveCocoa: 副作用だけのシグナルをリフティング/バインディングに使用する

元ネタ: Best practice for signals that capture completed/error operations · Issue #653 · ReactiveCocoa/ReactiveCocoa ログインやデータの永続化など、特に next として送る値がないシグナルの結果を -[NSObject rac_liftSelector:withSignals:] や RA…

ReactiveCocoaでタイマー処理 その2

こんなことがあり、 ios - RACSignal interval not work immediately - Stack Overflow @rizumita もう解決済みかも知れませんが、[[[RACSignal interval:5] startWith:[NSDate date]] subscribeNext:^(NSDate *date) {}]; という感じでしょうか。— いけしょ…

ReactiveCocoaでタイマー処理

最近一部で話題(と勝手に思っている)の ReactiveCocoa。 NSTimerでも問題ないことですが、場合によっては別にメソッド作ったり、セレクター指定が面倒なこともあるので、以下のような簡単なタイマー処理をReactiveCocoaで書いてみます。 - (void)setUpTime…