How do you manage your downloaded content / Hot updates

Hello, this is a question targeted to cocos2d-x C++ developers (not creator or JS),
how do you guys implement the downloader / hot updates in your games.

personally, i use the network::Downloader(), i wrote my own class that fetches for updates.
and i put my content in zip file (around 16mb) . the drawback to this is that even if small files need a change, the whole archive needs to be redownloaded. and i also fear the the unzipping part may fail sometimes.
i also put the downloaded content in a path returned by getWriteablePath();

Please tell me if there are better practices to implement this type of functionnality.
I didn’t publish my app yet so any suggestions are welcome.
Thank you.

This is an idea that I have been putting into practice.
(Actually, it’s a bit more complicated.)

A simple example would be something like this.
save_path is the destination of the app side and is relative to the WritablePath.

  • contents.json
  "summary": {
    "total_bytes": 1343535
  "files": [
      "url": "",
      "save_path": "se/se001.mp3",
      "checksum": "e0c9035898dd52fc65c41454cec9c4d2611bfb37"
      "url": "",
      "save_path": "bgm/bgm001.mp3",
      "checksum": "4b0923254a538ff22f13d616afce20eff0823581"

This means having a list of files and checksums (SHA1) as JSON on the server side.
If a file exists locally and has a matching checksum, the Skip the download.

First, download this JSON from the server.

In order to pass the iOS review, you need to show the download consent dialog, so you can
The total size is shown to the user based on the information in the summary.
Once the user presses the consent button, the download will begin.

All that remains is to download the files in order according to this JSON.
If the file exists locally, the If the local checksum matches the checksum described in JSON, it will be skipped and the If it doesn’t match, we’ll download it.

I think cocos2d-x-test has this, cocos comes with an asset manager.

Here is an example link. its pretty simple to use