xcodeでlldbコマンド
XCodeのデバッガのコンソールではログの表示だけではなくlldbのコマンドが使える。
以下の3つのコマンドを覚えるだけで便利に使える。
コマンド コマンド 引数 機能 s ステップ実行 c 実行を継続 po 式 オブジェクト(式)の評価
poコマンドは多機能で式の評価と言いつつ以下の様に、値の表示、メソッドの実行、変数に代入の機能がある。
- id型を見る
(lldb) po self.window (NSWindow *) $7 = 0x000000010230d2c0 <NSWindow: 0x10230d2c0>
- メソッドの実行
(lldb) po [self openPanel:nil] <no result> (lldb) c
- 変数に代入
(lldb) po theEvents = nil (SCEvents *) $2 = 0x0000000000000000 <nil>
フォルダを読み込む為のCFBundleDocumentTypesの設定
NSDocumentControllerでfolderを受け付ける為に、info.plistの設定を行った。 フォルダータイプを受け付ける為に、CFBundleDocumentTypesの項目に以下の項目を追加した。
| キー | 値 | 説明 |
|---|---|---|
| CFBundleTypeExtensions | * | 任意の拡張子を表す |
| CFBundleTypeOSTypes | fold | OS9でフォルダーを示すOSType |
しかし、今資料を見たら、これらの設定が”Deprecated”との事。 今のところ動作には問題はないようだが、”Deprecated”な物を使うのは気持ちが悪いので変更する。
単純に書くと
- CFBundleTypeExtensionsとCFBundleTypeOSTypesを削除
- LSItemContentTypesとLSHandlerRankを追加
で終わり。 詳しく書くと、
変更前のinfo.plistは以下
ターゲットのinfoタブでは以下
両方とも同じinfo.plistファイルの内容を反映して表示しています。
変更後のinfo.plistは以下
ターゲットのinfoタブでは以下
CFBundleTypeExtensionsとCFBundleTypeOSTypesを削除し、LSItemContentTypesとLSHandlerRankを追加した。
| キー | 値 | 説明 |
|---|---|---|
| LSItemContentTypes | public.folder | フォルダーを表すUTI |
| LSHandlerRank | none |
扱うファイルがLSHandlerRankの値は、扱うファイルがフォルダーの為にnoneとした。
参考文献
- iOSアプリケーションを特定のファイル形式に対応させる方法について :
- http://safx-dev.blogspot.jp/2010/11/ios_21.html
- UTI一覧 : System-Declared Uniform Type Identifiers
- http://developer.apple.com/library/mac/#documentation/Miscellaneous/Reference/UTIRef/Introduction/Introduction.html
- Info.plist用のキー一覧 : information Property list key Refarence
- http://developer.apple.com/library/ios/#documentation/general/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
man ditzが出ない
私の環境では以下のようにして出せる。
こんな所にもmanのパスを通す物なのだろうか? それともrubyのgemと言う物に何か設定をしなければイケナイのかもしれない。
$ man /Library/Ruby/Gems/1.8/gems/ditz-0.5/man/ditz.1
CocoaでYAML
Contents
はじめに
MacOSX上のCocoaでYAMLを読み込む必要が出て来た。 そこでgoogle先生に伺った所、何種類かライブラリが出て来た。トップ表示されていたSyckライブラリを使う事にした。
SyckにはCocoa用ラッパーのフレームワークが入っており、コレをビルド出来ればCocoaから簡単に使う事が出来る。
この文書はその時のビルド方法のメモです。なお、iOS上での動作確認はしてません。
開発環境
開発環境は以下の通りです
| MacOSX: | 10.8.2 |
|---|---|
| XCode: | 4.5.2 |
| Syck: | 0.7(commit 2656dcc9e879a26e0d7c36ae45f22150d2692ad0) |
ビルド方法
“https://github.com/indeyets/syck”から圧縮ファイルをダウンロード解凍する
そのままbootstrapファイルを実行するとエラーになるので一部修正する。 理由は”libtoolize”が見つからないため。
私の環境では”/opt/local/bin/glibtoolize”にMacPortsで入れていたのでlibtoolizeの代わりにglibtoolizeを使うよう以下のように変更した。
#! /bin/sh
set -x
aclocal
autoheader
autoconf
# libtoolizeをglibtoolizeに変更
glibtoolize
automake --foreign --add-missing --copy
この変更を行えばlibsyck.aの生成まで以下のコマンドで行えます。
$ cd 解凍後のディレクトリへのパス
$ ./bootstrap
$ ./configure
$ make
その後、./ext/cocoaにあるYAML.xcodeprojの変更を行う。 修正箇所は3カ所。
- “YAML_Prefix.pch”をResourcesフォルダーにコピーしないようにする
- Info.plsitの”Bundle ID”を修正する。
- GSNSDataExtensions.mで配列の容量が足らない気がするので追加
これは非常に簡単。
file: ext/cocoa/src/Base64 NSData code/GSNSDataExtensions.m line: 200 の配列outbufの長さをを3から4に変えただけ。
unsigned char inbuf [4], outbuf [3];を
unsigned char inbuf [4], outbuf [4];に変えた。
アドレスを他にも、32bitから64bitへ移行したので、NSLogやprintfの%dを%ldに変える必要があるらしいが、詳しい事が判らないのでパス。
最後にビルドする。ここではDeploymentビルドを手軽にコピーしたいのでxcodebuild経由でビルドしています。
$ xcodebuild -configuration Deployment -sdk macosx10.8
これで”ext/cocoa/build/Deployment”にYAML.frameworkが出来ます。
参考文献
Cocoa Wapperを書いた人のサイト http://will.thimbleby.net/yaml-in-cocoa/
多分Syckの公式サイト https://github.com/indeyets/syck