ページへ戻る

− Links

 印刷 

cocos2d-x​/ver2系iOSでIPv6環境でcrashしたとしてリジェクト :: NJF Wiki

xpwiki:cocos2d-x/ver2系iOSでIPv6環境でcrashしたとしてリジェクト

ページ内コンテンツ
  • 始めに
  • リジェクト
    • 一度目
    • 二度目
  • 最後の手段

始めに anchor.png[1] Edit [2]

2018年5月頃にcocos2d-xのver2.6系のアプリをApp Storeでアップデートしようとしたら、

Your app continued to crash on iPad running iOS 11.3.1 connected to an IPv6 network when we tapped the 新規ゲーム button.

と言われてリジェクトされました。

その時の顛末を記しておきます。

Page Top

リジェクト anchor.png[3] Edit [4]

Page Top

一度目 anchor.png[5] Edit [6]

最初にアップデートしようとしたとき、IPv6に対応していないと行けないということはすでに知っていたので、curlなど必要なライブラリはアップデート済みでした。にもかかわらずクラッシュレポートが送られてきました。また、以下のページを参考にIPv6で接続しても、特にクラッシュすることもありませんでした。

IPv6 DNS64/NAT64ネットワークのサポート[7]

おかしいなと思いつつライブラリの入れ替えなどを行ってもう一度サブミットしました。

Page Top

二度目 anchor.png[8] Edit [9]

二度目のバイナリも再びリジェクトされました。しかも、クラッシュレポートを見る限り全く同じ場所(curl_easy_cleanup)でした。 テストしてもやはり特に問題なく、どうしたものかと思いましたが、とりあえずcurlのバージョンを変えてバイナリ登録しました。

しかし、これもクラッシュしてリジェクトされました。クラッシュした場所は変わらずcurl_easy_cleanupでした。

Page Top

最後の手段 anchor.png[10] Edit [11]

こちらでテストしても問題なく、もうどうしようもなさそうなので、最後の手段としてcurlを使わずにhttps通信を行う事にしました。

つまり、iOSネイティブのobjective-cでhttps通信する関数を書いて、それを呼び出すことにしました。 以下のような関数を定義して、cocos2dxの中から呼び出しました。

- (void)get: (NSString *)urlString{
    NSURL *url = [NSURL URLWithString:urlString];
   NSURLRequest *request = [NSURLRequest requestWithURL:url];
   NSOperationQueue *queue = [NSOperationQueue new];
   [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *res, NSData *data, NSError *error) {
       if( error ){
           NSLog(@"HttpGetError");
       } else {
           NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
           NSLog(@"get data %@", responseString);
       }
   }];}

幸い、httpsのgetメソッドしか使っておらず、objective-cのコードとcocos2d-xとの間を簡単にやり取りできるようにするEasyNDKというライブラリを使っていたので、半日ぐらいで修正できました。

これでなんとかApp Storeの審査を通りました。

Android側と別コードになるので、良い方法かどうかは微妙ですが、最後の手段として使えます。

curlについてはIPv6対応やssl対応、Androidでの脆弱性などいろいろ苦しめられてきたので、今後も似たような問題が起こるリスクを考えると、それほど悪いやり方ではないかも知れません。


Last-modified: 2018-05-29 (火) 20:42:04 (JST) (2159d) by njf