Hatena::Groupiphone-dev

kimadaの日記 このページをアンテナに追加 RSSフィード

個人の日記はこちらです。

2010-12-05

-[NSDate description]メソッドが、常にGMTの編集結果を返すようになった件(さらに続き)

16:57 | -[NSDate description]メソッドが、常にGMTの編集結果を返すようになった件(さらに続き) - kimadaの日記 を含むブックマーク はてなブックマーク - -[NSDate description]メソッドが、常にGMTの編集結果を返すようになった件(さらに続き) - kimadaの日記 -[NSDate description]メソッドが、常にGMTの編集結果を返すようになった件(さらに続き) - kimadaの日記 のブックマークコメント

NSDate descriptionメソッドが、常にGMTの編集結果を返すようになった件(続き)のさらに続編です。

Twitterでもいろいろご指摘を受け、ちょっと取り違えてる部分があることに気付きました。

descriptionメソッドの用途をまとめると以下のようなことかなと。。

  • そもそも、デバッグ用途であり、表示されるフォーマットは保証されないもの。
  • NSDateに関しても、どのタイムゾーンで編集するのかについては明記されていない。
  • その起源は、gdbのprint objectで返される文字列表現を想定したものである。

Discussion

The debugger’s print-object command indirectly invokes this method to produce a textual description of an object.

descriptionメソッドの説明より抜粋(NSObject Protocol Relerence)

実際には、以下の説明で、yyyy-MM-dd HH:mm:ss ZZZで返されることを保証していると解釈してしまいました。

Return Value

A string representation of the receiver in the international format YYYY-MM-DD HH:MM:SS ±HHMM, where ±HHMM represents the time zone offset in hours and minutes from GMT (for example, “2001-03-24 10:45:32 +0600”).

descriptionメソッドの説明より抜粋(NSDate Class Relerence)

ただ、デバッグ用途であるとしても、ローカルタイムゾーンで出ていた方が便利だったので、それに戻ってくれるとありがたいかなとは思います。

PruePrue2011/05/15 00:46Thknas alot - your answer solved all my problems after several days struggling

qpzvfxfqpzvfxf2011/05/15 13:29ZMoMfh <a href="http://xhunevgrlymj.com/">xhunevgrlymj</a>

pbmpobwxunpbmpobwxun2011/05/16 21:38rSnXqC , [url=http://pypnqiopqves.com/]pypnqiopqves[/url], [link=http://qzbaszztgwct.com/]qzbaszztgwct[/link], http://ipmrccwytdxr.com/

hrelocwahhrelocwah2011/05/24 22:17BgJVL9 <a href="http://bczqyndzwein.com/">bczqyndzwein</a>

uwqpkrlqjtuwqpkrlqjt2011/05/30 00:08TZ2ES4 , [url=http://vhjsctclfrtu.com/]vhjsctclfrtu[/url], [link=http://mgzlaxtbffwd.com/]mgzlaxtbffwd[/link], http://pdihfobpxqhq.com/

トラックバック - http://iphone-dev.g.hatena.ne.jp/kimada/20101205

2010-12-04

-[NSDate description]メソッドが、常にGMTの編集結果を返すようになった件(続き)

00:53 | -[NSDate description]メソッドが、常にGMTの編集結果を返すようになった件(続き) - kimadaの日記 を含むブックマーク はてなブックマーク - -[NSDate description]メソッドが、常にGMTの編集結果を返すようになった件(続き) - kimadaの日記 -[NSDate description]メソッドが、常にGMTの編集結果を返すようになった件(続き) - kimadaの日記 のブックマークコメント

NSDate descriptionメソッドが、常にGMTの編集結果を返すようになった件の続編です。

  • Sat, Dec 04 14:45  以前、-[NSDate description]がGMTの値を返すようになったという問題を、Bug Reporterに出してたんだけど、昨日、「もう少し詳しく説明してくれ」というADC Notesが。。もしかすると対処してくれるのかなという期待が湧いて来た!

とりあえず、Bug Reporterに報告したら、少し前に進んだ感じです。

以下、再現させるためのサンプルコードです。

    NSString *version = [[UIDevice currentDevice]systemVersion];
    NSDate *now = [NSDate date];
    NSLog(@"iOS version: %@ -[NSDate description]: %@", version, [now description]);
  • iOS4.0.2での実行結果
2010-12-05 00:49:52.683 DateTest[11020:207] iOS version: 4.0.2 -[NSDate description]: 2010-12-05 00:49:52 +0900
  • iOS4.1での実行結果
2010-12-05 00:34:58.494 DateTest[10983:207] iOS version: 4.1 -[NSDate description]: 2010-12-04 15:34:58 GMT
  • iOS4.2での実行結果
2010-12-05 00:33:28.404 DateTest[10943:207] iOS version: 4.2 -[NSDate description]: 2010-12-04 15:33:28 +0000

iOS4.1以降の結果がおかしいのは、一目瞭然ですよね。

トラックバック - http://iphone-dev.g.hatena.ne.jp/kimada/20101204

2010-10-11

-[NSDate description]メソッドが、常にGMTの編集結果を返すようになった件

22:48 | -[NSDate description]メソッドが、常にGMTの編集結果を返すようになった件 - kimadaの日記 を含むブックマーク はてなブックマーク - -[NSDate description]メソッドが、常にGMTの編集結果を返すようになった件 - kimadaの日記 -[NSDate description]メソッドが、常にGMTの編集結果を返すようになった件 - kimadaの日記 のブックマークコメント

  • 10:09  iOS4.1で、-[NSDate description]メソッドが、常にGMTで編集した結果を返してくる問題について、Bug Reporter で報告した。旧バージョンと動きが変わったこと、Class Referenceと異なる挙動をしていることが問題かと思います。

Powered by twtr2src

たぶん、iOS4.1から、このような挙動になったのではと思います。

NSDateのクラスリファレンスを見ると、タイムゾーンを考慮して、YYYY-MM-DD HH:MM:SS ±HHMMで編集してくれると書かれています。

NSDate Class Reference

なので、急な仕様変更ではなく、バグでしょう。。

とりあえず、-[NSDate description]をアテにせず、NSDateFormatterで自分で編集した方が、確実ですね。

ちなみに、クラスリファレンス通りに出力するためのフォーマットは、言うまでもなく、以下の感じですね。

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss ZZZ"];
    NSLog(@"%@", [dateFormatter stringFromDate:[NSDate date]]);
トラックバック - http://iphone-dev.g.hatena.ne.jp/kimada/20101011

2010-06-24

SDK3.xで作ったアプリを、4.0SDKでビルドしてsubmitしたときに出たエラーの対処

00:32 | SDK3.xで作ったアプリを、4.0SDKでビルドしてsubmitしたときに出たエラーの対処 - kimadaの日記 を含むブックマーク はてなブックマーク - SDK3.xで作ったアプリを、4.0SDKでビルドしてsubmitしたときに出たエラーの対処 - kimadaの日記 SDK3.xで作ったアプリを、4.0SDKでビルドしてsubmitしたときに出たエラーの対処 - kimadaの日記 のブックマークコメント

昨晩、SysStats Monitorアップデートを、SDK4.0でビルドしてiTunesConnectにsubmitした時に、以下のようなエラーが出ました。

The binary you uploaded is invalid. The application-identifier entitlement is not formatted correctly; it should contain your 10-character App ID Seed, followed by a dot, followed by your bundle identifier.

いろいろ調べてみたところ、以下の情報を見つけました。

no title

“The application-identifier entitlement is not formatted correctly” Problem When Submitting Your iPhone App to the AppStore | An Unbiased View of The World

Entitlements.plistに含めるべき情報が足りなかったことが原因だったようです。

とりあえず、ここに書かれている通り、application-identifierというキーを追加してから再度アップロードし直したところ、エラーは出なくなりました。

でも、これだと、アプリの名前を固定で設定する必要があり、何となくスッキリしない感じがしたので、4.0SDKのXcodeでEntitlements.plistを作り直してみました。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <!--- Required entitlements (in most cases shouldn't be changed) --->
    <key>application-identifier</key>
    <string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
    <key>keychain-access-groups</key>
    <array>
        <string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
    </array>
    
    <!--- Custom entitlements below --->


</dict>
</plist>

application-identifierキーが含まれているし、キーワード置換もしてくれそうなので、今後のことを考えると、こちらの方がいい感じですよね。そこで、一旦セルフリジェクトして、このEntitlements.plistに入れ替えてビルドし直した後に、Replace Binaryしたところ、submitは成功しました。

Appleのドキュメントでこのあたりの説明を見つけられてないのですが、たぶんこれでOKでしょう。

もしも、同じ問題にぶつかった場合は、お試しください。

2010-4-30 追記

id:tokentokenさんの、以下の記事にて、さらに詳しくまとめられています。

Invalid Signature で App Store に Submit できず

そこから、リンクをたどって行くと、この問題に関するAppleのQA記事を見つけることもできました。

Technical Q&A QA1710

tokentokentokentoken2011/04/30 00:40同じような問題で苦労していましたが、ようやく解決しました。
http://token.sakura.ne.jp/wp/?p=1608
情報ありがとうございます。

kimadakimada2011/04/30 10:59解決されたとのことで、よかったです。
いただいた情報を、本文にも追記させていただきました。

トラックバック - http://iphone-dev.g.hatena.ne.jp/kimada/20100624

2009-11-13

突然、iPhone Simulator用のビルドが通らなくなった時の対処例

| 01:04 | 突然、iPhone Simulator用のビルドが通らなくなった時の対処例 - kimadaの日記 を含むブックマーク はてなブックマーク - 突然、iPhone Simulator用のビルドが通らなくなった時の対処例 - kimadaの日記 突然、iPhone Simulator用のビルドが通らなくなった時の対処例 - kimadaの日記 のブックマークコメント

今日はこの問題でかなりハマったので、メモしておく。

なぜか、アクティブターゲットのフレームワーク検索パスに、勝手に以下の設定がされていた。

$(inherited)
”$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.2.sdk/System/Library/Frameworks”

すると、

ld: warning: in /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library/Frameworks/Foundation.framework/Foundation, missing required architecture i386 in file

みたいなエラーメッセージが大量に出力されて、ビルドできない。前述のフレームワーク検索パスを削除したら、ビルドが成功し、Simulatorでも動くようになった。

もしも、似たような状況になった場合は、お試しください。

@malted_milk@malted_milk2010/02/12 11:57僕の場合、ライブラリ検索パスの下記が追加されてたので削除したらうまくいきました。
とても参考になりました。ありがとうございます。
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.2.sdk/usr/lib

kimadakimada2010/02/13 00:27コメントありがとうございます!
お役に立ててよかったです。
似てるけど、ちょっと違うパターンもあるんですね。
結局、今でも原因はわからないままなので、少しモヤモヤ感が残ってますが、とりあえず回避策がわかってるということで、自分の中では折り合いをつけてます ;-)

@bianca_jp@bianca_jp2010/12/01 12:15iOS SDKを4.1から4.2にアップした際に同様の症状でエラーが大量発生しました。
この記事のおかげで解決できました。ありがとうございます。

kimadakimada2010/12/01 20:51この記事を見て解決できたとのことで、よかったです。
ハッキリ覚えていませんが、改めてエラーメッセージを見ると、私の時も、SDKをバージョンアップしたタイミングだったかもしれませんね。

gaziro2000gaziro20002012/12/22 15:14参考になりました!ありがとうゴザイマス!

gaziro2000gaziro20002012/12/22 15:14参考になりました!ありがとうゴザイマス!

kimadakimada2012/12/22 18:09古い記事ですが、お役に立ってよかったです。

トラックバック - http://iphone-dev.g.hatena.ne.jp/kimada/20091113