記事一覧

Application Loader cashes some information

When I tried to upload my binary to AppStore using Application Loader, I got the error saying "Bundle identifier:***** differs from reserved bundle identifier:**** ".
At the first try, there really was an error. But even after checking carefully around info.plist or those related files and tried several times, I still get the same error.

After several trials, I've found that I'm overwriting the .ipa file when re-making the binary.
In general, using the same file name sometimes cause some kind of confusions because of cache effect or something.
So I, in my last try, just changed the name of .ipa and had it into Application Loader.
.... That's it. Upload successful.

But it's not understandable why it caches the information of overwritten archive file...


アプリをAppStoreに上げるべく、ApplicationLoaderで作業していたのだけど、"Bundle identifier:***** differs from reserved bundle identifier:**** ". というエラーが出てアップロードできない。
で、調べてみると最初は確かに間違いがあった。
しかし、いろいろチェックして直してみてもずっと同じエラーが出続けるようになってしまった。

なぜだ・・・と思いつつふと気づいたのが、.ipa を作り直す際に、毎回上書きで保存していたという点。
一般的に、同じ名前を使うとキャッシュだ何だの影響で混乱が起こることはよくある。
ということで最後に .ipa の名前を変えてトライしたところ
・・・行けました。アップロード完了。

できたのはいいけど、なんでこんなところでキャッシングをする必要があるんだ・・・。理解できん。

cocos2dアニメーション

悩むこと数時間、やっとアニメーションが動いた・・・。

(1)
まず、テクスチャサイズが巨大になるのをおそれてスプライトシート方式を避けていたが、iPhone全画面・数コマくらいならいけることがわかったので、もうそれでいいことにした。(でも今後10コマとかに増えそうだったらやはり脱スプライトシートの方法を探らないといけない・・・)

(2)
コードはこれでOK。
http://www.raywenderlich.com/1271/how-to-use-animations-and-sprite-sheets-in-cocos2d

(3)
が、スプライトシート(.png/.plist)を作るツールは
こっちじゃないとダメっぽい
http://www.texturepacker.com/

ちなみに cocos2d は 0.99.5 です。
もう1.xにした方がいいのかな・・・

久しぶりだが・・・

久しぶりに cocos2d で作業すべく cocos2d をアップデートしたが
・・・アニメーションの仕組み変わりすぎだろ・・・
plistとか使うのデフォになってるし・・・
webで使い方検索しても見つかるのはほとんど TextureAtlas から切り出して使う方法だし・・・。
前のアニメーションの仕組みも簡単ではなかったけどな・・・

Localization of app name

Wanted to localize the app name displayed under the app icon and set the info.plist file as localizable, but it didn't work.
I searched on the web for about an hour and finally find this article:
http://www.awaresoft.jp/development/35-iphone-app/88-iphone-app-localization.html (Japanese)

The article says: The right way to localize app display name is, to make InfoPlist.strings and set it as localizable.
Then, add a line like this on each InfoPlist.strings(language) files :
CFBundleDisplayName = "App Name";


アプリアイコンの下に表示されるアプリ名をローカライズしようと思って、info.plistを「ローカライズ可能」にしてみたのだけど、うまくいきませんでした。
小一時間ほど検索してやっとこの記事を見つけました。
http://www.awaresoft.jp/development/35-iphone-app/88-iphone-app-localization.html

この記事によれば、表示アプリ名を変更するには、まずInfoPlist.stringsファイルを作って、それを「ローカライズ可能」にする。
で、できたInfoPlist.strings(言語名) ファイルのそれぞれに
CFBundleDisplayName = "アプリ名";
という文を追加する、ということのようです。

Transparent background on UIView

UIViewの背景を透明にするには、
aView.backgroundColor = [UIColor clearColor];
みたいにコードを書かないといけないようです。
IB上にそういうオプションがあれば一発なのに・・

To have the background of UIView transparent you have to set the background color to "clearColor" programatically like this:
aView.backgroundColor = [UIColor clearColor];
I wonder why there aren't the option to do that on IB....

My most frequent error when working with Interface Builder

Interface BuilderでUIを作って XCode でビューコントローラを書いたものの全く何も動かない・・・
というケースがよくあるんですが、僕の場合ほとんど原因は IB書類のセーブ忘れ;
何度も経験してるのだけどそのたびにあれ?あれ?とか言ってけっこう時間を食ってしまうのでアホくさいことこの上ないです。

Having built a neat UI on the Interface Builder and
a nice view controller on XCode but
nothing reacts at all....
In such situation, most of the case I forgot to save the IB document after changing.
Pretty silly, but I do this very often, and spend a certain length of time until I notice...

NSUserDefault @ iOS4

次回起動時にアプリの状態が再現するよう各種変数を保存するための方法としては、アプリ終了時に NSUserDefaults に書き込みを行うのが一番一般的かつ楽な方法でしょう。
iPhoneOS3.x系では、そのNSUserDefaults関係の操作を applicationWillTerminate に記述することで実現できるわけで、実際これで動いておりました。
が、iOS4ではどうやら applicationWillTerminate 自体が呼ばれておらず、かわりに applicationWillResignActive だけが呼ばれている様子。
なので結局、iOS 3&4 両方で状態保存を実現するためには、applicationWillTerminate と applicationWillResignActive の両方に NSUserDefaults 関係のコードを書かないといけない。
なんか腑に落ちないよなぁ・・・。

(10/6追記)
もっと確実にやるためには applicationDidEnterBackground にも同じことを書かないといけないみたいです。

The easiest way to save the application's state so that it can restore them on the next launch is writing NSUserDefaults when the application is terminating.
With iPhoneOS3.x it can be done by writing NSUserDefaults related codes on applicationWillTerminate and everything worked well.
But it seems iOS4 no longer calls applicationWillTerminate but only calls applicationWillResignActive instead.
Consequently, to let your app have the save state function both on iOS 3&4 you have to write NSUserDefaults related codes both in applicationWillTerminate and in applicationWillResignActive.

(Added on 10/6)
You also have to write the same thing in applicationDidEnterBackground to make it perfect.

Oops...

「YMCK Player」やっとリリースできました。いろいろ良い評価もいただいております。
しかし、さっそく大バグの報告も・・・。
iOS4だと、"オートメーション" を編集した後メイン画面に戻れないという。

事前に何人かの人にテストしてもらっていたのだけど、誰も "編集" の画面には行ってなかったわけです・・・。
ちょっとテストをお願いするときにチェック項目をよく練ってからお願いしないといけないですね。


My App "YMCK Player" just has been released, and lots of friends reports their good experience.
But there also reports of the big bug...
On iOS4, after editing "Automation" you cannot back to the Main Screen.

I had send several copies to my friends for testing, but it revealed that nobody of them had never pushed "edit" button to edit Automation...
I have to think of better method of testing, like listing up the states that I have to check in advance etc.

cocos2d周りのこと

ちょっとテンパってていろいろ話が抜けてたんでまとめて書いておきまする。

まず Cocos2d 0.99 にアップグレードした理由について、この前のエントリでは "それくらいしかやること思いつかないから"、と書いたのだけど、実はその前にクラッシュログを読んで Cocos2d 関連のメッセージ呼び出しの後にクラッシュしているというところは突き止めてたんであります。
でも、そんなハッキリした問題があるとしたら、僕の周りの人の持っている OS も デバイス世代も違う iPhone達で皆動いている事実が説明できない。
0.99への移行はけっこうな大手術だと分かっていたから、本当だったら間違いなくそこが原因、と突き止めてから行きたかったのだけど、もうそこぐらいしか怪しいところが残ってなかったので、腑に落ちなくてもやるしかない・・・ということで踏み切ったわけですね。

結果としては、クラッシュは解消され、無事レビューも通りました。しかしなぜアップルの環境でだけクラッシュが発生したのか・・・真相は闇の中です。

cocos2d 0.8 以前をベースに構築した方は、こんな風にバージョンアップの時に引っかかる可能性があるので、早めに 0.9系にアップグレードしておいた方がいいかもしれませんよ・・・。

Invalid Binary

I've uploaded my binary to iTunes Connect, but I checked the status on the iTC page afterwards it turned to "Invalid Binary".
I've searched for the reason for an hour to have found that
I assigned a value to Code Signing Entitlement in the build settings by mistake.

When making ad-hoc build you have to set the string value "dist.plist" to Code Signing Entitlement. It has to be applied only to ad-hoc configuration, but I forgot to change the configuration selection pulldown on the top of Build Settings window and other configurations(Release/Debug) were changed without notice.

One more important thing here is, that you have to check the status of your app on the iTunes Connect page after you have uploaded the binary. Even when the upload was successful, this kind of thing may happen afterwards.
This time, if I didn't go check it, I'd have gotten an extra delay to the review.


iTunes Connect にバイナリをアップロードしたのだけど、後でステータスをチェックしてみると "Invalid Binary" になっていた。
1時間ほどかけて原因を探ってみると、「コード署名権限(Code Signing Entitlement)」に値が設定されてたのが問題だった。

やったことのある方はご存じと思うが ad-hoc バイナリを作るときには、コード署名権限のところに "dist.plist" を設定しなければいけない。これは ad-hoc構成にだけ行われるべきなのだけど、うっかりビルド設定の上の方にある構成選択ポップアップの選択を忘れていて、他の構成(Release/Debug)の方にも反映されてしまっていたのであります。

ここでもう一つ重要なのが、アップロードした後に iTunes Connect のページに行ってステータスを確認すべきということ。
もしアップロードがうまくいっても、こういう不具合が出ていることがある。
今回もしチェックしに行ってなかったらしばらく放置されてまたレビューまでの期間が無駄に延びてしまうところだった・・・。

ページ移動