2010-12-05
-[NSDate description]メソッドが、常にGMTの編集結果を返すようになった件(さらに続き)
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)
ただ、デバッグ用途であるとしても、ローカルタイムゾーンで出ていた方が便利だったので、それに戻ってくれるとありがたいかなとは思います。
Prue2011/05/15 00:46Thknas alot - your answer solved all my problems after several days struggling
qpzvfxf2011/05/15 13:29ZMoMfh <a href="http://xhunevgrlymj.com/">xhunevgrlymj</a>
pbmpobwxun2011/05/16 21:38rSnXqC , [url=http://pypnqiopqves.com/]pypnqiopqves[/url], [link=http://qzbaszztgwct.com/]qzbaszztgwct[/link], http://ipmrccwytdxr.com/
hrelocwah2011/05/24 22:17BgJVL9 <a href="http://bczqyndzwein.com/">bczqyndzwein</a>
uwqpkrlqjt2011/05/30 00:08TZ2ES4 , [url=http://vhjsctclfrtu.com/]vhjsctclfrtu[/url], [link=http://mgzlaxtbffwd.com/]mgzlaxtbffwd[/link], http://pdihfobpxqhq.com/
2010-12-04
-[NSDate description]メソッドが、常にGMTの編集結果を返すようになった件(続き)
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以降の結果がおかしいのは、一目瞭然ですよね。
2010-10-11
-[NSDate description]メソッドが、常にGMTの編集結果を返すようになった件
- 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 description]をアテにせず、NSDateFormatterで自分で編集した方が、確実ですね。
ちなみに、クラスリファレンス通りに出力するためのフォーマットは、言うまでもなく、以下の感じですね。
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss ZZZ"];
NSLog(@"%@", [dateFormatter stringFromDate:[NSDate date]]);
2010-06-24
SDK3.xで作ったアプリを、4.0SDKでビルドしてsubmitしたときに出たエラーの対処
昨晩、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.
いろいろ調べてみたところ、以下の情報を見つけました。
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さんの、以下の記事にて、さらに詳しくまとめられています。
DigitalToken » Invalid Signature で App Store に Submit できず
そこから、リンクをたどって行くと、この問題に関するAppleのQA記事を見つけることもできました。
tokentoken同じような問題で苦労していましたが、ようやく解決しました。
http://token.sakura.ne.jp/wp/?p=1608
情報ありがとうございます。
kimada解決されたとのことで、よかったです。
いただいた情報を、本文にも追記させていただきました。
2009-11-13
突然、iPhone Simulator用のビルドが通らなくなった時の対処例
今日はこの問題でかなりハマったので、メモしておく。
なぜか、アクティブターゲットのフレームワーク検索パスに、勝手に以下の設定がされていた。
$(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僕の場合、ライブラリ検索パスの下記が追加されてたので削除したらうまくいきました。
とても参考になりました。ありがとうございます。
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.2.sdk/usr/lib
kimadaコメントありがとうございます!
お役に立ててよかったです。
似てるけど、ちょっと違うパターンもあるんですね。
結局、今でも原因はわからないままなので、少しモヤモヤ感が残ってますが、とりあえず回避策がわかってるということで、自分の中では折り合いをつけてます ;-)
@bianca_jpiOS SDKを4.1から4.2にアップした際に同様の症状でエラーが大量発生しました。
この記事のおかげで解決できました。ありがとうございます。
kimadaこの記事を見て解決できたとのことで、よかったです。
ハッキリ覚えていませんが、改めてエラーメッセージを見ると、私の時も、SDKをバージョンアップしたタイミングだったかもしれませんね。