タグ

xcodeとiOSに関するDNPPのブックマーク (24)

  • Objective-C のコードレビューチェックリスト - Qiita

    はじめに 稿は Juri Pakaste 氏による Cocoa review checklist (commit fff5703)の翻訳です。他人の Objective-C のコードをレビューするとき注意する点、また普段のコーディングで心がけるべき点についてまとめられています。 なお、原文のタイトルは Cocoa review checklist となっていますが、内容が Cocoa に限らない範囲のトピックをカバーしているため、稿のタイトルは「Objective-C の〜」としました。 誤訳の指摘や例の補足を歓迎します。 コードの見た目とコード以外の問題 不要な #import や @class 宣言を消す #import をソートする .m ファイルの中では、対応する .h ファイルの #import を最初の行に書く。空行をはさんで、ソートされた他の #import を書く。 X

    Objective-C のコードレビューチェックリスト - Qiita
  • lipo を使って簡単に Universal Binary を作成する方法

    iOS 向けのライブラリやフレームワークは、よく static library (.aファイル) の形式で配布されています。これは iOS がユーザーが作成した dynamic library (.dylibファイル) や framework バンドルをサポートしていないからなのですが、ときどきこの static library がシミュレーターとデバイス両方で使える形式、いわゆる Universal Binary になっていない場合があります。 たとえばこんな感じですね。 この状態でビルドを行うと、シミュレーター向けビルドを行えばデバイス用のバイナリが、デバイス向けビルドを行えばシミュレーター用のバイナリが、それぞれ対応していないアーキテクチャであると警告を出してしまいます。警告ですからコンパイルは通るのですが、私は几帳面で気になってしまうので、これを解消したいと考えます。 ■lipoの

    lipo を使って簡単に Universal Binary を作成する方法
  • OCMockでテストを簡単に書く方法について

    プログラミング (iOS, JavaScript, Jenkins, Sikuli) とMaciPhoneなどの話題が中心のブログ OCMockはXcode標準のテスト環境でも利用可能なモックライブラリです。 OCMockを利用すると他のクラス実装に依存しないようなテストを簡単に書くことができるようになります。 そこで、記事ではOCMockを導入して、プロジェクトに必要な設定を行う方法とOCMockの簡単な利用法について紹介します。なお、利用環境はOS X 10.6.8, Xcode 4.2, OCMock 2.0.1です。 OCMockの簡単な利用法 まずはOCMockの簡単な利用法について少しだけ紹介します。 概要についてはFeatures - OCMockがより詳しいです。 stub テストで未実装なクラスや外部サーバに依存するようなクラスを利用しなければならず、 とりあえずそれ

    OCMockでテストを簡単に書く方法について
  • AFIncrementalStoreの紹介(発表メモ)

    gistfile1.md AFIncrementalStoreの紹介(発表メモ) 発表者: @hedjirog 日時: 2013.03.02 場所: iOS部 @下北沢オープンソースCafe テーマ: AFNetworking/AFIncrementalStore (※発表時:0.3.2) 発表の流れ AFIncrementalStoreを利用すると何ができるか AFIncrementalStoreとは何か NSIncrementalStoreとは何か AFIncrementalStoreは何をしているか AFIncrementalStoreはどのように利用するか その他 サンプルプロジェクト cloneの方法 $ git clone --recursive git://github.com/AFNetworking/AFIncrementalStore.git $ open AFIncr

    AFIncrementalStoreの紹介(発表メモ)
    DNPP
    DNPP 2013/03/04
  • iPhoneのデバッグハック

    5. backtrace()の使い方//スタックトレースの出力[mstrappendString:@"Stack:"]; void* callstack[128];inti, frames = backtrace(callstack, 128); char** strs = backtrace_symbols(callstack, frames); for (i = 0; i < frames; ++i) { [mstrappendFormat:@"%s",strs[i]]; } 7. 出力例 Signal:10 Stack: 0 ibisMail 0x0006989d dump + 64 1 ibisMail 0x00069b4b signalHandler + 46 2 libSystem.B.dylib 0x31dcd60b _sigtr

    iPhoneのデバッグハック
    DNPP
    DNPP 2013/02/10
  • Xcodeプロジェクト内のクラスの依存関係を図示する - Qiita

    他人から引き継いだプロジェクトの大まかな全体設計を把握したい場合、規模の大きいライブラリの一部だけ取り出して使用したい場合、複雑になってしまったコードをリファクタリングしたい場合等、プロジェクト内のクラスの依存関係が一望できると有益な場面は多いのではないでしょうか。 objc_depというスクリプトを用いると、下記のように、Xcodeプロジェクト内のクラスの依存関係を示す図をコマンド一発で生成することができます。 このスクリプトの使い方、生成される図の見方等を紹介します。 スクリプトの実行方法 次のURLからダウンロードしてきて解凍すると、objc_dep.py というファイルが入っています。 https://github.com/nst/objc_dep そのスクリプトを適当な場所に置き、ターミナルから次のように実行します。 というコマンドになります。 依存関係図を表示 出力される.do

    Xcodeプロジェクト内のクラスの依存関係を図示する - Qiita
  • $(SRCROOT) や $(BUILD_DIR) 等の Xcode で使用しているマクロの置換内容の一覧を調べる方法 - その後のその後

    Info.plistや、ビルド設定をいじっていると、こんな文字列に出くわすかと思います。 $(PRODUCT_NAME) $(TARGET_TEMP_DIR) $(SRCROOT) これらはそれぞれ特別な意味を持ち、Xcode がビルド時だか何だかのタイミングでプロダクト名とか環境に応じたパスとかに置き換えたりしてくれるものです。 が、 「SRCROOTってどこだっけ?プロジェクト直下?それともその一つ下?」 「Library Search Path を指定したいけどこの場所を指定するのにどのマクロを使っていいかわからない」 みたいなことになることが度々あるのではないでしょうか?(僕はあります) そして困ったことに、これらを網羅したAppleのドキュメントもありません。 (※というのは間違いで、バッチリありました。末尾の追記をご参照ください) 最近やっとその「Xcode で使用しているマク

    $(SRCROOT) や $(BUILD_DIR) 等の Xcode で使用しているマクロの置換内容の一覧を調べる方法 - その後のその後
  • UIKit とスレッドのお約束

    アプリが小気味よく動くようにするために、メインスレッドでの重たい処理を避けて、適宜バックグラウンドスレッドに処理を回すことはよくあります。 このとき注意が必要なのは、バックグラウンドでの処理結果を画面に反映させる時の以下のお約束です。 UIKit のオブジェクトはメインスレッド以外からアクセスしてはいけない Apple のドキュメントとしては Cocoa Fundamentals Guide に “All UIKit objects should be used on the main thread only” と書いてあります。この制限は UIKit 特有ではなく、Java の Swing などでも共通の設計です。GUI のパフォーマンスを良くするために、スレッドセーフをあえて捨てて単純化しているのです。 ではどうすれば良いのかと言うと、バックグラウンドスレッドからメインスレッドに処理を

    UIKit とスレッドのお約束
  • Cocoaの日々: [iOS][Mac] Xcode4 : ドラッグ&ドロップで IBOutlet コードを生成する

    知ってはいたが試してなかった。こりゃ便利。 #しこしこ手で書いていた今まではいったいなんだったのか。。 以下、手順 まず Xib を開いた後、右上の Editor から真ん中の Assistant Editor を開く。

    Cocoaの日々: [iOS][Mac] Xcode4 : ドラッグ&ドロップで IBOutlet コードを生成する
  • Core Animation で画像を回す

    データのダウンロード中など待ち状態のときに、画像をくるくる回して読み込み中だということを表したいことってありますよね。アニメーション GIF や複数の画像の切り替えでも表現できますが、今回は1枚の画像を Core Animation の transform プロパティを使って回す方法を紹介したいと思います。 まず、アニメーションには CABasicAnimation を使います。作成するときに、animationWithKeyPath に transform をセットします。 つぎに、回転のはじめと終わりの角度を設定します。時計回りの場合は fromValue を 0、toValue を 2π にします。反時計回りと場合は fromValue と toValue の値を入れ替えてください。 そして、valueFunction で回転軸を決めます。今回は z 軸で回転させたいので、kCAVa

    Core Animation で画像を回す
  • より豊かな表現のために、3つのステップで実装する Core Text

    こんにちは、開発担当の眞弓です。 テキストを表示するとき、通常は UILabel などを使いますがときどき「凝った文字列を使いたい」ということはないでしょうか? そんなときのために、今回は Core Text の基的な使い方について書いてみようと思います。 人によってやり方は違うと思いますが、ちょっとしたことに使う場合に私がやっててわかりやすかった方法を紹介します。 位置を指定するやりかたはイメージしにくいので、文字列単位で扱えるやり方で実装をしてみました。 以下のような感じで、「属性付き文字列を作って、その文字列を付け足していって、最後にまとめて表示」というやり方です。 1 : 文字列を作成 2 : フレームを作成 3 : DrawRect 1 : 文字列を作成 属性付き文字列は以下のような感じで作っていきます。 atrString = [[NSMutableAttributedStr

    より豊かな表現のために、3つのステップで実装する Core Text
  • Nib ファイルから Objective-C のソースコードを生成する

    iOS/Mac 開発担当の松です。 突然ですが、Nib ファイル(以下 Nib)が好きになれません。確かに GUI の部品をレイアウトするコードを書くのは大変なので、Interface Builder で直感的に画面を作っていけるのはありがたいです。 しかし Visual Studio 等と違って、作った画面がソースコードではなく Nib というリソースになるため、言語や環境によって動的に部品を変更する必要が出てくると、Nib とソースコードに画面を作成する為の情報が散らばってしまいますね。これだと管理コストも高くなりますし、何より気持ちが悪いです。 どうしてソースコードが生成されないんだ!と憤っていたら、nib2objc という Nib から Objective-C のコードを生成するツールが、公開されていることを知りました。しかも随分前からあるみたいです。 早速ですが Mosa の、

    Nib ファイルから Objective-C のソースコードを生成する
  • UITextField でのバリデーションのタイミング

    アプリによってはユーザーの入力値をバリデーションする必要がある場合があります。今回はバリデーションを行うタイミングについて書きたいと思います。 今回は以下のようなアカウント情報入力画面を考えてみます。 UITextField が画面に表示されている NavigationBar には「保存」ボタンが設置されている 入力値が「カラ」もしくは「空白文字」以外の場合を正常な入力とする UITextField への入力値が不正な値の場合には「保存」ボタンを無効化する UITextField のデリゲートでは不十分? UISearchBarDelegate には以下のような入力後に呼ばれるデリゲートメソッドがあります。 - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText しかし、UITextFi

    UITextField でのバリデーションのタイミング
  • メソッドの遅延実行

    あるメソッドを一定時間後に実行したい、ということはよくあります(これを、メソッドの遅延実行と呼ぶことにします)。そんなときにまず思いつくのは NSTimer を使う方法ではないでしょうか。 NSTimer を使う以外にも、NSObject にある次のメソッドで簡単に同じことができます。 NSObject - (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay 例として、iPhone 標準搭載の写真アプリを見てみましょう。 写真アプリでは、写真を見ている間に一定時間ユーザの操作が無ければ、ツールバーとナビゲーションバーが消えます。 この処理は次のようなコードで実現できます。 // self は UIViewController … { … // 一定時間

    メソッドの遅延実行
  • Xcode 4 の IBOutlet 追加機能がとても便利

    こんにちは。開発担当の金内です。 iPhone アプリ開発に欠かせないツールといえば Xcode ですね。 今年の3月に大幅なアップデートとなった Xcode 4 正式版がリリースされたことはご存知のとおり。シングルウィンドウ化や Interface Builder の統合など、ほとんど別物といってもいい変貌をとげてくれました。 さて、Xcode 3.x でバリバリとコーディングしていたみなさんは、Xcode 4 に移行しているでしょうか? 筆者の周囲の声を聞いてみると「自宅では使ってるけど仕事では…」とか「まだバグが気になるから…」と、まだ移行に踏み切れない空気を感じます。激変してますからね。気持ちはとてもよくわかります。 しかし、いずれは移行しなければならないわけですし、みなさん興味はお持ちだと思うので、iPhone アプリプログラマに嬉しい Xcode 4 の便利機能を1つご紹介しま

    Xcode 4 の IBOutlet 追加機能がとても便利
  • ARC の有効/無効をファイルごとに設定する方法 - その後のその後

    プロジェクト全体でARCを有効にした状態で、一部ファイルを無効にしたい場合は、 1. プロジェクト設定画面のBuild Phasesタブを開く 2. ARCを無効にしたいファイルをまとめて選択 3. リターンキーを押すとダイアログボックスが出てくるので、"-fno-objc-arc"というコンパイラフラグを追加する。 逆に、一部ファイルだけ有効にしたい場合は、プロジェクト全体でARCを無効にした状態で、"-fobjc-arc"フラグを追加します。 参考ページ http://stackoverflow.com/questions/6308425/ios-5-best-practice-release-retain/ http://ios.biomsoft.com/2011/12/24/migrating-your-code-to-objective-c-arc/

    ARC の有効/無効をファイルごとに設定する方法 - その後のその後
  • NSLoggerで手軽にログを取る方法について

    アプリケーションへの導入 自分のアプリへの導入は次のような手順で行います。 Add to your project/iOS - Mac OS X内にある次の3ファイルをプロジェクトに追加します。 LoggerCommon.h LoggerClient.h LoggerClient.m 次の2フレームワークを追加します。 CFNetwork.framework SystemConfiguration.framework 後は次の関数を呼ぶだけです。第1引数がタグ、第2引数がログレベル、第3引数以降がフォーマット付き文字列になります。 LogMessage(@"network", 0, @"なんかのエラー: %@", url); 基API NSLoggerの基APIの一部を次に示します。 void LogMessageCompat(NSString *format, ...); void

    NSLoggerで手軽にログを取る方法について
  • iOSアプリ開発するなら知っておきたいライブラリ – Yuyak

    まとめてみる。 基的なもの Three20 FacebookのオープンソースプロジェクトUI系が豊富です。 google-toolbox-for-mac こちらはGoogle製。
基的にMacのライブラリなんですが、iPhone用のもあったりする。 ゲームとか cocos2d ドキュメントも豊富ですしかなり簡単に使えます。その名のとおり2D向けのゲームエンジンです。 SIO2::2D/3D Game Engine for Mobile Devices 使ったことはないのですが、何か格的なゲームによさそうです。こちらは3D向けですかね。 ネットワーク系 ASIHTTPRequest Documentation – All-Seeing Interactive NSURLConnectionに不満をお持ちの方はこちらをどうぞ。おそらくその不満は解消されます。 OAuthConsumer

  • iPhone デバッグ用のマクロ - Psychs's blog

    iPhone アプリをデバッグするときに、ソースに NSLog をそのまま書いてしまうと、リリース時に削除するのが面倒なので、以下のようなマクロを使っています。 #ifdef DEBUG # define LOG(...) NSLog(__VA_ARGS__) # define LOG_METHOD NSLog(@"%s", __func__) #else # define LOG(...) ; # define LOG_METHOD ; #endif 使い方は、まずプロジェクトの設定を開き、「Debug」構成を選択してから、一番下のユーザ定義カテゴリの「GCC_PREPROCESSOR_DEFINITIONS」に「DEBUG」を追加しておきます。 こうすることで、Debug build のときにだけ「DEBUG」が定義されます。 あとは、NSLog の代わりに LOG を使うようにすれば

  • iPhoneデバッグ用のマクロで、クラス名とメソッド名を自動的にログ出力する - 24/7 twenty-four seven

    iPhone デバッグ用のマクロ - Windchase #ifdef DEBUG # define LOG(...) NSLog(__VA_ARGS__) # define LOG_CURRENT_METHOD NSLog(NSStringFromSelector(_cmd)) #else # define LOG(...) ; # define LOG_CURRENT_METHOD ; #endif iPhone デバッグ用のマクロ - Windchase このマクロをちょっと変えて、クラス名を自動的に出力するようにしました。 #ifdef DEBUG # define LOG(...) NSLog(__VA_ARGS__) # define LOG_CURRENT_METHOD NSLog(@"%@/%@", NSStringFromClass([self class]), NSSt

    iPhoneデバッグ用のマクロで、クラス名とメソッド名を自動的にログ出力する - 24/7 twenty-four seven