cocos2d-x 2.2.3 から 2.2.6 へのバージョンアップ


アップルにiOSアプリを申請するためにはアプリを64ビットにすることが必要です。
cocos2d-xの古いバージョンでは64ビットに対応していないので2.2.6に対応する必要があります。

ということで対応内容を記事にしました。



①cocos2d-x2.2.6を作業ディレクリに展開します。
私は展開したcocos2d-xの中にprojectsというプロジェクトフォルダを作って作業していますので、今回もその中にprojectsを作成しました。




②旧バージョンのプロジェクトを新バージョンのフォルダへコピーします。




③iOSの対応です。
③-①Xcodeのプロジェクトに64bit対応の設定をします。




③-②Xcodeでビルドするとリンクエラーが発生するのでエラーを修正します。

Undefined symbols for architecture i386:
  "cocostudio::timeline::TimelineActionData::create(int)", referenced from:
      cocos2d::extension::WidgetReader::setPropsFromJsonDictionary(cocos2d::ui::Widget*, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> > const&) in WidgetReader.o
  "cocos2d::extension::CocoLoader::ReadCocoBinBuff(char*)", referenced from:
      cocos2d::extension::CCDataReaderHelper::addDataFromBinaryCache(char const*, cocos2d::extension::_DataInfo*) in CCDataReaderHelper.o
      cocos2d::extension::CCComRender::serialize(void*) in CCComRender.o
      cocos2d::extension::GUIReader::widgetFromBinaryFile(char const*) in GUIReader.o
      cocos2d::extension::SceneReader::createNodeWithSceneFile(char const*, cocos2d::extension::AttachComponentType) in SceneReader.o
  "cocos2d::extension::CocoLoader::CocoLoader()", referenced from:
      cocos2d::extension::CCDataReaderHelper::addDataFromBinaryCache(char const*, cocos2d::extension::_DataInfo*) in CCDataReaderHelper.o
      cocos2d::extension::CCComRender::serialize(void*) in CCComRender.o
      cocos2d::extension::GUIReader::widgetFromBinaryFile(char const*) in GUIReader.o
      cocos2d::extension::SceneReader::createNodeWithSceneFile(char const*, cocos2d::extension::AttachComponentType) in SceneReader.o
  "cocos2d::extension::CocoLoader::~CocoLoader()", referenced from:
      cocos2d::extension::CCDataReaderHelper::addDataFromBinaryCache(char const*, cocos2d::extension::_DataInfo*) in CCDataReaderHelper.o
      cocos2d::extension::CCComRender::serialize(void*) in CCComRender.o
      cocos2d::extension::GUIReader::widgetFromBinaryFile(char const*) in GUIReader.o
      cocos2d::extension::SceneReader::createNodeWithSceneFile(char const*, cocos2d::extension::AttachComponentType) in SceneReader.o
  "cocos2d::extension::stExpCocoNode::GetChildNum()", referenced from:
      cocos2d::extension::LayoutReader::setPropsFromBinary(cocos2d::ui::Widget*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in LayoutReader.o
      cocos2d::extension::TriggerObj::serialize(cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in TriggerObj.o
      cocos2d::extension::LoadingBarReader::setPropsFromBinary(cocos2d::ui::Widget*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in LoadingBarReader.o
      cocos2d::extension::ActionManager::initWithBinary(char const*, cocos2d::CCObject*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in CCActionManager.o
      cocos2d::extension::ButtonReader::setPropsFromBinary(cocos2d::ui::Widget*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in ButtonReader.o
      cocos2d::extension::LabelAtlasReader::setPropsFromBinary(cocos2d::ui::Widget*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in LabelAtlasReader.o
      cocos2d::extension::ImageViewReader::setPropsFromBinary(cocos2d::ui::Widget*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in ImageViewReader.o
      ...
  "cocos2d::extension::stExpCocoNode::GetChildArray(cocos2d::extension::CocoLoader*)", referenced from:
      cocos2d::extension::LayoutReader::setPropsFromBinary(cocos2d::ui::Widget*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in LayoutReader.o
      cocos2d::extension::TriggerObj::serialize(cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in TriggerObj.o
      cocos2d::extension::LoadingBarReader::setPropsFromBinary(cocos2d::ui::Widget*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in LoadingBarReader.o
      cocos2d::extension::ActionManager::initWithBinary(char const*, cocos2d::CCObject*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in CCActionManager.o
      cocos2d::extension::ButtonReader::setPropsFromBinary(cocos2d::ui::Widget*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in ButtonReader.o
      cocos2d::extension::LabelAtlasReader::setPropsFromBinary(cocos2d::ui::Widget*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in LabelAtlasReader.o
      cocos2d::extension::ImageViewReader::setPropsFromBinary(cocos2d::ui::Widget*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in ImageViewReader.o
      ...
  "cocos2d::extension::stExpCocoNode::GetName(cocos2d::extension::CocoLoader*)", referenced from:
      cocos2d::extension::LayoutReader::setPropsFromBinary(cocos2d::ui::Widget*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in LayoutReader.o
      cocos2d::extension::TriggerObj::serialize(cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in TriggerObj.o
      cocos2d::extension::LoadingBarReader::setPropsFromBinary(cocos2d::ui::Widget*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in LoadingBarReader.o
      cocos2d::extension::ActionManager::initWithBinary(char const*, cocos2d::CCObject*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in CCActionManager.o
      cocos2d::extension::ButtonReader::setPropsFromBinary(cocos2d::ui::Widget*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in ButtonReader.o
      cocos2d::extension::LabelAtlasReader::setPropsFromBinary(cocos2d::ui::Widget*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in LabelAtlasReader.o
      cocos2d::extension::ImageViewReader::setPropsFromBinary(cocos2d::ui::Widget*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in ImageViewReader.o
      ...
  "cocos2d::extension::stExpCocoNode::GetType(cocos2d::extension::CocoLoader*)", referenced from:
      cocos2d::extension::TriggerMng::buildJson(rapidjson::GenericDocument<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> >&, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in TriggerMng.o
      cocos2d::extension::CCDataReaderHelper::addDataFromBinaryCache(char const*, cocos2d::extension::_DataInfo*) in CCDataReaderHelper.o
      cocos2d::extension::CCDataReaderHelper::decodeNode(cocos2d::extension::CCBaseData*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*, cocos2d::extension::_DataInfo*) in CCDataReaderHelper.o
      cocos2d::extension::CCComRender::serialize(void*) in CCComRender.o
      cocos2d::extension::GUIReader::widgetFromBinaryFile(char const*) in GUIReader.o
      cocos2d::extension::WidgetPropertiesReader0300::createWidgetFromBinary(cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*, char const*) in GUIReader.o
      cocos2d::extension::WidgetPropertiesReader0300::widgetFromBinary(cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in GUIReader.o
      ...
  "cocos2d::extension::stExpCocoNode::GetValue(cocos2d::extension::CocoLoader*)", referenced from:
      cocos2d::extension::LayoutReader::setPropsFromBinary(cocos2d::ui::Widget*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in LayoutReader.o
      cocos2d::extension::TriggerObj::serialize(cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in TriggerObj.o
      cocos2d::extension::LoadingBarReader::setPropsFromBinary(cocos2d::ui::Widget*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in LoadingBarReader.o
      cocos2d::extension::ButtonReader::setPropsFromBinary(cocos2d::ui::Widget*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in ButtonReader.o
      cocos2d::extension::LabelAtlasReader::setPropsFromBinary(cocos2d::ui::Widget*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in LabelAtlasReader.o
      cocos2d::extension::ImageViewReader::setPropsFromBinary(cocos2d::ui::Widget*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in ImageViewReader.o
      cocos2d::extension::ListViewReader::setPropsFromBinary(cocos2d::ui::Widget*, cocos2d::extension::CocoLoader*, cocos2d::extension::stExpCocoNode*) in ListViewReader.o
      ...
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)



cocos2d-xがバージョンアップしたときにファイルが追加されたため、エラーが発生しています。
ActionTimelineフォルダとCocoLoader.cpp/.hをプロジェクトに追加します。
これでXCodeはエラーがでなくなったと思います。




④androidの対応です。
Eclipseで設定したCOCOS2DXの値を2.2.6のパスに修正します。
画像では日本語化していますが、していない人は『環境設定 > General > Workspace > Linked Resources』から変更できます。

以上が対応内容です。
android はビルドを試してないですが、問題が出た場合は追記します。