spacer
natsu_icon iPhoneアプリ開発に関する内容を中心とした、開発者Natsuの記録。
開発Tipsや読んだ本の紹介などなど。

Calender

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
September 2010

Natsu's note Category


Xcode の最新10件のエントリー
[Xcode] 実機データのダウンロードと更新
Xcode : エディタの縦分割
Xcode : Product validation (ビルドプロダクトを検証)
Xcode : コピーライトに自分の会社名を自動で入れる
Xcode : メソッドリストにコメントを表示
iPhoneアプリ開発:XcodeのBuild and Analyze

LINKS
NATSU'S NOTE TOP
PROFILE
CONTACT

twitter.com/natsun_happy
MediaMarker

MoMAstore

ボーズ・モバイルヘッドセット

ウェーブミュージックシステム

ヤマギワ オンラインストア

09.10.26 iPhoneアプリ開発:XcodeのBuild and Analyze


iPhone, iPod touchアプリ開発、Tips集の記念すべき第一回として、先日感動した「Build And Analyze」機能についてまとめる。

これを使うと、Xcode上で静的解析を行うことができる。
つまり、ビルド時に、コードをチェックして不整合を指摘してくれる機能なのだ。

解析エンジンはClangだ。これまでは、ターミナルを起動してClangを実行させる必要があったようだが、最新のXcode(Xcode3.2もしくはそれ以上)では、Xcode上で簡単に利用することができるようになった。これを使わない手はない!のだ(ちなみに、Natsuは、ターミナルでClangを実行させたことはない・・・)。

そして、この結果の見え方がまたすごい。矢印で問題点を順に指摘してくれる。まさに、先生のよう。笑
これを使えば、あるレベルまでは、非常に簡単にバグを減らすことができるだろう。

できること
コードレベルで以下のチェックをしてくれる。
・ロジック:未初期化変数の使用や、ヌルポインタの参照等。
・メモリ管理:リークチェック等。
・デッドストア:未使用変数への代入等
・API usage:環境依存のAPI usage
使用方法
いたって簡単。
Xcodeのビルドメニューから、「Build and Analyze」を選択する。これだけ!

Build and Analyze menu

解析例
一番役に立ちそうな、メモリ管理の例をふたつと未初期化変数の例をひとつ挙げてみる。
先に言っておくと、ba_test1とba_test2には、バグが潜んでいる。そして、ba_test3には、今の時点ではバグとは言い切れないかもしれないが、危険なコードが潜んでいる。

注意:下の図はXcodeのスクリーンショットそのままなので、図中の青矢印もXcodeが表示してくれたものです。

  ba_test1 (Potential leak)
(NSString *)型の変数hogeは、initWithStringにより生成されているため、生成元はオーナーシップを持つ。
また、生成された時点でリファレンスカウンタが+1されている(ということまで事細かに説明してくれている!)。
それにもかかわらず、arrayにaddしたあとで(この時点でリファレンスカウンタはさらに+1されている)releaseしていないため、ここでリークが発生!
Build and Analyze Potential leak


ba_test2 (Incorrect decrement of the reference count)
(NSString *)型の変数hogeは、stringWithStringにより生成されているため、生成元はオーナーシップを持たない。
arrayにaddした時点でリファレンスカウンタが+1され保持しているが、その後、(オーナーシップを持たないにも関わらず)releaseしてしまっている。
これにより、せっかく保持したhogeを不正にreleaseしてしまうこととなり、以降、arrayからhogeを取り出そうとしたときに不正アクセスが発生する可能性がある。
Build and Analyze incorrect release


ba_test3 (Uninitialized value)
引数command_idをもとに、変数valueに値を入れるswitch文。
変数宣言時に初期化されていない、かつ、defaultに落ちたときに代入されないため、未初期化となる可能性がある。
コード生成時には、defaultに落ちることはない!と確信している場合でも、コードの修正を繰り返していくうちに、案外、defaultに落ちる日はやってくるものだ。
アップデートをしてもバグを増やさないために、危険は小さいうちに摘み取ってしまおう。

Build and Analyze uninitialized value


もっと便利な使い方
上では、メニューから解析ツールを起動する方法を説明したが、ビルドするごとに解析することも可能だ。
プロジェクトのビルドオプションで、「静的アナライザを実行」にチェックをしておけばいい。

Build and Analyze Build Option
ただし、プロジェクトの規模が大きいと解析に時間がかかるため、開発効率を低下させかねない。

自分の開発状況と、バグの潜み具合、その他もろもろに応じて、手動と自動を使い分けよう。
なお、ビルドオプションを利用する場合、Debugビルドでのみ有効とし、ReleaseやDistributionでは無効としておくことも、もちろん可能である。
Natsuは、このような使い分けをしている。

参照ドキュメント
Xcode project management guide

関連する本(リファレンスカウンタ方式のメモリ管理)
詳解 Objective-C 2.0 (荻原 剛志)

05-02章(p.90)〜05-04章(p.105)

ものすごくわかりやすい!!

詳解 Objective-C 2.0
¥ 4,410 / ソフトバンククリエイティブ (2008-05-28)
在庫あり。

C++、javaは経験済みで新たにiPhoneアプリ開発に着手しようと手に取った本でしたが オブジェクト指向、クラス、継承など重要な概念の説明箇所はもっと簡潔明瞭でいいと 思いました。 初心者にも優しい言い回しとして工夫されたと思うんですが、それがかえってややこしくし 分かりにくくなってます。 つまずいてしまうか、誤解してしまうかの危険があると思います。 一度誤って理解したり、苦手意識を持ってしまうと修正が困難で面倒なので 新人、後輩にはこの本は薦めたくないです。 オブジェクト指向言語についてすでに承知している人が手っ取り早くobjective-cを 押させてしまおうという場合なら助けになると思います。
...続きを読む



NatsuのiPhone, iPod touchアプリ
iLoanCalc iLoan Calc
ボーナス払い/繰上げ返済対応
ローンシミュレーションアプリ
App_Store_Badge_EN
clockBIN pro clockBIN pro
バイナリ時計&タイマー
(デジタル表示つき)
App_Store_Badge_EN