Monthly Archives: 7月 2014

lldbでiOSの例外を克服

0
Filed under Xcode
Tagged as , , , ,

プログラミングにおいて例外が発生したときの対応はとても重要です。
しかし、iOS開発で例外が発生したとき、なんとなく例外が発生したコードの付近を眺めて原因を予測していたりしませんか?
iOSがOSレベルで発生させる例外はきちんと原因表示ができるので、次の手順を覚えておくと、デバッグが容易に、そして確実になります!

例外を発生させるコード

さて、例外発生時の対応を学ぶためにはまずは例外を発生させるコードが必要になります。
いちいちコードを書くのも面倒、という人のために、プロジェクトをまとめてGitHubにアップしておきました。その名も「GenerateException」というプロジェクトです。

とてもシンプルに、ボタンを押したら例外が発生する仕組みになっています。

例外発生時に止める

Xcodeでは、ブレイクポイントの設定の中にすべての例外発生時に止める事ができるオプションがあります。まずはこれを設定しましょう。
Xcode左側のペインに、ブレイクポイントナビゲーターを表示させます。
そして、左下にある[+]ボタンを押して出てくるメニューから「Add Exception Breakpoint」を選びます。
lldbでiOSの例外を克服 Xcode
これで「All Exceptions」というブレイクポイントが追加され、準備は完了です。
lldbでiOSの例外を克服 Xcode

例外の出す情報を見る

プロジェクトをダウンロードし、ブレイクポイントの設定が完了したらあとはデバッグ実行してください。
起動した画面にあるボタン『Generate Exception』を押すと例外が発生し、下図のような状態で止まると思います。
lldbでiOSの例外を克服 Xcode
ただ、現在は例外が発生し、その元となるコードで止まっている状態ですので原因がわかりません。
ここで例外の原因を調べる方法は次のような手順となります。
1. 例外の発生しているスタックフレームを選択する(左側のスタックの一番上の”0 objc_exception_throw”というところ)
2. デバッグエリアのコンソールを開き、”(lldb)” に続いて “po $eax” とタイプし、Enterを押します。

(lldb) po $eax

3. これで今回発生した例外の原因が表示されます。
lldbでiOSの例外を克服 Xcode
以上!

lldbでスタックフレームを見る

One More Thing,
lldbにはいろいろ便利な機能があり、”po hogehoge”というのが有名かと思いますが、次のコマンドで現在のスタックフレームの変数を一覧することができるのを最近知り便利に使っています!
lldbでiOSの例外を克服 Xcode

(lldb) frame variable

UIViewControllerのデバイス回転への対応

0
Filed under iOS SDK
Tagged as ,

調べるたびに困っていたので、ブログにメモしておきます。

iOS6以降専用の対応方法

回転させないためには、下記のようなコードを、UIViewControllerに書けば良い。

// 回転させない
- (BOOL)shouldAutorotate
{
  return NO;
}
 
- (NSUInteger)supportedInterfaceOrientations
{
  return UIInterfaceOrientationMaskPortrait;
}

iPhoneでは回転させず、iPadでは回転対応する、という仕組みを実装したサンプルをgithubにアップしておきました。

上記ケースではUINavigationControllerを使っているのですが、この場合、UINavigationControllerを派生させたクラスで同様に実装すれば対応できます。

Goを試してみた

0
Filed under プログラミング言語
Tagged as , ,

ちょっとした時間ができたので、前から気になっていたGo言語を試してみました。
まずは、インストール。
golang.jp – プログラミング言語Goの情報サイト
ここに、日本語情報があるけど若干が古いので、英語のオリジナルサイトの方を参考にしました。
The Go Programming Language
インストーラは下記ページからダウンロード出来ます。
Downloads – The Go Programming Language
Mac OS X用の「go1.3.darwin-amd64-osx10.8.pkg」をダウンロードしました。
ダウンロードしたファイルをダブルクリックするとインストーラが起動するのでそのままインストールできます。

go gopher(←Goのマスコットで go gopherというらしい)

バージョンを確認してみる

インストール後はターミナルで作業できるようになりますので、まずはバージョンを確認してみます。

$ which go
/usr/local/go/bin/go
$ go version
go version go1.3 darwin/amd64

最初のビルド

次に、適当なエディタ(私の場合Sublime Text)で下記のようなソースを書いてみました。実行は、go runでできます。

$ subl main.go
$ cat main.go
// main.go
package main
 
import "fmt"
 
func main(){
	fmt.Printf("hello, world\nGO言語!\n")
}
$ go run main.o
hello, world
GO言語!

文法もそんなに変なクセはなさそうなので、パッケージの内容を覚えれば大丈夫そうですね。

もうちょっと

ついでに、関数とループを試してみました。

// second.go
package main
import "fmt"
 
func myCalc( a int, b int ) int{
	return a+b
}
 
var myVar = 1200
 
func main(){
	fmt.Println("いろいろやってみる!")
	for i:=0; i<10; i++ {
		fmt.Println( "計算:", myCalc(myVar,i) )
	}
}

上記コードを実行すると次のようになります。

$ go run second.go 
いろいろやってみる!
計算: 1200
計算: 1201
計算: 1202
計算: 1203
計算: 1204
計算: 1205
計算: 1206
計算: 1207
計算: 1208
計算: 1209

ビルドしてみる

あと、goの特徴の一つがコンパイルできる言語でもある、ということも試したかったので、コンパイルしてみました。
go runの代わりに、go buildを行うだけで実行ファイルが生成されます。

$ ls	// ビルド前
main.go
 
$ go build main.go	// ビルド
 
$ ls	// ビルド後
main		main.go
 
$ main	// 実行
hello, world
GO言語!

とりあえず今日のところはここまで。

WP Social Bookmarking Lightの微調整

0
Filed under WordPress
Tagged as ,

WordPressにfacebookやtwitterのボタンをつける便利なプラグイン「WP Social Bookmarking Light」があります。
とあるページで使っているのですが、iPhoneから見ると、Facebookのいいね!ボタンが表示されない、という問題がありました。

Versionをiframeにする

xfbmlになっていたのですが、これが問題で、html5かiframeにすると、表示されるようになりました。
WP Social Bookmarking Light
今回は後述する理由で、iframeを選びました。

ズレる問題を修正

iPhoneで見ると表示されるのですが、ズレる問題が出てきます。
このページを参考にして下記CSSを、設定画面の「Style」タブに追記します。

.fb_iframe_widget {
	width: auto !important;
	display: inline-block !important;
}

これでばっちり表示されるようになりました!