忍者ブログ
  • 2024.10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 2024.12
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【2024/11/22 13:12 】 |
IPv6対応
リジェクトされた


We discovered one or more bugs in your app when reviewed on iPad running iOS 10.0.1 on Wi-Fi connected to an IPv6 network.

Upon launch, app displays error messages.

In addition, tapping Shop tab results in displaying an error message.

We've attached screenshot(s) for your reference.

Next Steps

Please run your app on a device while connected to an IPv6 network (all apps must support IPv6) to identify the issue(s), then revise and resubmit your app for review.

If we misunderstood the intended behavior of your app, please reply to this message in Resolution Center to provide information on how these features were intended to work.

For new apps, uninstall all previous versions of your app from a device, then install and follow the steps to reproduce the issue(s). For updates, install the new version as an update to the previous version, then follow the steps to reproduce the issue(s).

Resources

For information about supporting IPv6 Networks, please refer to Supporting IPv6 DNS64/NAT64 Networks and About Networking

If you have difficulty reproducing a reported issue, please try testing the workflow described in Technical Q&A QA1764: How to reproduce bugs reported against App Store submissions.

If you have code-level questions after utilizing the above resources, you may wish to consult with Apple Developer Technical Support. When the DTS engineer follows up with you, please be ready to provide:
- complete details of your rejection issue(s)
- screenshots
- steps to reproduce the issue(s)
- symbolicated crash logs - if your issue results in a crash log






ドキュメント

Qiitaの記事


接続するテストをする。
NAT64ネットワークを用意する必要がある。

MacをNAT64ネットワークにできるので、iPhoneでMacに接続することになる。

AirMac Stationにするということなので、macが接続する先のネットワークと、macに接続してくるネットワークと2経路持っておく必要がある。
Macからは優先LAN(Ethernet)でルータにつないでおき、WiFiはiPhoneから接続してくるようにするのが良い。

iPhone → WiFi → Mac → Ethernet → ルータ → (全世界へ)

というわけでMacは、10.11以降でLANケーブルを刺せるものが良い。


オプションキーを押しながら、「共有」をクリックし、そのまま「インターネット共有」を選択。
すると、「NAT64ネットワークを作成」チェックボックスが出現する。これを確認したらオプションキーを離す


「共有する接続経路」はEthernet(LANケーブルが刺せるmacでないと選択肢にそもそもない)
「相手のコンピュータでのポート」をWiFiにする。
WiFiオプション設定でネットワーク名やセキュリティ設定ができるが、しなくても良い

これでOK
PR
【2016/09/27 17:59 】 | cocos2d-x | 有り難いご意見(0)
無題

SimpleAudioEngine.h
SimpleAudioEngine.mm
 playEffect
 static_playEffect
  単なる経由地
   ios,Androidはここから分岐

SimpleAudioEngine_objc.m
 SimpleAudioEngineクラス
 -(ALuint) playEffect:(NSString*) filePath loop:(BOOL) loop pitch:(Float32) pitch pan:(Float32) pan gain:(Float32) gain


bgmの場合
CDAudioManager.m
 CDAudioManagerクラス
  実際の処理。ロード、発音など
  configureの設定も効く

seの場合
CocosDenshion.m
 CDSoundEngineクラス





【2016/08/09 18:24 】 | cocos2d-x | 有り難いご意見(0)
cocos2d-xでSEが鳴らない
短いSEほど鳴らないことが多いようだ

preloadできないか調べてみると、できるようだ

audio/ios/CDAudioManager.m
-(int) bufferForFile:(NSString*) filePath create:(BOOL) create;

見てみると、通常の
playEffect
からも毎回呼び出されている

filePathは、SEのフルパス。

NSNumber* soundId = (NSNumber*)[loadedBuffers objectForKey:filePath];



すでに読み込んでいれば、ここでsoundIdが返ってくる(0以上の値)



SimpleAudioEngine_objc.m

-(ALuint) playEffect:(NSString*) filePath loop:(BOOL) loop pitch:(Float32) pitch pan:(Float32) pan gain:(Float32) gain
{
int soundId = [bufferManager bufferForFile:filePath create:YES];
if (soundId != kCDNoBuffer) {
return [soundEngine playSound:soundId sourceGroupId:0 pitch:pitch pan:pan gain:gain loop:loop];
} else {
return CD_MUTE;
}
}



audio/ios/CDAudioManager.m

-(int) bufferForFile:(NSString*) filePath create:(BOOL) create;

- (ALuint)playSound:(int) soundId sourceGroupId:(int)sourceGroupId pitch:(float) pitch pan:(float) pan gain:(float) gain loop:(BOOL) loop;





バッファがない場合、deleteBufferして再度ロードしてみようと思ったが、
deleteBuffer自体できなかった



スレッドの問題か?とも思ったが
正しく鳴る音と、正しく鳴らない音を入れ替えてアプリを動かしてみたところ
やはり鳴らない音は鳴らなかった。
つまり、発音する場所に依存するのではなく、音声データに依存している。


結局、音声データを新たに作成することで解決した
mp3を別の形式にしてもやはり鳴らなかったので、
mp3を流したものを録音して作った新たなmp3を使うことで、無事に鳴った

【2016/08/09 17:28 】 | cocos2d-x | 有り難いご意見(0)
Android+cocos2d-xで、画面が戻ってこない
アプリ内から動画広告を再生して、画面を閉じても
ゲーム画面が表示されなかった

printデバッグしてみると、cocos2d側のupdate系が呼ばれていない
つまり、cocos2d-xがresumeされていないようだ

Android側のコードを探してみると
Cocos2dxRenderer.javaの中に、
Androidからcocos2dxを呼び出しているらしきライフサイクル系のメソッド群があった

private static native void nativeTouchesBegin(final int id, final float x, final float y);
private static native void nativeTouchesEnd(final int id, final float x, final float y);
private static native void nativeTouchesMove(final int[] ids, final float[] xs, final float[] ys);
private static native void nativeTouchesCancel(final int[] ids, final float[] xs, final float[] ys);
private static native boolean nativeKeyDown(final int keyCode);
private static native void nativeRender();
private static native void nativeInit(final int width, final int height);
private static native void nativeOnSurfaceChanged(final int width, final int height);
private static native void nativeOnPause();
private static native void nativeOnResume();




さてnativeOnResumeは、

Cocos2dxRenderer::handleOnResume();
Cocos2dxGLSurfaceView::onResume();
Cocos2dxActivity::onResume();
MainActivity::onResume();


ちゃんと呼び出されている


というわけで、中の実装を見てみる

nativeOnResume()の実体は、

cocos/platform/android/jni/Java_org_cocos2dx_lib_Cocos2dxRenderer.cpp
のファイル内に、それぞれの関数の実体が定義されていた



JNIEXPORT void JNICALL Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeOnResume() {
if (Director::getInstance()->getOpenGLView()) {
Application::getInstance()->applicationWillEnterForeground();
cocos2d::EventCustom foregroundEvent(EVENT_COME_TO_FOREGROUND);
cocos2d::Director::getInstance()->getEventDispatcher()->dispatchEvent(&foregroundEvent);
}
}



このif文が真になっていなければ、説明がつく
というわけで、applicationWillEnterForeground()が実行されているかというと
ちゃんとされていた。

ということは、EventDispatchができていないのか

Scene::update()は、iOSの場合

HomeScene::update(float)
cocos2d::Scheduler::scheduleUpdate(cocos2d::Node*, int, bool)::'lambda'(float)::operator()(float) const
cocos2d::Scheduler::update(float)
cocos2d::Director::drawScene()
cocos2d::DisplayLinkDirector::mainLoop()
-[CCDirectorCaller doCaller:]


と言う順序で呼び出される

まだ不明
【2016/08/07 15:14 】 | cocos2d-x | 有り難いご意見(0)
無題
androidでtwitter4jを使っていて、以下のエラーが出て投稿できないときがあった
認証は正常にできるが、投稿する時に例外が発生して以下のようになる


07-30 15:44:45.737 21142-21406/kazuma.saitou.mokou W/System.err: 401:Authentication credentials (https://dev.twitter.com/pages/auth) were missing or incorrect. Ensure that you have set valid consumer key/secret, access token/secret, and the system clock is in sync.
07-30 15:44:45.737 21142-21406/kazuma.saitou.mokou W/System.err: {"request":"\/1.1\/statuses\/update_with_media.json","error":"Read-only application cannot POST."}
07-30 15:44:45.737 21142-21406/kazuma.saitou.mokou W/System.err: Relevant discussions can be found on the Internet at:
07-30 15:44:45.737 21142-21406/kazuma.saitou.mokou W/System.err: http://www.google.co.jp/search?q=2fc5b7cb or
07-30 15:44:45.737 21142-21406/kazuma.saitou.mokou W/System.err: http://www.google.co.jp/search?q=0f1343da
07-30 15:44:45.737 21142-21406/kazuma.saitou.mokou W/System.err: TwitterException{exceptionCode=[2fc5b7cb-0f1343da], statusCode=401, message=null, code=-1, retryAfter=-1, rateLimitStatus=null, version=4.0.4}
07-30 15:44:45.737 21142-21406/kazuma.saitou.mokou W/System.err: [Ljava.lang.StackTraceElement;@1359e913



コードを追いかけてみると、トークンやトークンシークレットは正しい値でリクエストを投げている
アプリ管理ページhttps://apps.twitter.com/app/ で TestOAuthを試してみると、なんか違うトークンとシークレットでテストしている

そこで、管理ページからトークンとシークレットを再生成(Regenerate)。
アプリも一度削除して再度実行

するとできた


どうやら、アプリ管理ページから作成するとき、間違えて違うアカウントで登録したので
別のアカウントでログインして再度登録したのだが
このとき、古い方のトークン情報が残っているかなんかしたのだろう
ツイッター側のサイトがどういう作りをしているのか知らないが…
【2016/07/30 15:56 】 | cocos2d-x | 有り難いご意見(0)
cocos2d-xのプロジェクト作成コマンドの流れ
前回の記事と基本は同じ


COCOS_CONSOLE_ROOT
以下の
plugins/new_project/new_project.py
CCPluginNewクラス

に書いてある

テンプレートとなるプロジェクトは
$ COCOS_TEMPLATES_ROOT/cpp-template-default
である。他にもjs-templateやlua-templateなどがある

ここのディレクトリをコピーして作っている
(ただし、cocos-project-template.jsonを除く)


プロジェクトの
PROJECT_DIR/cocos
は、SDKから持ってくる。
大元は、cocos2d-x-v.v/ の直下。

ただし、全部をコピーするわけではない。(tests/ とか setup.py とかはいらない)
どのファイルをコピーするかは、
cocos2d-x-v.v/templates/cocos2dx_files.json
に書いてある。
"common", "cpp", "js", "lua" とそれぞれ書いてある。cppの場合、"common"と"cpp"のファイル群がコピーされる

その他のディレクトリは
このcpp-template-default
からコピーしてきている


【2016/07/25 20:38 】 | cocos2d-x | 有り難いご意見(0)
cocos2d-xのandroidビルドの流れ
PROJ_DIR/proj.android-studio
の中で、
$ cocos compile -p android --android-studio
を実行する。

この時、どう処理が流れるのかを調べた


$ which cocos
の場所。
COCOS_CONSOLE_ROOT ディレクトリ配下にある。

cocos はシェルスクリプトで、
同じディレクトリにある cocos.py を実行している

cocos.py はpythonスクリプトで
引数に応じたプラグインを実行する

プラグインの設定ファイルは、これも同じディレクトリにある
cocos2d.ini に書いてある。
コンパイルするためのプラグインは以下の記述。

[plugins]
:
project_compile.CCPluginCompile
:


ファイル名.クラス名となっている。

プラグインは、
COCOS_CONSOLE_ROOT/../plugins
にある

コンパイル系のプラグインは
project_compile ディレクトリ下にあり
project_compile.py ファイルのCCPluginCompileクラスになる。

【2016/07/25 20:22 】 | cocos2d-x | 有り難いご意見(0)
cocos2d-xのライブラリを修正する時は
結論から言うと、ゲームプロジェクトのルートディレクトリ配下にあるファイルを書き換えれば、あとは通常の手順で良い


PROJ_DIR/cocos2d/cocos/ 以下のファイルを適宜書き換える


iOSの場合
プロジェクトでビルドする。
ライブラリプロジェクトの方からビルドが走る。


Androidの場合
$ cocos compile -p android --android-studio
で良い。
更新されたファイルがあれば、そのライブラリを自動で生成する。


【2016/07/25 18:49 】 | cocos2d-x | 有り難いご意見(0)
AndroidStudioでcocos2d-xのプロジェクトを動かした話 その2
前回は、初めて動かしたのでAndroidStudio周りの設定などを色々やった

今回、それが住んでいるものとして、
より簡潔に起動した時の手順

まず、AndroidStudioを開き、
File -> New -> Import Project から
cocosプロジェクトのproj.android-studio/ディレクトリを指定して開く

build.gradle
apps/build.gradle
apps/AndroidManifest.xml
などを修正


Firebaseに対応するので(参考
Firebaseからgoogle-service.jsonをダウンロード、
apps/ディレクトリに配置(置き換え)


この公式ページを参考に、Firebase周りの設定を行う

サンプルコードはここ

この辺りを見て色々コピー。

build.gradleをSyncすると、
failed to resolve firebase-xxx:v.v.v 


とか出ることがあるが
SDK ManagerでSDKやGoogle Play Services, Google Repositoryなどをアップデートすれば良い。

【2016/07/23 15:01 】 | cocos2d-x | 有り難いご意見(0)
既存のcocos2d-xプロジェクトをEclipseからAndroidStudioに移行する
cocos2d-xですでに作っているプロジェクトの
cocos2d-xのバージョンアップをするのは、少し手がかかる

特に、3.7より古いバージョンで作ったゲームを
3.7移行で対応されたandroid-studioに対応したい時はどうするのか。



通常、cocosプロジェクトのルートに
各プラットフォーム向けのディレクトリがある
proj.ios_mac
proj.android
などなど。
これらは、最初にプロジェクトを作る時に
$ cocos2d-x-3.7/setup.py
を実行することで作られる。
後からこれを実行することはできない(できるかもしれないがどうなるかわからない)


1.
cocos2d-x-3.7/templates/cpp-template-default/proj.android-studio/
ディレクトリを、自分のプロジェクトにまるっとコピー

2.
AndroidManifest.xmlを、
proj.android/からまるっとコピー

3.
とりあえずコンパイルしてみる
$ cd PROJ_DIR/proj.android-studio
$ cocos compile -p android --android-studio

エラーが出る。

No project name specified, using Activity name 'MainActivity'.
If you wish to change it, edit the first line of build.xml.




4.
build.gradleのapplicationIdがデフォルトのままなので
AndroidManifest.xmlのpackageと同じ名前に変更
ついでに、defaultConfig 関連の設定を全部proj.androidと同じに揃える(sdkVersionなど)

5.
再度コンパイル。
先ほどのエラーはなくなった

次のエラーは

jni/../../../Classes/BaseLayer.h:13:34: fatal error: extensions/cocos-ext.h: No such file or directory



cocos2d-xのライブラリのインクルード指定をする必要がある

6.
Android.mkのcocosライブラリインクルード周りを見てみる。
が、デフォルトでextension周りはインクルードされているようだ。

ついでなので、

CPP_FILES := $(shell find $(LOCAL_PATH)/../../../Classes -name *.cpp)
LOCAL_SRC_FILES := hellocpp/main.cpp
LOCAL_SRC_FILES += $(CPP_FILES:$(LOCAL_PATH)/%=%)

LOCAL_C_INCLUDES := $(shell find $(LOCAL_PATH)/../../../Classes -type d)



を記述。

またApplication.mkに

APP_CPPFLAGS += -DCC_TARGET_OS_ANDROID=1



を記述


7.
コンパイル。
まだ同じところでエラー。

8.
インクルードパスを指定するような場所を探す。
とりあえずProject StructureでNDKパスを以下に指定
/path/to/android/SDK/ndk-bundle
SDKは
/path/to/android/SDK
JDKは
/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home

しかしそのほかにインクルードパスを指定するようなところがない
インクルードパスを指定というより、
そのソースを含むlibcocos2dxライブラリの登録が必要なのか

9.
通常の手順で作られたcocos2dx用のandroid-studioプロジェクトには、libcocos2dxモジュールがプロジェクトビューに表示されている。
これは、
GAME_DIR/cocos2d/cocos/platform/android/libcocos2dx
ディレクトリである。
これを追加してみる。

cocos2d-x-3.7で作ったことのあるcocos2d-xプロジェクトから、
GAME_DIR/cocos2d/cocos/platform/androidディレクトリをまるっと上書きコピー

その上で、libcocos2dxを追加する


…と、ここまで来て
プロジェクトにモジュールを追加できなかった(追加するとき、libcocos2dxをプロジェクトとして追加してしまったようだ)
プロジェクト構成がおかしくなり、プロジェクトやディレクトリそのものを削除して再作成しても治らなくなった




そこで、結局新しいディレクトリでcocosプロジェクトごと新たに作ることにした
$ cocos new PROJ_NAME -p PACKAGE_NAME -l cpp

元のproj.androidから、新しいproj.android-studioにコピーするもの
Classes/
Resources/
proj.android/AndroidManifest.xml
proj.android/jni/
proj.android/app/src/
proj.android/libs/


ここまでコピーしたら、一度コンパイルしてみる
$ cocos compile -p android --android-studio


また、androidStudioだと、c++のスタティックライブラリにstring系が含まれていないので、
その対応も行う
参考


その他にやること

各種ライブラリをコピー

Analyticsに関して、
app_tracker.xml
EasyTrackerをAnalyticsApplicationに変更
など

【2016/04/08 18:52 】 | cocos2d-x | 有り難いご意見(0)
| ホーム | 次ページ>>