ファイル名と行番号を、iPhoneデバッグ用のマクロで自動的にログ出力する

その他 | 水曜日 8月 26 2009 10:48 PM | Comments (0)

> iPhone デバッグ用のマクロ
http://d.hatena.ne.jp/Psychs/20081120/1227203259

> iPhoneデバッグ用のマクロで、クラス名とメソッド名を自動的にログ出力する
http://d.hatena.ne.jp/KishikawaKatsumi/20081211/1228933106
に iPhoneのデバッグ向きの便利なマクロが紹介されています。


#ifdef DEBUG
# define LOG(...) NSLog(__VA_ARGS__)
# define LOG_CURRENT_METHOD NSLog(@"%@/%@", NSStringFromClass([self class]), NSStringFromSelector(_cmd))
#else
# define LOG(...) ;
# define LOG_CURRENT_METHOD ;
#endif

このマクロをちょっと変えて、ファイル名と行番号を自動的に出力するようにしました。

#ifdef DEBUG
# define LOG(...) NSLog(__VA_ARGS__)
# define LOG_CURRENT_METHOD NSLog(@"%@/%@", NSStringFromClass([self class]), NSStringFromSelector(_cmd))
# define LOG_CURRENT_LINE NSLog(@"%s line %d", __FILE__, __LINE__);
#else
# define LOG(...) ;
# define LOG_CURRENT_METHOD ;
# define LOG_CURRENT_LINE ;
#endif

多くのC言語同様に、「__FILE__」「__LINE__」が使えます。
マクロなのでコンパイル時に置換されます。

NSStringFromSelector(_cmd) ではなく、__func__ を利用すると、コンパイル時に埋め込めるから早い以外に何か違うんですかねぇ。

mosaのiPhone OS 3.0 勉強会に行ってきました

その他 | 土曜日 8月 22 2009 2:19 AM | Comments (0)

mosaの「iPhone OS 3.0 勉強会」に行ってきました。
http://www.mosa.gr.jp/?p=2852

3.0で変わった箇所をひととおり説明して、皆で情報交換するという会でした。
以下、気になった点のメモです。
・StoreKit
やってらっしゃる方が私以外に一人しかいらっしゃらず、
その方も苦労しているようでした。

・Apple Push Notification
これも意外とやっている人が少なく、サーバや通信周りの知識が必須みたいでした。

・MessageUI
送信元アドレス(From:)は変えられないっぽい。

・ドキュメントはログイン不要で見られる。
「iPhone Application Programming Guide」は3.0向けに大きく書き換えられたので変更履歴を見てから再度読み直すこと。

・viewDidUnload メソッドが追加されたので、viewDidLoadで確保し、viewDidUnloadで解放すべし。
(メモリ不足でviewが解放された時の処理をシンプルにできる)

・CoreData
ORマッパ風の仕組み。Xcode上でER図が書けて、それをそのままデータ格納用クラスにできる。

・GameKit
p2pとボイスチャットの仕組み。XXXつく~るではない。

・MapKit
地図は必ず表示しなければならない(国際ローミングだと料金が心配)
iPhone本体にある履歴やブックマークを参照できない
OpenStreetMap (フリーの地理情報データ)
http://www.openstreetmap.org/

http://www.openstreetmap.jp/

・Compass(地磁気のほう)のサポートは3GSのみ。
・iPod Library Access はアートワーク(アルバムの画像)もとれる。
・Accessibilityでは日本語の読み上げが可能だが、表示の補助としてだけであり、スピーチAPIが公開されているわけではない。
・やっぱり 3.1 も出るらしい。
「ペース早い」が毎度の口癖になりつつある。

プロジェクタの真横は熱風が来るので、次回は座る場所に注意すること(^^;)

In App Purchase テストアカウントとれました

その他 | 木曜日 8月 20 2009 11:16 PM | Comments (0)

blog-20090822
In App Purchase 用のテストアカウントが取得できました。
失敗したときと何も手順は変わらず、姓名やメールアドレスやパスワードなど、
普通のアカウント取得と同じように項目入力しました。
何度も繰り返したところ、午前4時ちょっと前に1回だけ取得に成功しました。
その後はまた失敗続きです。

Selenium+WinShot で自動化していたんですが、
キャプチャした画像を確認して(同じように Could not convert エラーが出ていました)
うまく動いていないんじゃないかと止めて、念のため手動でやったらたまたまうまくいきました。
それなりにウェイトを入れていたんですが、多めに待ったほうがいいのかもしれません。
#そしてその後、SeleniumのファイルをSubversionに上げたつもりで
#あがっていなくて、作業用ディレクトリを丸ごと消してしまい、翌朝泣きました。
#深夜作業は基本動作を忘れないように特に気をつけないと、、、

In App Purchase の Test User が作れない

その他 | 火曜日 8月 18 2009 8:30 PM | Comments (3)

Manage In App Purchase Test Users 画面で、テスト用のアカウントを追加しようとしたのですが、
「 Could not convert Apple ID account to iTunes store account 」
と赤文字で表示されて、テスト用のユーザが作成できません。
もう一度同じ内容でSaveボタンを押すと、
「 The email address you entered already belongs to an existing Apple account. please try again. 」
と表示されるので、サーバには届いていると思うのですが・・・。

iTunes Connect内の一覧に表示されないだけかと思って、念のためテスト用アプリでつなげてみましたが、「テストユーザアカウントではありません。 Sandbox 環境で新規アカウントを作成してください。」と出て、つなげませんでした。

googleで調べても、解決した人はいないみたいです。
http://discussions.apple.com/thread.jspa?messageID=10004440

http://www.iphonedevsdk.com/forum/iphone-sdk-development/21035-problems-creating-test-user-app-purchase.html

成功していらっしゃる方もいるようです。
http://www.marsdays.sakura.ne.jp/sehm/blog/2009/07/store_kit_in_app_purchase.html

困りました(*_*)。

Xcode 3.1.3 で実機(iPhone OS 3.0.1)に転送できない話

その他 | 日曜日 8月 9 2009 8:24 PM | Comments (0)

今月初めごろに出たiPhone OS 3.0.1にアップデートした。
今日になって新しくプロジェクトを作って、実機に転送しようと
したら、転送できなかった。
オーガナイザで接続を確認すると、以下のメッセージが出ていた。


The version of iPhone OS on “私のiPhone名” does not match any of the versions
of iPhone OS supported for development with this copy of Xcode.
Plase rstore the device to a version of the OS listed below.
If necessary the latest veersion of Xcode isalailable here.

OS Installed on iPhone
3.0.1(7A400)

Xcode Supported iPhone OS Versions
3.0(7A341)
2.2.1
2.2
2.1.1
2.1
2.0.2(5C1)
2.0.1(5B108)
2.0(5A347)
2.0(5A345)

WEBを検索して、参考になるページがあった。
http://miotree.blog26.fc2.com/blog-entry-35.html

iPhone Dev Cener のDownloads の”iPhone OS 3.0.1 Advisory”を確認してから、
(SDK3.0ダウンロードとかの下にある)

(1)Xcodeを起動中なら終了
(2)「ターミナル」を起動
(3)sudo -s でrootになる(whoamiで確認)
(4)ls /Developer/Platforms/iPhoneOS.platform/DeviceSupport/ でサポートしているバージョンを確認
(5)シンボリックリンクをはる。
ln -s /Developer/Platforms/iPhoneOS.platform/DeviceSupport/3.0\ \(7A341\) /Developer/Platforms/iPhoneOS.platform/DeviceSupport/3.0.1
…空白やカッコは¥記号を頭につけるのを忘れずに。
(6)うまくはれたか、ls -l /Developer/Platforms/iPhoneOS.platform/DevicSupport/ で確認。
(7)Xcodeを起動して、iPhoneをつなげて、オーガナイザを開いて、デバイスで
 緑色のマークになっていればOK。

プロビジョニング・プロファイルも作ったなら、忘れずに登録しましょう(^^;)
これで無事に実機に転送できました。

SpeedMailerバージョン1.2をリリースしました

その他 | 水曜日 8月 5 2009 7:07 AM | Comments (2)

まただいぶ間があいてしまいましたが、SpeedMailerバージョン1.2をリリースしました。
現在AppStoreでダウンロードできます。(Download on iTunes)

変更点は、、、

Version 1.2 (2009-07-26)
・特定のメールアドレスをアドレス帳から選択した際にクラッシュする不具合を修正
・メールテンプレートの最大数を31に変更

と、指摘の多かったアドレス帳に関するトラブルに対処しました。

要望など何かございましたらコメントいただければ幸いです。

「The signature was invalid, or it was not signed with an Apple submission certificate.」でupload失敗

その他 | 土曜日 7月 25 2009 10:36 PM | Comments (0)

SpeedMailer の Ver1.2 を出す時に、はまったこと。
ビルドしてzipで固めてアップロードしたら、
「The binary you upload was invalid.
The signature was invalid, or it was not signed
with an Apple submission certificate.」
と出て、受け付けてもらえなかった。

Info.plist のバージョン番号が違っていた。
Bundle version と、Bundle versions string, short が1.1のままだったので、
1.2に直した。
確認するときは、ツリー内のターゲットを右クリックで情報を見るではなく、メニューから
「アクティブターゲット”SpeedMailer”を編集」を選びましょう。ということですな。

ビルドでコンパイラ起動前にエラー

その他 | 日曜日 7月 19 2009 1:04 PM | Comments (5)

証明書の騒動を切り抜けたからビルドしようと思ったら、
コンパイラが動く前に以下のエラーで止まった。
「Code sign error: certificate identity
‘iPhone Distribution: (うちの名前)’ appears more than once
in the keychain. The codesign tool requires there only be one.」

証明書のIDが重複していると言いたいのは分かるのだが、
IDが何の事なのかが分からない。
キーチェーンアクセスで出る名前でいいのか、認証局内で一意な記号があるのか。

心当たりとして、秘密鍵+信頼されていない証明書を同じ名前で作った覚えがある。
もう使わないのでペアで削除したら、コンパイルが通って署名もできた。

iMacからMacBookProへ移行時にキーチェーンではまった時のメモ

その他 | 土曜日 6月 27 2009 11:01 PM | Comments (0)

iMacからMacBookProへ移行することになった。
キーチェーンのログインの中の証明書を.cerと.p12で書き出し、
秘密鍵も.p12で書き出した。公開鍵も同様に保存。
(証明書と秘密鍵を両方とも選択して「書き出す」にすれば違った結果になったかも知れないと思ったのはずっと後のこと)
iMacは嫁ぎ先に渡すため、早々にフォーマットしてOS再インストールしてしまった。

で、MacBookProが届いて、証明書や鍵を読み込もうとしようとしたが、問題発生。
WWDRと期限の切れた証明書+秘密鍵は読み込めたが、
他はファイル形式が違うとかなんとか言われ、読み込めない。
再起動して同一の手順を繰り返すと読み込めた。理由が分からない。

過去のメモを見たり古い教科書を読みなおしたりして、
秘密鍵を作ってから証明書はポータルで取得する以外に方法がないと気づく。
期限が切れているのもあれば、期限が切れていないのもあるので心配。

秘密鍵-4で証明書発行依頼->失敗。
秘密鍵-5で証明書発行依頼->成功。見ると、秘密鍵-4を使った証明書ができていた。

なんだか信用できないが、秘密鍵を区別する方法を知らないので
名前を信じることにした。

対象OSのバージョンごとの条件付きコンパイルには、「 __IPHONE_OS_VERSION_MIN_REQUIRED 」を使う

その他 | 日曜日 6月 14 2009 10:34 PM | Comments (0)

SpeedMailer の Ver1.2を出そうとしている。
OS3.0も出るから、3.0でビルドすればいいかと思っていたが、
iPod touch は3.0に上げるためには新たに
1200円(9.95ドル)というお金を払わなければならないという。

SpeedMailer を2.2向けにするか3.0向けにするか、どうしようか考えた。
iPhoneユーザは無料だから全員updateするだろう(PCにつながない人はいないだろう)
iPod touch ユーザで、セキュリティや利便性の向上に注目する人は3.0に上げるだろう。
上げない人は、SpeedMailerが2.2でも動こうが、3.0以上でだけ動こうが、上げないだろう。
それはSpeedMailerのせいじゃない。

というわけで、SpeedMailerはOS 2.2.1で動くようにした。
OS 2.2.1向けにコンパイルし、実機はOS 3.0でも確認する。
ただ今後いつ心変わりするか分からないので、同一ソースで一部だけ変えられるように
#ifdefがないか探したら、あった。

詳細は Availability.h を見てもらうとして、こんな感じ。

#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 30000
cell.textLabel.text = @”iPhone 3.0″;
#else
cell.text = @”iPhone 2.2″;
#endif

「 __IPHONE_3_0 」という定数もあるが、使わないほうがいいらしい。
Availability.hによると、古いOS(?)では、
新しいOSのバージョンを表す定数が未定義なため、
プリプロセッサでは未定義=0として扱われる。とのこと。

SDKのバージョンとOSのバージョンを一時期混同していたのはナイショだ。

« 前ページへ次ページへ »