その他/NADECで講演します

10月9日に@mnagakuさん主催のNADECという勉強会で講演します。15分のライトニングトークです。

私のお題は「C++で開発されるゲームのためのRTTIを使用しない高速なリフレクション(ソースもあるよ)(仮)」です。これは過去に私が担当してきた比較的大規模なゲームタイトル(PS3/Xbox360)で実装した技術を元に、オープンソースコミュニティ向けに一からライブラリを書き起こす、ということをやってみたモノの発表です。したがって、公開ソース自体の運用実績はありませんが、姉妹版を利用しているタイトルはいくつか存在します。

15分のセッションですので、他の類似システムとの性能比較など詳しいことは出せないかも知れませんが、当日はUstreamでの配信もあるそうですので、興味のある方はご覧下さい。

NADECの発表後、本ブログ等にてソースコードの取得先に関する情報なども公開します。


参考情報:
- NADEC: http://bit.ly/dovNbl

MacOSプログラミング/The application does not have a valid signature

iPhone/iPad用のアプリケーションを開発している際に、シグネチャを変えた訳でもないのに、デバイスにアプリケーションをインストールする際、突然「The application does not have a valid signature」と怒られるようになることがあります。

その際は、ビルドプロセスでファイルをアプリケーションバンドルの「resources」フォルダ以下にコピーしている可能性があります。

もし、resources以下にコピーしている場合は、なんでもいいのでそれ以外の名前にすると、「The application does not have a valid signature」のエラーを解決することが出来ます。


先に解決してくれている人が居て助かりました。OniDevさんありがとう!
#今日はなんだか、変な地雷ばかり踏んでいるような気がする・・

■Reference:
!!Thanks!! The application does not have a valid signature

その他/プロジェクト依存関係を付けたiPad用のビルドリンクエラーが出る

先の記事でXcodeでのプロジェクト間の依存関係を設定する方法を紹介しましたが、この方法を使ってライブラリをリンクした際にiPadでプロジェクトをビルドすると、

"___restore_vfp_d8_d15_regs", referenced from: <シンボル名>
"___save_vfp_d8_d15_regs", referenced from: <シンボル名>
collect2: ld returned 1 exit status
ld: symbol(s) not found

というような形でリンクエラーが出ることがあります。

この原因は、ライブラリ側のアーキテクチャがarmv6なのに対して、アプリケーション側のアーキテクチャがarmv7であるためです。

この問題が起きた場合は、以下の様にすることで、問題が解決します。

1. ライブラリ側のxcodeprojを開く
2. アクティブSDKをDevice 3.2に設定
3. ターゲットを選択して右クリックで「情報を見る」
4. アーキテクチャを「Standard(armv6)」から、「Optimized(armv6 armv7)」に変更

これで、元のプロジェクトからクリーンビルドすると、上記のリンクエラーが解決します。

その他/XCodeでプロジェクト間の依存関係を付ける

XCodeのプロジェクトが複数あるとき、特にライブラリプロジェクトなどを作った場合に、ライブラリの利用側のプロジェクトをビルドする際に、ライブラリも一緒にビルドしてしまいたいと思うことがあります。

XCodeはプロジェクト間の依存関係をつけることで、このようなことが可能です。

1. 他のXCodeプロジェクトファイルをプロジェクトに追加する
「グループとファイル」で右クリック、「追加>既存のファイル」で、追加したい他のXCodeプロジェクトファイル(xcodeproj)を選択すると、他のプロジェクトファイルが追加されます。追加されたプロジェクトの下には、プロダクトがリストアップされている筈です。

2.プロジェクトの依存関係を付ける
今度は、ターゲットを右クリックし、「情報を見る」で情報ウインドウを開きます。
「一般」タブのところに、「直接依存関係」というのがあるので、ここの「+」を押すと、先ほど追加したプロジェクトのプロダクトを選択することが出来るはずです。
これを選択、追加すると、このターゲットをビルドした際に、依存関係のプロダクトもビルドされるようになります。

3.ライブラリをリンクする
依存関係をつけたプロダクトがライブラリの場合、大抵はリンクする必要があります。プロダクトをリンクするには、
- ターゲットの「バイナリをライブラリにリンク」のビルドプロセスに1のプロダクト(xcodeproj以下にある方)をD&Dする
もしくは
- 依存のxcodeprojをグループとファイルで選択し、ファイルリストの端っこに出てくるチェックボックスをチェック

という作業を行います。

これでビルドすると、依存関係をつけたプロダクトがビルドされます。

Appleのドキュメントでは、「Xcode Project Management Guide: Referencing Other Projects」で記載されています。

MacOS/Mac OSの修飾キーと「不明なキーボード」

Macはシステム環境設定の「キーボード」にて、接続しているキーボードごとに修飾キーを設定変更することが出来ます。

システム環境設定「キーボード」
システム環境設定「キーボード」から修飾キーの変更が可能

私は元々Macユーザーだったのですが、ここ10年ほどはWindowsを利用している時間の方が長く、今はまたMac中心になったとはいえ、Windowsも使用するので、修飾キーのバインドを両者であまり差が出ないよう合わせるようにしています。

先日、仕事用のMacがシステム終了時にカーネルパニックが発生した折、再起動した際にUSB接続して使用しているRealForceの修飾キーの変更が、なぜか機能しなくなってしまいました。

何度再設定しても再起動しても、一向に変更が反映されず、Realforceのキーバインドは修正前の状態のままです。
と、ここで、修飾キーを変更出来るキーボードのリストになにやら怪しげなデバイスがリストされていることに気がつきました。「不明なキーボード」というものです。

不明なキーボード

しかし、外付けのキーボードはRealforceしか接続しておらず、まさに不明な状態。仕方がないのでUSBデバイスを一つずつ外して確認したところ、外部マウスとして使用している「ロジクール MX-Revolution」の無線レシーバを外した時に、この「不明なキーボード」がリストからなくなることを確認しました。
また、このデバイスを外した途端に、いままで動作しなかったRealforceの修飾キーの変更が機能するようになったため、このデバイスが問題を発生させていたことも分かりました。

修飾キーの変更が適用された後にMX-Revolutionを接続しなおすと、修正後のキーバインドは適用されたままで、無事にカーネルパニック前の状態に戻すことが出来ました。

同様の問題に悩まされている方は、USBデバイスを一つずつ外しながら、「不明なキーボード」の犯人探しを行うと良いかも知れません。