タグ

ブックマーク / www.tokoro.me (10)

  • Objective-Cで非同期処理のテストをシンプルに書く方法 | TOKOROM BLOG

    非同期処理のテストってどう書いてますか? 標準のXCTest自体がサポートしていれば良いのですがそうではないので、非同期処理のテストを書きたい場合には、その仕組みを自作するか出来合いのライブラリを利用する必要があります。現実的な選択肢としては、 GHUnitやKiwiなど非同期処理をサポートしたテストフレームワークを利用する GHunitの非同期処理のテストの仕組みを真似て抜粋したライブラリを利用する(意外とこれが多いかも?) expectaなどのマッチャーライブラリに付属の非同期処理の仕組みを使う となるかと思います。 ただ、私が調べた時点だとどれもしっくりきませんでした。 まず、GHUnitやKiwiなどを採択している場合には良いのですが、非同期処理のテストを書くという目的だけのためにそれらのフレームワークを使うというのは冗長すぎます。 また、GHUnitの非同期処理の仕組みだけを抜き

    laiso
    laiso 2014/04/22
  • Objective-Cでカリー化とか部分適用してみる | TOKOROM BLOG

    導入 会社でHaskell勉強会に参加して、カリー化とか部分適用のパートの輪読当番になったのだが、正直、輪読時点でもそれがなんなのかよくわかっていませんでした。 しかし、勉強会で参加者のみなさまに教えてもらった結果、カリー化とかがやっと理解できました! ということで嬉しくなって先日寝るときに布団の中で「Objective-Cでもできるかなー」と脳内コーディングしてみた結果を実装してみました。 もう他の人がやってるかもとか、こんなん実装しても実際のところ使わないよねとか、そんなことはまったく気にせずです。 実際やってみたソースコードは こちら に置いてあります。 ひとまずのゴール カリー化して部分適用ができる状態までということで、Haskellのmapが実現できるところまでを目標にしました。 map (+3) [1, 2, 3] これです。 Objective-Cでは当然、空白区切りで引数を

    laiso
    laiso 2013/11/07
  • Objective-Cで"@dynamic"の使いどころを考える | TOKOROM BLOG

    Objective-Cの @dynamic はお好きですか? ぼくはけっこう好きです。 @synthesizeのほうは昔はほぼ必須で書かないといけなかったり Xcode4.4で省略できるようになった ことで有名ですが、いっぽうで@dynamicのほうはあまり日の目を浴びていない気がします。 そこで、今日は@dynamicについて再考してみることにしました。 以下、ぼくが思い返してみて@dynamicがこんなときに便利だったと感じたところを2点挙げさせていただきます。 みなさまのほうでも「こんなとき便利だよ」というのがありましたら是非ご教示ください。 クラスの内部実装が適当なのを隠すときに そもそもこの実装自体がどうかという話もあるのですが、リファクタリング前にひとまず雑な実装をしてしまうことはままあります。 例えば、ゲームスコアを管理するGameScoreクラスを作ったとして、その中で ハ

    Objective-Cで"@dynamic"の使いどころを考える | TOKOROM BLOG
    laiso
    laiso 2013/10/11
  • Objective-Cのテストクラスからプライベートメソッド/プロパティを参照したい | TOKOROM BLOG

    dkfjさんが Objective-Cで、プライベートメソッド・プロパティにアクセスし、ユニットテストを実行する方法 という記事を書かれていました。 せっかくなので私がやっている方法も書かせていただきます。 テスト対象のクラス 以下のようにプライベートメソッドとプロパティを持ったExampleClassをテストするとします。 #import "ExampleClass.h" @interface ExampleClass() - (BOOL)privateMethod; @property (assign) BOOL flag; @end @implementation ExampleClass - (BOOL)privateMethod { return self.flag; } @end テストクラス 自分の場合は、こんなかんじでテストクラスでテスト対象のプライベートメソッドやプロパテ

    laiso
    laiso 2013/10/02
  • Objective-Cのコードを削れるだけ削る7のTips | TOKOROM BLOG

    既存記事のまとめのため新しい要素があるわけではないのですが、Appleから発表されたXcode 5が正式にリリースされる前の復習ということで。 Tipsを適用する前のコード #pragma mark - Private Category @interface Sample () @property (strong) NSNumber* i; @property (strong) NSNumber* c; @property (strong) NSNumber* f; @property (strong) NSArray* array; @property (strong) NSDictionary* dictionary; @property (strong) Sample* child; @property (strong) UIColor* color; @property (assi

    laiso
    laiso 2013/06/21
    どんどんLLっぽくなっていく
  • Xcode 5: TDD/CIまわりに強力なアップデート(Appleがサイトで公開している範囲内で) | TOKOROM BLOG

    tokorom@WWDC2013参加中です。 WWDC2013で膨大なアップデートを学習中でしゃべりたいことが盛りだくさんなんですが、NDAのため我慢の日々。 で、キーノートの範囲の話は既に各所で情報が出ているわけですが、キーノートに出ていない項でも、Appleが非ログインで参照できるサイトで既に公表しているものがいくつかありました。 概要レベルでありますが、なかでも TDD とか CI まわりでiOSアプリ開発者にとって嬉しい情報がありましたので報告させていただきます。 あくまでもAppleのサイトで公表されている範囲内のことしか書けませんのであしからず。 ついにXcodeから任意のテストだけを簡単に実行できるようになる ついに、ついに…というかやっとかという話。 Xcode 5 で Test Navigator というやつが加わり、テスト駆動での開発を助けてくれますとのこと。具体的に、

    laiso
    laiso 2013/06/13
  • UIKitで使われている画像パーツをまとめて取得する | TOKOROM BLOG

    UIKitで使われている画像はどこにある? 例えば、UIAlertViewのアラートの画像ってどういう構成になってる?とかUISegmentedControlのAppearance変えたいんだけど当てはめる画像はどう作る?などというときにUIKitが標準で使っている画像パーツを参照できると便利です。 プログラマというか特にはデザイナさんにとって有用だと思います。 その画像パーツですが、Xcode(iOSシミュレータ)の中に入っているのでそこから抜くのが手っ取り早いです。 具体的には(これはiOS6.1の場合)、 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk/System/Library/Frameworks

    laiso
    laiso 2013/05/23
  • BlockInjectionで元のソースコードを汚さないで振る舞い追加 | TOKOROM BLOG

    例えばこんなコードに違和感はありませんか? 自分の場合よくあることなのですが、例えばiOSアプリを開発していて、Google Analytics のトラッキングのためのコードを加えるとき、 - (IBAction)sendButtonDidPush:(id)sender { // トラッキングのためのコード [tracker sendEventWithCategory:@"uiAction" withAction:@"sendButtonDidPush" withLabel:nil withValue:0]; // ... // 以降、送信ボタンを押したときの処理 // ... } こんなかんじにボタンが押されたときの処理のところにトラッキングのためのコードを埋め込んだりすると思います。 これはこれで問題はないのですが、プログラムのあちらこちらにトラッキングのためのコードを埋め込んで、

    laiso
    laiso 2013/03/07
  • GHUnitのテストカバレッジをJenkinsで表示する | TOKOROM BLOG

    概要 設定が完了すると、JenkinsでGHUnitのテストが実行された後に以下のようにテストカバレッジが参照できます。 設定がちょっとだけ面倒ですが、一度やって慣れてしまえばなんてことありません。 実際に動かしてみたサンプルプロジェクトGithub に置いてあります。 うまく動かない場合の設定の比較などにご参照ください。 なお、ここではiOSアプリ開発用としての紹介をさせていただきます。 事前準備 Jenkinsの導入 さくらVPSにJenkinsさんをインストールする GHUnitの導入 Jenkins を iOS アプリ開発に導入してみた (GHUnit編) GHUnitのiOS用frameworkをビルドするのが面倒な場合は、Github にビルド済みのものを置いてあるのでこれを使っていただいても構いません(2012/9/2時点でXcode 4.4.1 では問題なく利用できまし

    laiso
    laiso 2013/03/04
  • もっと簡単にVimでObjective-Cのコード補完を実行する | TOKOROM BLOG

    概要 先日、 VimでObjective-Cのコード補完を実行する With Clang でVimでclangを使ったコード補完をする方法について紹介させていただきましたが、今回はそのUpdate版になります。 というのも、clang_completeにはg:clang_auto_user_optionsという素晴らしいオプションがあり、これによりclang_complete体をいじらなくてもiOS用の設定を簡単に拡張できることが分かったためです。 具体的には、clang_completeともう1つ、後述の拙作の plugin を1つインストールいただき、 after/ftplugin/objc.vim let g:clang_auto_user_options = 'path, .clang_complete, ios' という設定をするだけで多くのプロジェクトが .clang_com

    laiso
    laiso 2013/01/28
  • 1