背景
6月1日からiosのアプリはIPv6対応必須になっていたらしく
先日、Appleにアプリを申請したらリジェクトされたので対応した
[参考]
http://www.bengigi.com/cocos2d-x-2-x-android-libpng-vulnerability-fix/
https://github.com/cocos2d/cocos2d-x/pull/15666
参考サイトはcocosv3系だったので2系でやったことをメモとして残しておく
やったこと
まず、ここから必要なライブラリをzipでダウンロードしてくる
https://github.com/cocos2d/cocos2d-x-3rd-party-libs-bin/releases/tag/v2-deps-6
差し替えるのは以下
cocos2dx/platform/third_party/ios/curl/*.h
cocos2dx/platform/third_party/ios/libraries/libwebp.a//差し替え
cocos2dx/platform/third_party/ios/libraries/libcurl.a//差し替え
cocos2dx/platform/third_party/ios/libraries/libcrypto.a//追加
cocos2dx/platform/third_party/ios/libraries/libssl.a//追加
external/libwebsockets/ios/include/libwebsockets.h
external/libwebsockets/ios/include/lws_config.h
external/libwebsockets/ios/lib/libwebsockets.a
以下はzipの中には含まれていないので、ファイルの中を書き換える
extensions/network/WebSocket.h
extensions/network/WebSocket.cpp
-のところを+のコードに書き換える
見にくくて申し訳ないorz
- int onSocketCallback(struct libwebsocket_context *ctx,
- struct libwebsocket *wsi,
- enum libwebsocket_callback_reasons reason,
+ int onSocketCallback(struct lws *wsi,
+ enum lws_callback_reasons reason,
- struct libwebsocket* _wsInstance;
- struct libwebsocket_context* _wsContext;
+ struct lws* _wsInstance;
+ struct lws_context* _wsContext;
- struct libwebsocket_protocols* _wsProtocols;
+ struct lws_protocols* _wsProtocols;
- static int onSocketCallback(struct libwebsocket_context *ctx,
- struct libwebsocket *wsi,
- enum libwebsocket_callback_reasons reason,
+ static int onSocketCallback(struct lws *wsi,
+ enum lws_callback_reasons reason,
- WebSocket* wsInstance = (WebSocket*)libwebsocket_context_user(ctx);
+ lws_context* context = lws_get_context(wsi);
+ WebSocket* wsInstance = (WebSocket*)lws_context_user(context);
- return wsInstance->onSocketCallback(ctx, wsi, reason, user, in, len);
+ return wsInstance->onSocketCallback(wsi, reason, user, in, len);
- _wsProtocols = new libwebsocket_protocols[protocolCount+1];
- memset(_wsProtocols, 0, sizeof(libwebsocket_protocols)*(protocolCount+1));
+ _wsProtocols = new lws_protocols[protocolCount+1];
+ memset(_wsProtocols, 0, sizeof(lws_protocols)*(protocolCount+1));
- libwebsocket_context_destroy(_wsContext);
+ lws_context_destroy(_wsContext);
- libwebsocket_service(_wsContext, 0);
+ lws_service(_wsContext, 0);
- info.extensions = libwebsocket_get_internal_extensions();
+ info.extensions = lws_get_internal_extensions();
- _wsContext = libwebsocket_create_context(&info);
+ _wsContext = lws_create_context(&info);
- _wsInstance = libwebsocket_client_connect(_wsContext, _host.c_str(), _port, _SSLConnection,
+ _wsInstance = lws_client_connect(_wsContext, _host.c_str(), _port, _SSLConnection,
-int WebSocket::onSocketCallback(struct libwebsocket_context *ctx,
- struct libwebsocket *wsi,
- enum libwebsocket_callback_reasons reason,
+int WebSocket::onSocketCallback(struct lws *wsi,
+ enum lws_callback_reasons reason,
-int WebSocket::onSocketCallback(struct libwebsocket_context *ctx,
- struct libwebsocket *wsi,
- enum libwebsocket_callback_reasons reason,
+int WebSocket::onSocketCallback(struct lws *wsi,
+ enum lws_callback_reasons reason,
- libwebsocket_callback_on_writable(ctx, wsi);
+ lws_callback_on_writable(wsi);
- enum libwebsocket_write_protocol writeProtocol;
+ enum lws_write_protocol writeProtocol;
- bytesWrite = libwebsocket_write(wsi, &buf[LWS_SEND_BUFFER_PRE_PADDING], data->len, writeProtocol);
+ bytesWrite = lws_write(wsi, &buf[LWS_SEND_BUFFER_PRE_PADDING], data->len, writeProtocol);
- libwebsocket_callback_on_writable(ctx, wsi);
+ lws_callback_on_writable(wsi);
WebSocketのクラスは大体が参考してるサイトの通り
"libwebsocket"から"lws"への文字列置換と、
onSocketCallbackのインターフェイス修正をすればOK
差し替えが終わったら、Xcodeのバージョンとか設定する画面(General)の
Linked frameworks and Librariesにlibcrypto.aとかlibssl.aを追加する
リンクエラーがでたらここら辺が足りてない可能性あり
感想
最初はgitからcocos2dxを丸ごとcloneしてきたけど、
時間長かったしチェックアウトとかしてめんどくさかったので、
必要な部分だけまとめてみた