アプリをアップロードしようとしたのですが、Xcode 3.2.5+SDK4.2のbuildで、Application Loader.app(Version 1.4 (92))でもdwarfdumpエラーが出ます:
The dwarfdump binary must exist and must be executable: /usr/bin/dwarfdump (-19036)
ネットを色々見たところ、Xcodeを再インストールなんていう解決策も見たのですが、それはちょっと…と思ったので、
iTunes ConnectのManage Your Applicationsの一番下段にあるドキュメント
Using Application Loader内に、Application Loader1.3へのdmgリンクがあったのでそれをインストール
https://itunesconnect.apple.com/apploader/ApplicationLoader_1.3.dmg
Application Loader
Version 1.3 (89)
Upload & 更新申請うまく行きました!
ちなみに、Xcode3.2.5についてくるApplication Loader.appのバージョンは下記でした:
Application Loader
Version 1.4 (92)
結末に驚いたのでメモ。
XcodeでBuild & Analyzeすると、下記のようなメッセージが出て困っていました。UILabelのインスタンスを返すような関数なのですが、ちゃんとautoreleaseして返しているのにも関わらず、です。
Object with +0 retain counts returned to caller where a +1 (owning) retaincount is expected
メモリ管理周りをググったり、stackoverflowをうろつくなりして色々調べること数時間、原因を突き止めました:
Object with +0 retain counts returned to caller where a +1 (owning) retaincount is expected - Stack Overflow
http://stackoverflow.com/questions/3553401/object-with-0-retain-counts-returned-to-caller-where-a-1-owning-retaincount-i
結局、コード自体は間違っていなくて、「関数名が良くない」ということでした。AppleのMemory Management Programming Guideには下記のような記述があります:
You “create” an object using a method whose name begins with “alloc” or “new” or contains “copy” (for example, alloc, newObject, or mutableCopy).
http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/MemoryMgmt/Articles/mmObjectOwnership.html#//apple_ref/doc/uid/20000043-SW1
[意訳] Objectを作成する際にはalloc, new, copyなどで始まる関数名を使う(例、alloc, newObject, mutableCopy)
コード内の関数名を書き換えて、解決!
(newで始まるだけではダメなのですね…)
rails>>
//NG
(UILabel *)newLabelWithPrimaryColor:(UIColor *)primaryColor;
//OK
(UILabel *)createLabelWithPrimaryColor:(UIColor *)primaryColor;
<<--
Fast App Switch周りをガリガリやっていたら、[@hkato193](http://twitter.com/hkato193)さんからメモリ警告絡みでアドバイスを頂きました。大変参考になったのでメモ。
つまり、Background突入時、ファイル送信などの処理をTask Completionでやる際に、
1. メモリ警告で送信処理を中止しない
2. 一方で、willTerminateやTask CompletionのExpirationHandler内で正しくキャンセル処理を行うこと:
* 通信遮断
* データ送信失敗への対処(送信データの保存など)
* ユーザへの通知
###Task Completionとは
Task Completion APIを使えば、Expiration handlerを使ってBackgroundで処理を行える:
rails>>
// WWDC 2010 Session 109
// Adopting Multitasking on iPhone OS, Part2 より引用
self.bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[self prepareForSuspend];
[self pauseUpload];
}];
// returns after upload finishes or pauses
[self uploadPhotos];
[app endBackgroundTask:self.bgTask];
<<--
詳細の書き方については、BlockやらGrand Central Dispatchを理解する必要がありそうなのですが、なんとなく次が見えた感じです。