Hatena::Groupiphone-dev

laiso

URLが変わりました (2013/03/08)

 | 

2013-03-06

ベンチマーク用の簡単なモジュールをつくった

15:56 | はてなブックマーク -  ベンチマーク用の簡単なモジュールをつくった - laiso

    [RRBenchmark benchmark:^(RRBRunner* runner){

      [runner report:@"NSUUID:UUIDString" context:^{
        // Code block 1
        NSString* uid = [[NSUUID UUID] UUIDString];
      }];

      [runner report:@"CFUUIDCreate" context:^{
        // Code block 2
        CFUUIDRef uuid = CFUUIDCreate(nil);
        NSString* uid =  (__bridge NSString*)CFUUIDCreateString(nil, uuid);
        CFRelease(uuid);
      }];

      [runner report:@"ooid" context:^{
        // Code block 3
        // http://sourceforge.net/projects/ooid/
        NSString* uid = [UUID generateV4];
      }];

    } iterations:10000];

https://github.com/laiso/RRBenchmark/raw/master/Documents/images/console-result.png

こういうの。

iOSアプリケーションを開発していてパフォーマンスを改善するフェーズにきて、Instruments やプロファイラやなんかでボトルネックを探してて、ああここが遅いなというところを発見して、じゃあこういう風に変えようという案があるんだけどその時点での計測がしたいという時にコードの中にしのびこませる使い方がしたい。

みんなどうやっているのかよく知らないけど(計測用のスニペットとかあるのかな)、そういう場面が度々あったのでRuby標準ライブラリのBenchmarkモジュールみたいなものが欲しいと思ってつくった。

俺のたいがい解説くんタイプなので開発最新情報とかには詳しいけど実装はアヤしいのでライブラリとして妥当な感じかどうかはわからないけど、レビューedがわりにもなるしいいだとうとそのまま開陳している次第です。


インディーズレーベルのCocoapods Specリポジトリでデビューする方法

15:56 | はてなブックマーク -  インディーズレーベルのCocoapods Specリポジトリでデビューする方法 - laiso

更新:
久しぶりにドキュメント確認したら、なんかもっといいやり方ありそうなので再考します:
https://github.com/CocoaPods/CocoaPods/wiki


Cocoapodsでインストールできるようにしたい、だが公式リポジトリに含めないという段階の時どういう手順を踏めばいいのかというのを他の人の参考になるよう書いてみます。

最終的にユーザーは`pod repo add`というコマンドで非公式なリポジトリを登録しておくことでpodコマンド経由でセットアップできるようになります。PHP PEARが一番イメージしやすいかも(非公式なリポジトリ使う場面が多いので)。

ライブラリを書く

通常のアプリを開発する時のような感覚でXcodeプロジェクトを作成します。ライブラリのビルド設定も要りません。

ここがCocoapods環境のライフチェンジングなポイントだと思っているんですが、Cocoapodsでのインストールを前提にしていると開発者はめんどうなインストール用のスクリプトやファットバイナリやFramework形式を容易する必要がなくなり、ライブラリユーザーはハマりがちな依存ライブラリのセットアップやXcode設定を一切しなくてよくなります(Win-Win)。

なのでMyLibraryExampleというサンプルアプリプロジェクトを作成し、依存ライブラリはPodfileに記述してインストールし、MyLibraryというディレクトリを作成し、ライブラリに含めるソースコードは全部その中に置くという手順を踏むだけでもう公開する準備が整います。

開発中はユーザー向けのソースコードをMyLibraryExampleに書き、開発者向けのソースコードをテストターゲットに追加して。

MyLibraryExample.appで結合テスト+Xcodeでユニットテストを実行するというスタイルにするとテンポよく実装できます。

あと最近知ったのですがGithubメンバーの人のObjective-Cプロジェクト(https://github.com/github/ 参照)はだいたいテストフレームワークに[Specta](https://github.com/petejkim/specta "petejkim/specta · GitHub")を採用しているようです。ライブラリ実装用の使いやすさもあるんでしょうが。


まずローカルでセットアップを完結できるかを確認

以前以下に投稿した記事のような感じで。~/.cocoapods/local にローカルの作業スペースを掘ります。

この時点ではpodspecを一時的に

    s.source       = { :git => '/Users/omae/workspace/MyLibray', :tag => 'v0.1.0'}

のようにしてローカルにあるgitブランチを指定すればいいだけなので、ネットワークレスに作業できます。


ライブラリを公開用Gitリポジトリに配備

Githubでもどこでもチェックアウトできる場所につくるだけです。詳細は省きます。

Cocoapods経由でインストールするのにtag付けされている必要があるので`git push --tags`でリモートブランチにも反映されるようにしておきます。

spec用のGitリポジトリを用意

GithubじゃなくてもいいですがGithub前提で進めます。

Githubを使うのは公式リポジトリがあってそれをフォークした方が、今後公式へpull-requestする際などに都合がいいからです。

https://github.com/CocoaPods/Specs を自分のアカウントでフォークしてください。

specリポジトリのbeta配布用のブランチを作成

このままでも使えはするんですが、公式のpodspec群がフルセットでコピーされてしまうので新たなブランチを作成して一旦真っ新な状態にします(masterは基本的にpull-request用のトピックブランチを作成する前に公式リポジトリの更新を取り込むだけ)。

    git checkout --orphan beta
    git rm -rf .

やってることはGithubPagesのプロジェクトページ用のブランチを手動でつくる時と同じ

ここにさっき~/.cocoapods/local でテストしたpodspecを持ってきてpush

    mv ~/.cocoapods/local/MyLibrary ./
    git push origin beta

インストールできるか確認

実際のライブラリユーザーは以下のようなコマンドを実行することになりますのでドキュメントなどに記述しましょう。

    # pod repo add ${cocoapods上のリポジトリ名} https://github.com/*/Specs.git ${gitブランチ名}
    pod repo add omae https://github.com/omae/Specs.git beta
    ls ~/.cocoapods/

    pod install
トラックバック - http://iphone-dev.g.hatena.ne.jp/laiso/20130306
 |