I've been working on the next step in Cocos2D-ObjC lately and I think it's time to present you, what I've achieved so far and here it goes: Cocos2D 3.5 RC.
It's been a minute since 3.4.9 was released and a lot of things changed and happened. Cocos2D-objc community shrunk so much, most of developers gone to -x or even Unity. Apportable bankrupted, everyone related to them ran away, including @slembcke. v4 is never going to happen since nobody has enough resources to support it and also develop SB to support v4. Android Plugins are disappeared with Apportable, so cross-platform for -objc is over, forever. Nobody will ever hustle with that, even if somebody will reimplement it. It is too hacky. Everyone wants Swift now. Swift is the future for sure.
But what should we do? Abondon 3.4.9 completely? I don't think so. A lot of developers still developing for iOS exclusively. -ObjC is a very good 2D package, maybe even better than SpriteKit, not touch that it is open-sourced and very customizable. I personally use cocos2d not only for games. Also, -objc is fully Swift-enabled.
Since 3.5 Cocos2D is going to change ideology a bit. First of all, Android support is gone. It happened due to Apportable company bankraptcy, they were providing the UIKit implementation for Android, but it broken since XCode 7.2. Android support is unlikely to be back. Now Cocos2D is fully Apple-oriented with rich Metal support and other cool features that are available only on Apple platform.
Cocos2D is now splitted into core, -ext and -ui modules. Cocos2D-ObjC is no more a monster which contains many dependencies and can't be integrated and used easily. Now cocos2d can be a drop-in solution, you just need to add folders to your project - that's it. It makes it very easy to create CocoaPods or Carthage integration.
ObjectAL is no more a part of an engine. First of all due to ideology changes, secondly due to Apple marked it as deprecated since iOS 9, and since Cocos2D-ObjC is Apple oriented, many people will want to use AV* classes for sound purposes, so we should not ship ObjectAL in one bundle with Cocos2D. But it is still available if you really want to use it. You will need to integrate ObjectAL itself and then add extension for it from -ext.
SpriteBuilder is not included by default anymore. It is still supported, but an option since 3.5.
Chipmunk is an option too. First of all: not every cocos2d game uses physics. Secondly: even if the game uses physics, a lot people prefer Box2D over Chipmunk, so it makes no sense to ship it by default with cocos2d, it is now an extension.
Unfortunately, due to existing architechture, a lot of extension support is done via conditional compilation, so you will have to trigger that in ccConfig. Nothing else we can do about it.
Also, all releases will be incremental now. Unfortunately, there will be no v4 for now. Even if backwards compatibility will broke it will be a matter of changing a few lines in code. Backwards compatibility are guaranteed for now, either with existing project and SpriteBuilder, and yes, 3.5 is fully SB integrated.
Full changelog for 3.5:
- Hacky templates are gone, official installer is introduced.
- Cocos2D is now running on native resolutions on all devices.
- XIB Launch screen are used by default.
- All android-relative and caused-by-android code is gone.
- Swift projects are now fully in Swift, including AppDelegate.
- Image assets support (enables user to load images with native content scale and also makes your app really small in size due to App Thinning technology).
- 3D Touch support.
- App thinning support.
- CCTouch are gone, touch dispatching is gone too, so perfomance on this is much better. Native touches are now used instead.
- CCTransition are now meant to be overriden. Creating custom trunstions is easy as ever. Small refactoring required - Rename CCTransition to CCDefaultTransition everywhere.
- ObjectAL is not shipped in bundle with Cocos2D anymore, because it is marked as deprecated by Apple. You are free to choose now, which sound engine you prefer.
- Chipmunk physics is an option now. There are still a lot of love paid for Box2D. You are not forced to use particular physics engine anymore. Chipmunk is still available and integrated, but served as extension.
- CCLayoutBox takes transformations into account.
- Mac compilation out-of-the-box is back.
- TVOS support introduced.
- Metal rendering back and is now working.
- All tile map code is now an extension. There are a lot of better frameworks which can be used instead of cocos2d native tilemap code.
- CCScrollView sends delegate messages while animating too.
- A lot of nodes now moved to extension. Such as CCParallaxNode, CCPackages, CCParticles, CCClippingNode, CCMotionStreak etc.
- Cocos2D can be now used as a drop-in solution, no more husling with XCode subprojects etc.
- Start-up code is reconsidireted. Unfortunately, we still have to use CCAppDelegate, but it will be gone in next release.
startScene method is gone. Why? Because now you can stack scenes in the start-up, this allowing you, for example, launch a level from 3D touch shortcut with a stack level of two, and put
MainScene into stack level 1. This won't break your app in any way, allowing all of buttons like "Home", "Back" etc working without any new code.
- CCEffects are now served as extension.
- SSZipArchive dependency is gone in default bundle.
- SpriteBuilder is an option now. If you don't want to use it, there will be no related files.
- CCTableView is improved.
- New control is introduced in -ui: CCPotentioMeter.
- Repo is generally cleaned.
- Bug fixed for Siri dictation.
- CCWarnings are fixed.
- CCRenderTexture shader is now forwarded to sprite.
- Most of the private headerss in core cocos2d are now merged with public ones. It is done due to maintaing cocos2d reputation as a very customizable engine.
Currently default branch in github repo is still 3.4.9, but I hope @birkemose will allow me to make 3.5 the default one. 3.5 is currently sit in develop-v3.5 branch. I didn't have time to port cocos2d-tests to modern cocos2d ideology, but most of them are available to run. I will port cocos2d-tests application soon. So if you want to try 3.5 out you should download official installer, and create a start-up project with the config you need.