2013年12月28日土曜日

Kobold2D 2.0.4 でのAdMobのバージョンに注意

以前、XCode5.0アップグレードとKobold2d2.0.4のリンクエラー という投稿をしましたが、AdMobのバージョンアップをせずにリンクの修正のみを行いました。
その後、アプリの申請を行ったのですが、AdMobのAPIに対して以下の指摘がリジェクトメールで返されました。レビュー前のバイナリアップロードの直後で返されたものです。

Non-public API usage:
Apps are not permitted to access the UDID and must not use the uniqueIdentifier method of UIDevice. Please update your apps and servers to associate users with the Vendor or Advertising identifiers introduced in iOS 6.

参考ブログのiOS開発ブログさんによれば、AdMobのバージョンを、最新にすればよいということです。GoogleよりAdMob 6.7.0 をダウンロードし、参考ブログのデベロプメンさんの方法で、以下の作業を行いました。

・Valid Architecturesは、armv7のみにした。
・Kobold2Dインストール先のKobold2D-2.0.4/__Kobold2D__/libs/GoogleAdMobAdsSDK
のヘッダファイルとライブラリファイルを最新と入れ換える。←ただし、これはルール違反ですので、プロジェクトの下にディレクトリを作ったほうがよいでしょう。
・デベロプメンさんの方法ではBuild Phases→Link Binary With LibrariesにlibGoogleAdMobAds.aを追加するとありますが、リンクエラーが発生したために削除しました。
・Build Phases→Link Binary With LibrariesにAdSupport.frameworkを追加しOptionalにする。
・Other Linker FlagsのDebugとReleaseの両方に-ObjCというフラグを追加する。

私の場合は、config.luaでは、iAdのみ有効にし、AdMobを無効にしています。
よって、AdMobを有効にして設定を行った場合、もしかすると不具合が出るかもしれません。以上の作業を行い再度バイナリアップロードしました。無事レビューへと行けました。

参考ブログ

2013年12月21日土曜日

CocosBuilderで作成するとReleaseビルドでクラッシュする

何気なくCocosBuilderで検索していたところ、下記のようなブログの投稿を発見しました。

Taiatari さんのブログで、
CocosBuilderにリジェクトの罠!このバグ致命的!

同じような問題が、他に投稿されていないかと検索してみたところ、

cocos2d iphone の公式サイトのフォーラムに、

iPad project using CocosBuilder fails release, runs debug

という投稿がありました。

今年、2013年の5月に投稿されていたようで、今頃になって見つけてしまいました。
私も、CocosBuilderの2.1でアプリを制作していまして申請直前でしたので、助かりました。
これからは、こまめにチェックしておかないといけないですね。
どうも、ありがとうございます。

自分のアプリをReleaseで実機 iPodTouch 4th iOS6.1.5 で実行させたところ。
見事にクラッシュしました。
Organizerのデバイスログで見ると、

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   hoge-iOS                 0x000d74b8 -[CCBReader readFloat] (CCBReader.m:199)

やはり、CCBReader.m のメソッド readFloat で落ちているみたいです。
上記の公式サイトの投稿によると readHeader も修正したほうがよさそうです。

readHeader 修正後
- (BOOL) readHeader
{
    // if no bytes loaded, don't crash about it.
    if( bytes == nil) return NO;
    // Read magic
    int magic;
    unsigned char* pData = ( bytes + currentByte );
    //    int magic = *((int*)(bytes+currentByte));
    memcpy( &magic, pData, sizeof( int ) );
    currentByte+=4;
    if (magic != 'ccbi') return NO;
    
    // Read version
    int version = [self readIntWithSign:NO];
    if (version != kCCBVersion)
    {
        NSLog(@"CCBReader: Incompatible ccbi file version (file: %d reader: %d)",version,kCCBVersion);
        return NO;
    }
    
    return YES;
}
 readFloat 修正後
- (float) readFloat
{
    unsigned char type = [self readByte];
    
    switch (type) {
        case kCCBFloat0:
            return 0;
        case kCCBFloat1:
            return 1;
        case kCCBFloatMinus1:
            return -1;
        case kCCBFloat05:
            return 0.5f;
        case kCCBFloatInteger:
            return [self readIntWithSign:YES];
        default: {
            // using a memcpy since the compiler isn't
            // doing the float ptr math correctly on device.
            float f = 0;
            unsigned char* pData = (bytes + currentByte);
            memcpy(&f, pData, sizeof(float));
            currentByte+=4;
            return f;
        }
    }
}
 このバグの原因は、armv7のメモリアロケートにあるらしいのですが…
…よく理解できませんでした。勉強し直します。

2013年10月12日土曜日

XCode5.0アップグレードとKobold2d2.0.4のリンクエラー その2

XCode5.0アップグレードとKobold2d2.0.4のリンクエラーのつづきです。
CCAsyncObjectに関する以下のエラーですが、以下のstackoverflowに解決方法がありました。


どうやらCCBigImageの定義に原因があったようです。
下のCCBigImageのグループ内のソースファイルに対して設定を変更します。

















それぞれのファイルに対してインスペクターを開き、次の作業をします。
インスペクターは、メニューのView -> Utilities -> File Inspector で開きます。


チェックが付いている項目のチェックを無効にします。
以上で、無事にビルドができました。

2013年10月9日水曜日

XCode5.0アップグレードとKobold2d2.0.4のリンクエラー

XCode4.5からXCode5.0にアップグレードして、今まで開発していたKobold2d 2.0.4の
プロジェクトをビルドしました。すると、リンクエラーが発生しました。
libGoogleAdMobAds.aが見当たらないというようなエラーでした。
最新のAdMobのSDKをグーグルからダウンロードして設定しなおしても、解決しませんでした。元のプロジェクトに戻して、AdMobが関係していそうなビルド設定をいきあたりばったりで修正しビルドを繰り返しました。そして、以下のような設定の変更でやっとビルドが通りました。

Build Setings → User_Defined のリスト中にLINK_WITH_ADDMOBという項目があります。
ダブルクォテーション (") で囲まれていますが、これを外します。

この " を削除して、
"$(KKLIBROOT)/GoogleAdMobAdsSDK/libGoogleAdMobAds.a"
下のようにします。
$(KKLIBROOT)/GoogleAdMobAdsSDK/libGoogleAdMobAds.a

これで無事リンクエラーは無くなりました。
メモは取ってないのですが、このリンクエラーの前にKobold2d内のソースに関係するエラーがチラホラ出ていました。
現在も"_OBJC_CLASS_$_CCAsyncObject"がないというようなエラーが発生中です。
Cocos2DExtentionでのエラーですので、使用していなければ、発生しないようです。


2013年3月8日金曜日

iBooksとDynabook

やっと、日本公開になりましたが、iBooks Authorが縦書き対応していないとか、大体が、Pagesも縦書き対応してないじゃないか、クラリスに戻せ!とかいう批判の声もあるようです。

大手出版社からも、かつての売れ筋を電子書籍化して様子見をしようという感じです。
流通ピラミッドの頂点を取り損なったガッカリ感もあるのでしょう。

電子書籍の「書籍」にこだわらずに、アランケイのDynabookに通じるひとつのアプリケーションとして、今後は開発していく必要があるのではないでしょうか。

MacBook 2008 Late にMountain Lionをインストールして出た外部モニターの不具合

MacBook 2008 Lateには、SnowLeopardをインストールしていましたが、iOS6の開発のためにやむを得ず、MountainLionにアップデートしました。
不具合が出たのは、外部モニター(MITSUBISHI RDT195S)で、サードパーティーの変換コネクターを使って、D-Sub15pinで繋いでいます。
10年近く前のもので、液晶自体はまだ大丈夫ですが、調整用のボタン類が、度重なった引っ越しでガタガタです。セロハンテープで止めています。

ダウンロードとインストールで、半日くらい費やし、さて、やっと起動、ログイン画面が出たところで、それが発生しました。
ドラクエのルーラのような画面効果が、「アップルも、シャレたことやるねえ」と思ったものの、Finderでもシャレた効果が続きまして、「あー同期が取れてない」…

1280x1024では、60Hzでも75Hzでも同期が取れず、やむなく1184x870にしました。
昔使っていたe-Macの17inch相当の解像度です。
当時を懐かしく思いながら、使っております。

-------------------------------------------------------------------------------------------------------------------
後日談:DVI変換コネクターを使うと、1280x1024で設定できました。