前言
最近我们在提交新加坡版本,但是被苹果给拒绝了,理由是我们没有采用最新的xcode和sdk编译。由于萌仙的cocos2d-x引擎版本是2.2.3,不支持64-bit,所以需要在一些地方做修改以支持64-bit。
libcurl
curlbuild.h中CURL_SIZEOF_LONG
长度问题,64-bit与32-bit下指针长度不同,修改如下:
#ifdef __LP64__
#define CURL_SIZEOF_LONG 8
#else
#define CURL_SIZEOF_LONG 4
#endif
然后替换cocos2d-x 3.x版本中的libcurl.a文件。当然,针对libcurl还有另外一种修改方式,在这里下载最新的libcurl for apple ios,将cocos2d-x中cocos2dx\cocos2dx\platform\third_party\ios\curl的所有头文件替换掉,把libraries里的libcurl.a也替换成最新的即可。
libwebp
关于webp的支持比较简单,下载最新版本3.x版本的cocos2d-x,将3.x版本中的libwebp.a替换原libraries目录下的libwebp.a文件即可。
cocos-kazmath
这个库在cocos中有广泛的应用,但是此库在官方版本中暂时还没有绝对支持64-bit的版本,但是可以手动修改之。
//neon_matrix_impl.c 文件
//#if defined(__ARM_NEON__)
#if defined(_ARM_ARCH_7)
//mat4.c 文件
//#if defined(__ARM_NEON__)
#if defined(_ARM_ARCH_7)
这个kazmath数学库大致就只修改这个地方即可。
GLView
在上面的修改完成后,基本上可以支持64-bit了,但是cocos2dx\cocos2dx\platform\ios\EAGLView.mm此文件编译不通过。原因是64-bit下,不允许将一个指针地址强制转换为int,所以我们可以将之改成long:
//ids[i] = (int)touch;
ids[i] = (long)touch;
把这个文件里报错的地方都需要这么修改。报错信息:
"Cast from pointer to smaller type 'int' loses information"
其实就是一个强制转换指针类型的报错。
wax
由于我们使用了wax这个库搭建Lua与OC的桥梁,但是wax本身是不支持arm64的,官方没有出最新支持64-bit的版本,所以只得在github上找到了民间支持arm64的版本,重新编译即可。支持arm64版本的wax可以在这里下载到。
Xcode
这里先说明一下几个build setting:
- Architectures:要Xcode编译的目标设备所支持的指令集列表。
- Valid Architectures:对应的cpu指令集,有armv7,armv7s,arm64。
- Build Active Architecture Only:如果这个属性设置true的话,它只编译Architectures所选择的版本,在Debug阶段会加快编译速度,否则它将编译所有指令集版本:armv6,armv7,armv7s,armv64,设置为no带来的影响就是增加ipa的大小,因为要支持所有的指令集平台。
一旦工程要支持64-bit,就意味着所有用到的第三方库都必须是同样的build-setting,即Architectures设置为armv7,arm64,Valid Architectures设置为armv7,arm64。
以上所有配置和修改都基于 Xcode 6.1。