Comments
Description
Transcript
Untitled - Cocoa勉強会
Cocoa Life Vol.1 MallocDebugを使う MallocDebugを使う Performance Tools入門 その1 関根 延篤 開発環境:iBookG4 1.2GHz MacOSX 10.4.2 Xcode 2.1 発表日:2004/2/22 1. はじめに MallocDebugは対象アプリケーションのメモリの使用状態(メモリの全体量/増減/リーク/バッファ オーバーランなど)を検査するアプリケーションです。検査対象となるアプリケーションに/usr/lib/ libMallocDebug.A.dylibを動的にリンクし、特殊なmalloc関数を使用することでメモリの状態を取得し、 表示することができます。(本稿ではver1.6を元に説明します) なおCocoaアプリケーションだけでなくCarbonアプリケーションの検査をすることもできます。 本稿ではサンプルとしてmLeakerというアプリケーションを使います。各ボタンを押すとMallocDebug の動作を検証できるようなメモリの割当/解放処理を行います。詳しくは記事の中で説明します。 2. 検査対象アプリの選択・起動 Fileメニューの「New Window」でウィンドウを開き、「Browse...」ボタンで検査したいアプリを選択 します。(図1) 【図1】 mLeaker起動直後のブラウザ • Executable: 検査したいアプリケーションのパスを指定します。「 Browse...」ボタンでファイルを指定することがで きます。 • Arguments: 対象アプリを起動するときに渡す引数を指定します。省略できます。 アプリを選択したら「Launch」ボタンでそのアプリが起動します。MallocDebugを通して立ち上げるこ とではじめて「libMallocDebug.A.dylib」がリンクされ、メモリ内容の調査をすることが可能になります。 現在起動中のアプリを調査したい場合は一度終了させ、MallocDebugから起動し直す必要があります。 -1- Samplerを使う Samplerを使う Performance Tools入門 その2 関根 延篤 開発環境:iBookG4 1.2GHz MacOSX 10.4.2 Xcode 2.1 発表日:2004/4/10 1.はじめに Samplerは対象アプリケーションの実行状態を調べ、どの関数(メソッド)にどれだけの時間を費やして いるのかを調査するアプリケーションです。プログラム内のどの処理(関数やメソッド)にどれだけの実行 時間を費やしているのかを把握し、動作速度最適化の参考にすることができます。(本稿ではver2.0.1を元 に説明します) プロファイリングとの違い • Samplerで計測するためにはリコンパイルする必要はありません。配布用のソフトでもそのままサンプリ ングできます。(ただしデバッグシンボルがなければ何を実行しているのかよくわかりませんが) • 各関数の実行コストだけでなく総合的な影響を計測できます。 ある関数がアプリケーションに与える影響は以下のような関数で現すことができます。 パフォーマンスに与え 実行コストが高くても一度しか実行されない関数よりは、コストが低くても何度も繰り返し実行される関 数の方が、アプリケーションに与える影響は大きくなります。そのような影響を調べることができます。 • 各関数にどれだけの時間がかかっているか正確な数字は算出することはできません。Samplerによる計測 では、ごく短い時間で終わってしまう関数などは計測から漏れる可能性があります。もちろんそのような 関数はアプリケーションに与える影響は小さいため、注目する必要はあまりありませんが、正確な計測の 用途には向きません。 2. 基本的な使い方 基本的な使い方は以下の通りです。とても簡単なので気軽に試してみることができます。 (1)File→New...で新しいウィンドウを作成 対象アプリケーションなどを指定するウィンドウ(図1)が表示されますので、設定したらOKボタン を押します。サンプリングのためのウィンドウが表示されます。各項目の意味は以下の通りです。 • Executable: サンプリングしたいアプリケーションのパスを指定します。「Set...」ボタンでファイルを指定するこ とができます。(パスに日本語などが含まれているとSamplerで起動できないことがあるようです。 起動できない時は対象アプリの位置を変えてみてください) • Arguments: 対象アプリを起動するときに渡す引数を指定します。省略できます。 - 11 - ObjectAllocを使う ObjectAllocを使う Performance Tools入門 その3 関根 延篤 開発環境:iBookG4 1.2GHz MacOSX 10.4.2 Xcode 2.1 発表日:2005/3/12 1.はじめに アプリケーションのメモリ割当活動を監視するためのアプリケーションです(図1)。CoreFoundation frameworkに組み込まれているメモリ割当統計機能を利用し、対象アプリケーションの全てのメモリの割 当/解放、Objective-Cオブジェクトのcopy、retain, release, autorelease及びそのイベントのコールス タック(オプション)を記録します。それにより、対象アプリのメモリ割当パターンや傾向を調べることが 出来ます。(本稿ではver3.3を元に説明します) メモリの使用状況を調査するアプリケーションとしてMallocDebugがありますが、MallocDebugはアプ リケーション全体からメモリの状態を確認するのに対し、ObjectAllocは個々のオブジェクトに注目した分 析を行います。従ってObjectAllocは特定のオブジェクトの増減などを監視する用途に向いています。 なおObjectAllocは本来の「オブジェクト(インスタンス)」の他にメモリブロックも検出しますが、本 稿ではそれらをすべてまとめて「オブジェクト」と表記しています。 【図1】 ObjectAllocのメインウィンドウ 2. ObjectAllocの起動/調査開始 (1) 対象アプリケーションの選択 ObjectAllocを起動するとファイル選択ダイアログが表示されるので、調査したいアプリケーション を選択します。既に起動中のアプリケーションをあとから調査することはできません。一度終了して からObjectAllocを使って起動してください。 - 19 - カラーピッカーモジュールを作る オリジナルカラーピッカーを作ろう! カラーピッカーモジュールを作成する みやくん 開発環境:PowerPC G5 Dual 2GHz MacOSX 10.4.3 Xcode 2.2 発表日:2004/8/28 ■カラーピッカーとは? カラーピッカー(図1)とは読んで字のごとく、色を選択するためのイ ンターフェイスです。GUIと選択の仕組み自体もシステムから提供される ので、自分のアプリケーションなどに独自に制作しなくてかまわないの で、とても便利な機能です。 プログラムの仕組みとしては、アプリケーション側からカラーピッ カーのインターフェイスの提供をシステムに依頼した時点で、アプリ内の メモリーにロードされ初期化されます。すなわち、アプリが終了するま では破棄されません。なので、別アプリケーションが使うカラーピッ カーとは基本的には関係はしていないということになります。(システム がグローバルに持っているというわけではありません) 色選択の仕組み自体はシステムがデフォルトに用意したカラー選択パ ネルから自分がほしい色を選択し、その色をアプリケーションなどに反 映させます。グラフィック系ソフトであればペンの色、エディター系であ ればフォントの色などを指定するときにこのインターフェイスを利用する という流れになります。 もちろん、グラフィック系のソフトであれば、アプリ内に独自のカラー 【図1】カラーピッカーウインドウ ピッカーを持っている物はありますが、大手のソフトであればシステム標 準のカラーピッカーと併用できる仕組みになっている物が結構あります。 ■デフォルトカラーピッカーの種類 システム標準で付いている色選択のパネルは下の5種類(図2)、カラーホイール、カラーつまみ、カ ラーパレット、イメージパレット、クレヨンになります。ユーザーは自分の選択したい色を自分の好きな方 法で選択することになります。RGB,CMYK,Gray,アルファ値などいろんなスケールで色を選ぶことができま す。 【図2】デフォルトカラーピッカー - 27 - OmniAppKitの部品を使おう (インスペクタ編) OmniAppKitの部品を使おう インスペクタ編 木村渡 開発環境:iBookG3 900MHz MacOSX 10.3.9 XCode 1.5 発表日:2004/8/28 ■OmniAppKitって? 本誌の「環境設定パネル編」をご覧ください。(P39参照) ■インスペクタって? この記事では、OmniAppKitのインスペクタを指します。OmniGraffleで使われているフローティン グパレットのようなもので、次のような特徴があります。 (A)折りたたむことができます(図1) (B)表示/非表示 (C)グルーピング:複数のインスペクタをくっつけたり、離したりすることができます(図2) (D)ワークスペース:すべてのインスペ クタの表示位置やグルーピングの状況を保存/呼び出し 【図1】折りたたみ 【図2】グルーピング ↑ひらく/とじる↓ このなかでも、グルーピングがOmniAppKitのインスペクタの最大の特徴でしょう。スペースに応じ て自動的に折りたたみされたり、クローズボックスでグループごと非表示になる、パネルをくっつけて グルーピングしたときに自動的にサイズが調整されるなどします。 言葉だけでは説明が難しいので、実際にこの記事のサンプルアプリケーションや、OmniGraffleなど でどのような動きをするのか確かめてみることをおすすめします。 - 47 - ILCrashReporterでクラッシュレポート ILCrashReporterで 自分用のクラッシュレポーター 木村渡 開発環境:iBookG3 900MHz MacOSX 10.3.9 XCode 1.5 発表日:2005/3/12 ■クラッシュレポーターって? 幸運な方は見たことがないかもしれませんが、アプリケーションがクラッシュ(異常終了)すると、 図1のようなダイアログが表示されます。クラッシュレポーターは、アプリケーションがクラッシュした ときの情報を(アプリケーションの開発者ではなく)Appleに送信します。 【図1】クラッシュレポーターウインドウ ■クラッシュレポーターが送信する内容 クラッシュレポーターは以下の内容を送信します。 1.OSのバージョンなど基本的な情報 2.プロセス(アプリケーション)の名前やバージョン 3.発生した例外 4.バックトレース 5.クラッシュ時のスレッドの状態 6.読み込まれていたライブラリ 7.ユーザが入力した内容(「状況を入力してください」などに入力したもの) これらの情報から、アプリケーション開発者はクラッシュの原因を調べます。クラッシュレポートの 詳しい読み方については、Technical Note 2123*1 を見てください。このTechnical Noteにも書いてあ るように、クラッシュレポートの送信先をカスタマイズすることはできません。自分のアプリケ-ション のクラッシュレポートを受け取るには、自分でそのようにプログラミングする必要があります。 *1 http://developer.apple.com/ja/technotes/tn2123.html (日本語) - 53 - Authorization Services Authorization Services 認証して権限を得るためのSecurity Framework 新居雅行 開発環境:PowerBook G4, MacOSX 10.3.9 Xcode 1.x 発表日:2005/3/12 ■システムのどんな機能か? システムアップデートのインストール や、アプリケーションのインストール、 あるいはシステム環境のいくつかの機能 を利用するとき、管理者のパスワードを 要求されるようになっています。システ ムの変更をユーザに自由にさせない事 で、システムの破壊を極力防ぐという効 果があります。認証を得て、かつ管理者 権限で処理を行うという機能は、システ ムのAuthorization Servicesという部 分が担っています。 【図1】認証を求めるダイアログボックス 場合によってはこの機能をアプリケー ションで使いたい場合もあります。 C言 語でのAPIとしては「Security Services」、Ccocoaのクラスとしては 「Security Foundation Framework」 「Security Interface Framework」が用 意されているので、プログラムに管理者認証を組み込みたい場合はこれらの機能を使えばいいでしょう。い ろいろな機能を持っているのですが、ここでは、基本的な使い方を中心に説明をします。 この章の内容はPanther時代に作ったものですが、一部の情報はTiger向けにアップデートしたものを記 載することにします。Panther時代は、ドキュメントは完全ではないため詳細な解説まではできそうにな かったのですが、Tigerリリース後にドキュメントはだいぶんと詳細になっています。ここでは、なるべく 「そのまま使えるサンプル」を紹介します。 ■Mac OS Xの認証サービスのメカニズム Mac OS Xでの管理者認証を行うときにその中心となるのは、Pantherまでは「SecurityServer」、 Tigerでは「securityd」に名前が変わったプロセスです。PantherまではStartupItemsによって起動して いましたが、Tiger以降、launchdでsecuritydが起動するようになっています。 いずれも、 /etc/authorizationファイルにある内容に応じて、権限に対する設定を管理するプロセスで す。簡単に説明すると、 アプリケーションはSecurityServer/securitydに対して、権限の要求を行いま す。そこで新たにプロセスを作ってそこで認証を行う模様です。認証が通れば権限をアプリケーション側に 与えますが、たとえば300秒でその権限は消えたりするといった動作になります。形式としては、「認証 サーバ」のようなものとなります。 - 55 - Kioskモードのアプリケーション Kioskモードのアプリケーション 意外に簡単にできる全画面アプリケーション 新居雅行 開発環境:PowerBook G4, Mac OS X 10.4.2, Xcode v2.1 発表日:2005/10/15 ■Kioskモードについて 【図1】Placard Systemのクライアントの画面 Kioskモード とは、全画面を使っ た状態のことです。よくあるのはゲー ムですが、業務端末でもそうした利 用法は有効です。たとえば、海外では ショッピングモールの案内を行うよ うな端末があって、タッチパネルを装 備した画面を操作して、お店の情報を 引き出すようなものがよくあるそうで す。Mac OS Xでは簡単にKioskモー ドにすることができるのでその方法 を紹介します。 全画面にしたあとの制御も、 OpenGLやQuickTimeといった敷居 の高い方法ではなく、ふつうに Cocoaで作ったウインドウあるいは ビューで制御できるので、Cocoaプ ログラマに取っては何も難しいこと はありません。 デザインテンプレート制作:鷹野雅弘(株式会社スイッチ) ■Kioskモードを使ったアプリケーション Kioskモードを使ったアプリケーション「Placard System」 ( http://msyk.net/macos/placard/)を開発しました。ソースをオープンにしていますので、ダウンロー ドして試してみてください。貸し会議室やイベントなどで、ディスプレイを使った予定を表示するようなシ ステムがありますが、そのクライアントをMacで実現します。サーバ側のアプリケーションはPHPを使って いますので、Macでなくてもかまいません。 ■画面モードの設定と全画面にする方法 Mac OS X v10.2から搭載されたSystem UI APIを使って、関数呼び出し1つで画面設定ができます。 「システムユーザインタフェース」とは、メニュー、Dockあたりを指す言葉です。詳細については、 ADCのサイトでTechnical Noteとして公開されている「Guide to Creating Kiosks on Mac OS X 」 (http://developer.apple.com/technotes/tn2002/tn2062.html)に紹介があります。 - 61 - キーチェーンアクセス キーチェーンアクセス POP3での場合 大森智史 開発環境:iBook 1.33GHz MacOSX 10.4.2 Xcode 2.1 発表日:2005/11/1 ■キーチェーンとは? 【図1】 キーチェーンとは、IDやパスフレーズを一括管理できる仕組みでOS10.2から使用可能になります。ユー ザー情報を一括管理できるので、たとえばApple mailで入力したサーバ、アカウント、パスフレーズを、他 のメールクライアントでも使用できます。また、システムで暗号化されますので、安全に保存されます。 (図1) - 65 - OME Spotligntインポータ OME Spotlightインポータ http://mac-ome.jp/ 村上 幸雄 開発環境:PowerPC G5 Dual 2GHz MacOSX 10.4.2 Xcode 2.1 発表日:2005/8/27 ■これはWWDC参加前に課せられたハードルでした OME(オープンメール環境:章末参照)の機能追加は、メーリ 【図1】WWDC2005の会場 ングリストやiChatを使ったチャットでのちょっとした一言から 実現する場合がよくあります。このSpotlightインポータの場合も 同様でした。 僕がメーリングリストで、「Tigerがリリースされるので、Tiger 対応の新機能が欲しいね!」と発言したところ、「だったら村上 さんが、Tigerの目玉であるSpotlight対応をやったら。」とツッ コまれてしまったのが事の始まりです。 この時からSpotlightインポータは僕の課題となり、今年の WWDCはSpotlight関連のセッションを中心に参加するはめに なってしまいました(図1)。 ■Spotligntインポータとは? Spotlightインポータとは、アプリケーションから独立したOS側で文書ファイル検索の仕組みを提供する 機能です。Mac OS X 10.4 Tiger 以降で利用でき、文書ファイルに関係する情報(メタデータと呼びま す)はOS内部に組み込まれているデータベースで管理され、データベースへの登録はSpotlightインポータ と呼ばれるPlug-inで行われます。文書ファイルとSpotlightインポータは、 UTI(Uniform Type Identifier)で関連付けられ、文書ファイルが作成、または、修正されたときに、Spotlightインポータが呼 ばれてメタデータを登録するという仕組みになっています(図2)。 【図2】メタデータの登録 文書 ファイル 文書 インポータ ファイル インポータ 文書 ファイル - 71 - OME Spotligntインポータ Interface Builderの秘密 不定形ウインドウをIBから作る 成田 丞 開発環境:PoweBookG4 MacOSX 10.4.3 Xcode 2.2 発表日:2005/12/3 ■不定形ウインドウの作りかた 多くのCocoaの資料で不定形ウインドウの作り方が解説されていますが、その全てがコーディングが必要 でした。ここでは、Interface Builderのパレットを作る事によってコーディングなしで不定形ウインドウを 作成する方法を紹介します。MTWindowExtenderは今回この記事の為に作ったInterface Builderのパレッ トです。今回のテーマは、このInterface Builderパレットを使う事でコーディング無しの不定形ウインドウ を実現することです。 ■MTWindowExtenderをインストール MTWindowExtenderフォルダーにあるプロジェクトをコンパイルし、パレットとフレームワークを以下 の位置にコピーする事で、Interface Builderから使う事が出来ます。 (1) MTWindowExtenderをAll&Releaseでコンパイル ./build/Releaseに MTWindowExtender.paletteとMTWindowExtenderFramework.frameworkが作成されます。 (2) ライブラリとパレットをインストール MTWindowExtender.paletteを ~/ライブラリ/Palettes に、 MTWindowExtenderFramework.frameworkを ~/ライブラリ/Frameworks にコピーします。 (3) Interface Builderを立ち上げる パレットから図1のようにMTWindowExtenderが使える様になります。パレットが読み込まれないよ うでしたら、メニューから Tools -> Pallets -> Pallet Preferences... を選択して Add.. ボタンを押し て追加してください。 【図1】MTWindowExtenderパレット - 77 - Web Kitで新しいMIMEを表示 Web Kitで新しいMIMEを表示 mkino 開発環境:iMac G5 2GHz MacOSX 10.4.3 Xcode 2.1 書き下ろし ■Web KitとMIMEタイプ Web Kitは、Mac OS XでHTMLを表示するためのフレームワークです。標準のWebブラウザである Safariはもちろん、MailなどHTML表示が必要なアプリケーションで使われます。自分のアプリケーション で使用することもできて、Safariと同等の表示機能を持つブラウザを作ることもできます。 現在のWebブラウザは、Web技術の爆発的な拡張を受けて、HTMLやGIFだけではなく、様々なタイプの データを表示することが求められます。様々なフォーマットの画像、音声、ビデオや、PDFやXMLといっ た、新しいタイプのテキストデータもあります。これらのデータの型は、MIMEタイプ(Multiple Internet Mail Extension)として定義されています。 MIMEは、名前の通りもともとメールで使われていたもので、データをエンコードする方法を定めた規格 です。そのために大量のデータタイプを定義したので、これをMIMEタイプと呼び、拡張子以外のデータタ イプを表す方法として使われています。MIMEタイプは、IANA(Internet Assigned Numbers Authority)によって管理されており、Webページから登録されているタイプの一覧を見ることができま す。(http://www.iana.org/assignments/media-types/index.html) さて、Web Kitでも、この大量のMIMEタイプをサポートする必要があります。そのために、新しいMIME タイプを処理するクラスを追加する仕組みが提供されています。これにより、新しいデータフォーマットが 登場しても、柔軟に対応できることになっています。この記事では、RSSのためのMIMEタイプを例にとっ て、新しいMIMEを表示する手順を紹介しましょう。 ■MIMEタイプのためのクラス Web Kitでは、あるMIMEタイプに対してRepresentationクラスとViewクラスという、2つのクラスを 使って処理を行います。Representationクラスはデータを取り扱い、Viewクラスはそれを表示するという ことになります。 それぞれのクラスのために、プロトコルが定義されています。Representationクラスに対しては WebDocumentRepresentationプロトコル、Viewクラスに対してはWebDocumentViewプロトコルで す。 実際に、現在のWeb Kit(Mac OS X 10.4.3)でどんなMIMEをサポートしていて、それに対してどのク ラスを使っているか調べてみました。次の表(次頁)のようになります。簡単に区分すると、HTMLを表示 するもの、テキストを表示するもの、PDFを表示するもの、そして画像を表示するもの、となります。 - 85 - Cocoa Life Vol.1 平成17年12月25日発行 通算1号 編集/発行人 みやくん Cocoa勉強会 [email protected] 平成15年10月1日第3種郵便物不許可 PRINTED IN JAPAN 会誌 05874-11 Cocoa勉強会 CopyRight 2005 481005254741135 00255