11月 10 2012

symbolicatecrash には .crash と .app.dSYM/ と .app/ が必要

ごくまれに、場合によっては頻繁に、どこか別の環境でビルドされた Ad-Hoc ビルドのクラッシュログを見なければならないことがあります。

うまく symbolicatecrash で結果を得るには以下の手順が必要です。
(Ad-Hoc ビルドした .ipa やそのとき生成された .dSYM は入手済みとして話を進めます)

Xcode 4.5.2 の場合、symbolicatecrash は

/Applications/Xcode.app/Contents/Developer/Platforms/
iPhoneOS.platform/Developer/Library/PrivateFrameworks/
DTDeviceKit.framework/Versions/A/Resources

にあります。パスを通すとか、エイリアスを作成するなどしてください。

とすると、

Error: “DEVELOPER_DIR” is not defined at …以下省略

となるので、

DEVELOPER_DIR を設定してあげます。

または

再度、

するとクラッシュログの解析結果が出力されるようになりますが、

といったように、フレームワークのアドレスはシンボル表示されますが、
アプリのアドレスがシンボル表示されません。

これを解決するには、MyApp.app/ が必要です。

とすると、Payload/MyApp.app が取り出せますので、
この状態で、

を行います。すると

のような結果が得られ、当初の目的が果たせます。
解凍した MyApp.app は適当な場所にあっても探してくれるようです。

これが探していた情報だったと言う人は
私が作った iOS アプリの紹介ビデオでも見ていってください。


5月 8 2012

スタティックライブラリに含まれるコードのアーキテクチャを確認する方法

スタティックライブラリにどのアーキテクチャのコードが含まれているか確認したい場合、
以下のコマンドで確認することができます。

または

スタティックライブラリだけでなく、実行ファイルやダイナミックライブラリを指定することもできます。


3月 23 2012

iOS 開発で使用する証明書、プロビジョニングプロファイルの内容を確認する方法

iOS 開発を行っていて、証明書要求(CertificateSigningRequest.certSigningRequest)を作成することがありますが、この内容が知りたくなった場合、ターミナルで以下のコマンドを実行します。

iOS Provisioning Portal から取得した証明書の内容が知りたければ、以下のコマンドを実行します。

他の開発環境へ証明書やプライベートキーを持っていく場合、p12 ファイルを作成し転送しますが、そのファイルの内容が知りたくなったら、以下のコマンドを実行します。
.p12 は通常パスワードをかけてあるはずなので、要求があればパスワードを入力します。

プロビジョニングプロファイルの内容(証明書)が見たい場合は、以下のコマンドを実行します。

プロビジョニングプロファイルには plist ファイルが埋め込まれています。これは vi コマンドなどでファイルを開くと確認できますし、以下のコマンドでも確認できます。


3月 14 2012

iOS プロジェクトで Base64 エンコード/デコードを行う

iOS プロジェクトで Base64 エンコードが必要になったので、取り急ぎ簡単な方法を探しました。
確認は Mac OS X 10.7.3 / Xcode 4.3.1 で行っています。

(1) http://cocoawithlove.com/2009/06/base64-encoding-options-on-mac-and.html から NSData_Base64.zip をダウンロードし、解凍します。

(2) NSData_Base64 フォルダ内にある NSData+Base64.h と NSData+Base64.m の2ファイルを開発中のプロジェクトに追加します。

(3) あとはエンコードしたいところで、

デコードなら、

といった具合に使用します。NSData+Base64.h のインポートを忘れないようにしましょう。

OpenSSL を使っても Base64 エンコーディングできるようですが、OpenSSL 関連のライブラリは iOS に含まれていないので、今回その方法は採用しませんでした。
ここ http://cocoawithlove.com/2009/06/base64-encoding-options-on-mac-and.html には OpenSSL を使用した方法も説明されているので、興味のある方はどうぞ。

ちなみに、-base64EncodedString を使用した場合、64文字ごとに改行した Base64 文字列が生成されます。このとき使用される改行コードは CR+LF です。改行して欲しくないとか、80文字ごとで改行して欲しいなどの要求がある場合は、ソースを少しだけ調整すれば対応可能なようですので、ソースを一読されることをお勧めします。


3月 12 2012

iOS 用 OpenSSL ライブラリの作成

iOS アプリでデータの暗号化、復号を行う場合に、OpenSSL を使用したいことがあると思います。
iOS には Common Crypto というライブラリもありますので、こちらも検討してみることをお勧めしますが、
ここでは OpenSSL ライブラリの作成方法を簡単に説明します。
確認は Mac OS X 10.7.3 / Xcode 4.3.1 で行っています。

OpenSSL ライブラリ(libssl.a と libcrypto.a)の作成は以下の方法が簡単です。

(1) https://github.com/x2on/OpenSSL-for-iPhone からプロジェクトをダウンロードし、zip を解凍します。
試したときは x2on-OpenSSL-for-iPhone-openssl-1.0.0d-4-gc637f77.zip がダウンロードされました。

(2) シェルスクリプト build-libssl.sh がプロジェクトフォルダ内にあるので、これを開き、ベースとなる OpenSSL のバージョンと iOS SDK のバージョンを確認します。必要であれば調整します。

対応する iOS SDK が存在していないと、ライブラリの作成は失敗します。

(3) build-libssl.sh をターミナルで実行します。OpenSSL のソースが自動的にダウンロードされ、ライブラリの作成が始まります。作成されるライブラリは、i386、armv6、armv7 アーキテクチャ用のモジュールをまとめたスタティックライブラリです。

(4) ライブラリの作成が完了したら、プロジェクトフォルダ内の ./include と ./lib を、OpenSSL ライブラリを必要とするプロジェクトにコピーして使用します。OpenSSL を追加したプロジェクトのビルド設定にある検索パスも設定しておきましょう。前出の include と lib を openssl フォルダにまとめてプロジェクトに追加した場合、Header Search Paths に $(SRCROOT)/openssl/include を Library Search Paths に $(SRCROOT)/openssl/lib のように設定します。検索パスはライブラリを追加した場所に応じて適当に調整してください。


2月 19 2012

Xcode 4.3 と symbolicatecrash

Xcode 4.3 インストール後に symbolicatecrash コマンドを直接利用しようとすると、正常に動作してくれなかった。

以下のコマンド実行後、うまく動作するようになった。


2月 3 2011

iOS Debugging Magic

新しい Technical Note iOS Debugging Magic (TN2239) が出ていた。

(gdb) po [[self view] recursiveDescription] が便利そう。


3月 28 2009

NSLog() でクラス名、メソッド名を表示

NSLog() でインスタンスのクラス名を表示する方法。

NSLog() でメソッド名を表示する方法。

NSLog() でメソッド名とそのメソッドが属するクラス名を同時に表示する方法。

NSLog() でソースファイル名を表示する方法。

NSLog() でソースファイル内の行番号を表示する方法。

NSLog() でコールスタックを表示する方法。

NSLog() で UIView 階層を表示する方法。

例)