タグ

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

  • これがXcodeでのバージョニングの決定版になるかも • Yuta Tokoro

    概要 この記事でできるようになること 安定してInfo.plistの内容(ここではBuild番号)を変更できる ふつうにRun Scriptで編集するとタイミングによってすぐにアプリに反映されないことがあったりしたがそれが解消される Info.plistに差分がでないのでcommitのときに邪魔にならない なお、この方法を教えてくれた熊谷さんがこの方法に行き着いた経緯や所感がこちらに詳しくまとめられています。詳細や考え方などをきちんと知りたいかたは是非、熊谷さんの記事をご一読ください! 必要な設定 Preprocess Info.plist file でInfo.plistをビルド前に確定させる Run Scriptで${TEMP_DIR}/Preprocessed-Info.plistを編集する 以下、具体的な話をします。 経緯 これまで、 デバッグ用やArchive用のアプリのバージョ

    これがXcodeでのバージョニングの決定版になるかも • Yuta Tokoro
    efcl
    efcl 2014/05/20
    gitで管理しないinfo.plistのアプリバージョン。 Preprocess Info.plist fileでinfo.plistへの処理を先に行う。 ビルドする度にビルドバージョン上げたりする方法
  • Storyboardでの画面遷移をスマートにやる方法 | TOKOROM BLOG

    これは potatotips第6回め で発表した この話 のまとめと後書きです。 Storyboardいいですよね! Storyboardを使うことで、 画面と画面が疎結合になる 簡単な画面遷移ならノンコーディングで実現できてソースコードを汚さない といったメリットがあります。 Storyboard登場以前だと、次の画面に遷移させるだけでも #import "NextViewController.h" NextViewController *nextViewController = [NextViewController new]; [self.navigationController pushViewController:nextViewController animated:YES]; といったコーディングをし、遷移元のViewControlelrは遷移先のViewController

    efcl
    efcl 2014/04/12
    egueでの値を渡せるようにするライブラリ。 UIViewControllerの拡張で値を受け取れる。
  • Xcodeのプロジェクトファイル(pbxproj)がコンフリクトしまくるのをなんとかしたい! | TOKOROM BLOG

    2014/02/09 追記 コメントのところでやり取りしているようにmergepbxの作者さんから連絡があって、この記事で書いた問題が修正されました! 今現在は merge=mergepbx がいい感じになってきているのでそっちがオススメです。 複数人でプログラミングしているとpbxprojがやたらとコンフリクトする 例えば、 Aさんが AALabel.m をプロジェクトに追加して Bさんが BBLabel.m をプロジェクトに追加して とただそれだけなのにマージのときにコンフリクトするpbxprojさん。。。 ただそれぞれファイルを追加だけのことでコンフリクトするなんて… どうにかならんもんかいとTwitterでつぶやいたところ、 @azu_re さんから有り難い教えが! @tokorom gitはファイル別にマージ方法を指定できるので、mergepbxみたいなのをpbxprojのマージ

    efcl
    efcl 2014/02/06
    Xcodeのプロジェクトのファイルのマージにmergepbxを使う設定について。
  • 提供するXXXViewControllerの親クラスを差し替え可能にしたい! | TOKOROM BLOG

    XXXViewControllerの親クラスを差し替えたいときありますよね? UIKit内で言えばUITableViewControllerとかはその代表格。 外部ライブラリで言うと、Google Analytics SDKのGAITrackedViewControllerとか。 要するに、XXXViewControllerの継承して実現したい機能があるのに、既にYYYViewControllerのサブクラスなので使えないよーとなってしまうケース。 で、既存のものは置いておくとしても、自分が作るライブラリのXXXViewControllerについては、なんとかその親クラス差し替えの需要に応えられないものかなあと。 runtime使う? いちおう class_setSuperclassという関数があるのですがDeprecated… なんか良い方法ないかな?と考えた結果、今のところ以下のかんじ

    efcl
    efcl 2014/01/27
    親クラスの差し替え。 @compatibility_alias、PSTCollectionView
  • 会社でiOSアプリを扱うときのアカウント管理はこうするべきだった? | TOKOROM BLOG

    2013年11月18日 追記 この記事を書いた後、何人かのかたから「うちでは同じApple IDで両方とも使えているよ」というご指摘をいただき、 Member Centerのほうにアカウント追加 -> iTunes Connectに同じアカウント追加という順番だと「警告は出るもののかまわずContinueすれば」同じApple IDでアカウント作成可能 iTunes Connectにアカウント追加 -> Member Centerに同じ追加という順番だと「複雑な手順にはなるものの適切な手順を通せば」同じApple IDでアカウント作成可能 失礼しました。 追加情報などあれば是非おねがいします! 概要 私はiOSアプリの開発を3年以上やっていますが、恥ずかしながら会社でこのためのアカウントを管理/運用する方法をきちんと把握できていませんでした。 というのも個人で開発するぶんにはそんな管理は必

    会社でiOSアプリを扱うときのアカウント管理はこうするべきだった? | TOKOROM BLOG
    efcl
    efcl 2013/11/07
    iTunesConnectとMember Centerのアカウントについて
  • Objective-Cでカリー化とか部分適用してみる | TOKOROM BLOG

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

    efcl
    efcl 2013/11/06
    Objective-Cでmap (+3) ([1, 2, 3])みたいな書き方.
  • iOSのライブラリだってTravis CIとかCoverallsとか使うべき | TOKOROM BLOG

    今日はGithubに公開したiOS用のライブラリを Travis CI と Coveralls に対応した手順を紹介したいと思います。 なお、実際にこれらを適用して運用しているリポジトリのサンプルは、 https://github.com/tokorom/BlockInjection になります。 前提条件 GitHubを使っていること GitHubでなんらかiOS/Mac用のライブラリを公開していること Travis CI https://travis-ci.org/ 目的 公開しているライブラリの最新コードがきちんとビルドが通るものか、テストが通る状態かを明示できます。 iOS用のCI環境を用意するのは通常すごく敷居が高い(物理的にMacが必要)のですが、Travis CIはiOS/Mac用のライブラリのCIを無料で請け負ってくれるかなり太っ腹なサービスです。 事前準備 Travis

    efcl
    efcl 2013/07/10
    iOSプロジェクトのコードカバレッジをcoverallsで取る方法。 似たようなcoverallsサンプル https://github.com/azu/Coveralls-iOS
  • 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

    efcl
    efcl 2013/06/16
    "strong / assign は省略できる" プロパティ属性も省略できたんだ。 newとTip 7は推奨出来ないけど
  • UIAlertViewよりもおとなしいメッセージダイアログを利用する | TOKOROM BLOG

    UIAlertViewは警告目的のダイアログ そもそもUIAlertViewはエンドユーザになんらかの警告をするときに利用するもので、iOSヒューマンインターフェースガイドラインにも、 一般にアラートは、次のような場合には不要です。 * なんらかの情報、特にアプリケーションの標準機能に関する情報を目に付かせるためだけの場合。 代わりに、アプリケーションのスタイルに調和し、目を引く情報表示の方法を設計すべきです。 と記載されています。 その一方で、UIAlertViewは簡単に利用でき、なんらかの情報を表示するのにどうしても使いたくなってしまいます。 それならばUIAlertViewの外観を変えて使えば、というのも考えられますが、ところがどっこいUIAlertViewはAppearanceの変更を一切サポートしていません。 警告目的のアラートダイアログの外観がアプリによって変更され

    efcl
    efcl 2013/05/28
    UIViewベースのUIAlertView代わりに使える感じのライブラリ
  • BlockInjectionをバージョンアップしました | TOKOROM BLOG

    BlockInjectionとはなんぞや Objective-Cの特定のメソッドの前後に処理を追加できるライブラリです。 クラスの外側からアスペクト指向的に振る舞いを追加できるのが特徴です。 https://github.com/tokorom/BlockInjection で公開しています。 バージョンアップ内容 前記事 からのバージョンアップ内容は以下です。 リファクタリングしてメソッド名が一式変更になりました(これまでのものはDeprecatedですがまだ使えます) クラスメソッドにも対応しました 複数のクラスやメソッドを一度に追加できるようになりました 正規表現で指定できるようになりました(※1) 注入したBlockの中で注入先のメソッド名を取得できるようになりました(※2) オマケで単純なメソッド実装置き換え機能も追加しました UIViewの勝手に呼ばれているsetterでまとめ

    BlockInjectionをバージョンアップしました | TOKOROM BLOG
    efcl
    efcl 2013/04/02
    正規表現で処理の割り込みをかけるように
  • BlockInjectionで元のソースコードを汚さないで振る舞い追加 | TOKOROM BLOG

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

    efcl
    efcl 2013/03/10
    method swizzle的なblocksでコードを入れ込むライブラリ
  • VimでObjective-Cのコード補完を実行する with clang | TOKOROM BLOG

    概要 VimEmacsでiOSアプリ開発をするときに「Snippetとかちゃんと設定してればXcodeほどのコード補完は必要ない」と強がりを言ってはみるものの「当はちょっとコード補完使いたいときあるんだよね」と思ってました。 そこで、重い腰をあげてVimでもObjective-Cのコード補完ができるよう設定してみました。 具体的には、 clangコマンドでのコード補完を試してみる その結果をもってVimの clang_complete プラグインを導入する という手順で実施しました。 結果として満足いく補完環境が整いましたので紹介させていただきます。 clangコマンドでのコード補完を試してみる clangコマンドはXcodeを使っていればはじめっから入っているコマンドです。 じつはこのclangコマンドを使うことでObjective-Cのコード補完が普通にできるとのこと。 具体的には

    efcl
    efcl 2013/01/02
    clang の補完候補コマンド-code-completion-atを使って候補を取得する
  • 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 テストクラス 自分の場合は、こんなかんじでテストクラスでテスト対象のプライベートメソッドやプロパテ

    efcl
    efcl 2012/09/12
    Objective-C で privateメソッドのテストを行う。 テストクラスにpublicでメソッドのインターフェースを作り直す
  • Objective-Cで独自クラスに[]でアクセスする | TOKOROM BLOG

    まず、Xcode4.4から使えるObjective-Cの新しい書き方については 前の記事 をご参照ください。 Xcode4.4からMacアプリ開発で使える新しいリテラル 上記記事には書いていないのですがMac向けのアプリではこの他にも、 array[1] でNSArrayの要素にアクセスできる dictionary[key] でNSDictionaryの要素にアクセスできる @YES/@NO でもNSNumberのインスタンスを作れる といった変更があります。 こちらについては残念ながらiOSアプリ開発ではまだ利用できません。 ※ これらがターゲットがMacの場合には利用できてiOSの場合には利用できないということは、 @k_katsumi さんに教えてもらいました。 でも[]でアクセスする仕組み自体はiOSでも使えます! ところで、[]でインスタンスにアクセスするコードを書いたとき、これ

    efcl
    efcl 2012/08/15
    Objective-C のSubscriptingの実装。 添字によるアクセスのコンパイル時に使われるメソッドの実装
  • 1