統計情報(30日間)


最新情報をツイート


人気の投稿

Xcode ブレークポイント Tips

このエントリーをはてなブックマークに追加

よく知られているTipsの他、条件によってブレークポイントを実行時に設定するなんて大技も紹介されている。



ブレークポイントではデバッガのコマンドを実行できるのでここにブレークポイント設定コマンドを書いておく。
コマンド
breakpoint set -f APViewController.m -l 33
この発想はなかった。面白い。

Xcode 4.6のレコメンド警告

このエントリーをはてなブックマークに追加

既存プロジェクトを Xcode4.6で読み込んだ時に出る追加設定に関する解説。

追加される設定は次の4つ。

CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;

CLANG_WARN_CONSTANT_CONVERSION
定数代入(変換)の問題を知らせてくれる。たとえばこんなケース。
NSInteger value = 4294967296;
このケースは long long→NSInteger変換となり、実際は 0が入ってしまう。この設定があると警告が出る。

CLANG_WARN_ENUM_CONVERSION
異なるEnum設定値を使った時に警告を出してくれる。たとえばこんなケース。
typedef enum
{
  UYLMagicUser = 0,
  UYLMagicAdmin = 1
} UYLMagicValue;

typedef enum
{
  UYLNonMagicUser = 10,
  UYLNonMagicAdmin = 11
} UYLNonMagicValue;
- (void)doSomeMagic:(UYLMagicValue)magicType
{
  //
}
と定義されていた時
[self doSomeMagic:UYLNonMagicAdmin];
とすると警告が出る。

CLANG_WARN_INT_CONVERSION
ことなる整数値をポインタ型へ代入する場合、たとえばこういうケースで警告が出る。
char *pointer = 1234;

CLANG_WARN__DUPLICATE_METHOD_MATCH
同じメソッド定義が複数あった場合の警告。


− - - -
試しに Xcode4.6で新規プロジェクトを作成するとすべてYESとなっていた。


空ループをワーニングで見つける

このエントリーをはてなブックマークに追加

Xcode 4.6 から追加された Empty Loop Bodies を使うと空のループを検出することができる。





空のループとは if (x==0); や while(i); みたいなやつ。

こんな感じで検出できる。



自分の場合 {}を必ず書くのであまりこのケースは遭遇したことがほとんど無いと思うが、破壊力あるバグなので有効にしておいて損はないかも。


.gitignore できない .pbxproj をどうするか

このエントリーをはてなブックマークに追加

複数人でgit共有すると悩ましい project.pbxproj のマージ問題の解決方法について。





答えは .pbxprojファイルを .gitattributes を使ってバイナリ指定してやる。
*.pbxproj binary merge=union

なるほどー。

ピアソンから新しい本が:

NS_ENUM - enumの新しい書き方

このエントリーをはてなブックマークに追加

これは知らなかった。



こう書けて
typedef enum Style : NSUInteger{
    StyleDefault,
    StyleValue1,
    StyleValue2,
    StyleSubtitle
};

さらにこう書けるらしい。
typedef NS_ENUM(NSUInteger, Style) {
    StyleDefault,
    StyleValue1,
    StyleValue2,
    StyleSubtitle
};

他にビットマスク定義用に NS_OPTIONSもある。


(関連)




Storyboard のローカライズ

このエントリーをはてなブックマークに追加

GUIのローカライズがStroyboardで改善されているとのこと。



おー、これは素晴らしい。Stroyboard上のラベルが stringsファイルとして自動生成されている。従来のXibだとコマンドラインツールの支援無しでできなかったことがXcode標準でいつのまにかサポートされていたとは。

なお言語を増やすにはここで行う。
言語を追加すると新しい言語用の stringsファイルが自動生成される(どの言語を参照するか stringsファイル毎に訪ねてくれる)。


Xcode-4-Fixins

このエントリーをはてなブックマークに追加

Xcode 4 用プラグイン集。



ビルドすればインストールもやってくれる。
(インストール先:~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/.)

いくつか紹介する。

CurrentLineHighlighter
編集中の行の背景に色が付けられる。いいかも。


FindFix
Command+F を押した時にフルオプションで検索メニューを表示してくれる。地味に便利?


HideDistractions
エディタだけの表示にする。便利だが元に戻せないのが難点(方法ある?)

InhibitTabNextPlaceholder
タブキーを教えても補完文字列のプレースホルダーへジャンプしない。これは不便に感じていたので地味に便利かも。


TabAcceptsCompletion
補完選択時にTABキーが使える。これも地味に便利か。




−−
Xcodeプラグインを開発する場合にもソースが参考になりそう。


文字列簡単編集Xcodeプラグイン

このエントリーをはてなブックマークに追加



@""で囲われた文字列にカーソルを当てると吹出しがポップアップして編集ができる。


@"\n" は改行として認識される。なおローカライズ文字列 "" は認識してくれなかった(C文字列も同様)。残念。

導入はソースをダウンロードしてビルドするだけ。Xcodeを再起動すると使えるようになる。
プラグインは自動的に下記へインストールされる。
~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/
HOStringSense.xcplugin

Xcode4 用カスタムテンプレートの作り方

このエントリーをはてなブックマークに追加

ディレクトリ構成や個々の設定ファイルのエントリ説明などかなり詳しく解説されている。



こんな感じで新規作成時のひな形が作れる。


例としてシングルトンクラスを作る為のテンプレートが紹介されている。
#import "___FILEBASENAME___.h"

@implementation ___FILEBASENAMEASIDENTIFIER___

+ (id)shared___FILEBASENAMEASIDENTIFIER___ {
    static dispatch_once_t predicate;
    static ___FILEBASENAMEASIDENTIFIER___ *instance = nil;
    dispatch_once(&predicate, ^{instance = [[self alloc] init];});
    return instance;
}

@end

他に GHUnit のひな形など。
#import "___VARIABLE_cutClass:identifier___.h"

@interface ___FILEBASENAMEASIDENTIFIER___ : GHTestCase
@end

@implementation ___FILEBASENAMEASIDENTIFIER___

- (void)setUp {

}

- (void)tearDown {

}

- (void)testMethod {
 // Implement test case
}

@end

結構いいかも。


例外ブレークポイントにシンボリックブレークポイント、そしてCPUレジスタでセレクタ調査・他〜役立つデバッグ TIPS

このエントリーをはてなブックマークに追加

Xcode 4 でのデバッグ機能Tips。


例外ブレークポイントにシンボリックブレークポイントは知らなかった。クラッシュ時に CPUレジスタを表示することで実行中(だった)メソッドの手がかりを得る方法なども紹介されている(シミュレータなら "x/s $ecx"、実機なら "x/s $r1")。


関連情報

例外ブレークポイントの使い方。

Xcode 4 のユーザマニュアル。例外、シンボリック共に使い方はちゃんと書いてある。

シンボリック指定の例(引用)
  • A method name. For example, pathsMatchingExtensions:.
  • A method of a particular class. For example, [SKTLine drawHandlesInView], people::Person::name().
  • A function name. For example, _objc_msgForward.

CPUレジスタの格納情報

クラッシュ時にCPUのレジスタを見るとレシーバとセレクタの情報が取れる(下図は引用)。

ビルド時に git のコミット回数を Info.plist のバージョン番号に設定する方法

このエントリーをはてなブックマークに追加

ビルド時にシェルスクリプトで
InfoPlist.h

#define BUILD_VERSION 200
 ↑ここがコミット回数になるようにスクリプトを書いておく
のようなファイルを作っておく。
またInfo.plistのCFBundleVersionにこのシンボルを当てておく。
その上でビルド設定の Info.plist Preprosessor Prefix File へ InfoPlist.h を、Preprosess Info.plist File を YES を当てておく。
するとビルド時に Info.plist を #define値で書き換えることができる。

これは以前からやりたかったことだが初めて知った。今度試してみよう。