本文发自 http://www.binss.me/blog/way-to-develop-ios-sdk-for-cocos2dx-games/,转载请注明出处。
由于实训课要求制作SDK并接入到cocos2dx的游戏中,在很开心地用storyboard拖拖拖实现了注册与登录等功能后,发现不知道怎么将其编译并接入到cocos2dx。在研究了一天后,终于成功接入到游戏中。在此总结流程。
-
完成代码逻辑
使用storyboard拖拖拖,然后把对应的controller写完。
-
创建bundle
打开
File->New->Target
,从OSX的framework选择框中选择Bundle。在这里我将Bundle为UserManageResources。在Build Settings中:搜索base SDK,选中并按下delete键,将OSX转为IOS。搜索product name,将${TARGET_NAME}替换为静态库的名字。如UserManageSDK。
默认情况下,有两种resolutions的图片可以产生一些有趣的现象。例如,当你导入一个retina@2x版本的图片时,普通版的和Retina版的将会合并成一个多resolution的TIFF(标签图像文件格式,Tagged Image File Format)。这不是一件好事。搜索hidpi将COMBINE_HIDPI_IMAGES设置为NO。
对每个需要添加到bundle的资源文件,在target membership中给bundle的target(UserManageResources)打勾
-
创建静态库
打开
File->New->Target
,选择Cocoa Touch Static Library。在Build Phases中:
Target Dependencies中添加UserManageResources。
Copy File中添加所有需要包含的头文件(.h)。
Compile Sources中添加被包含头文件的实现文件(.m)。
-
编译
command+b编译,编译成功后,可以在
/Users/用户名/Library/Developer/Xcode/DerivedData/project名称/Build/Products/Debug-iphonesimulator
里找到静态库文件,bundle文件和头文件。复制这三个文件到要使用它们的工程目录下放好。
-
使用
将刚刚的三个文件拉入工程目录下
检查target:
-
General中Linked Frameworks and Libraries中是否有静态库
-
Build Phases中Copy Bundle Resources中是否有bundle
-
是否已将SDK依赖的Linked Frameworks and libraries都添加进来
检查后即可使用静态库,如果在使用静态文件(xib, storyboard)时报类似的错误:
Unknown class XXX in Interface Builder file
选择target的Build Settings,搜索Other Linker Flags(
Target->Build Settings->Linking->Other Linker Flags
)添加-force_load $(SRCROOT)/UserManageSDK/libUserManageSDK.a
(修改为导入 sdk 到工程的路径)如果是纯Objc,可以将Other Linker Flags设置为
-ObjC
,或者-all_load -ObjC
如果依然不行,可以通过手动调用类函数来发现类:
#import "XXX.h" [XXX class];
使用静态库的storyboard示例代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. NSBundle *myBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"UserManageSDK" ofType:@"bundle"]]; UIStoryboard* mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:myBundle]; self.window.rootViewController = [mainStoryboard instantiateInitialViewController]; [self.window makeKeyAndVisible]; return YES; }
这种接入方法的思路是通过直接加载SDK中的storyboard,从而实现为cocos2dx游戏添加了UIKit界面,并且界面背后的控制逻辑被完全隐藏(无API)。
为了偷懒地进行数据交互,在cocos2dx的AppController中加入观察者,用于SDK回调。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(startGameCallBack:) name:@"StartGame" object:nil];
比如说接收SDK传来的用户名:
-
最后附上作业代码: