Thursday, October 29, 2015

[UNITY] Vấn đề về dung lượng file build iOS

Như mọi người biết thì apple giới hạn dung lượng tối đa có thể download game/app từ apple store bằng Cellular (3G/4G/LTE) là 100MB. Nếu Unity để phát triển game thì dung lượng của game quả là 1 vấn đề không hề nhỏ, nhất là với game social. Dung lượng quá lớn vượt quá 100MB, user sẽ phải dùng đến wifi để có thể download được game của bạn. Điều đó sẽ làm giảm lượng download game của bạn.

Có nhiều cách để có thể giảm dung lượng của game. Nhưng với những game social, resource (ảnh, audio) rất lớn, việc tối ưu hoá file dưới 100MB là điều bất khả thi. Unity có hỗ trợ Assetbundle để giải quyết vấn đề này. Developer có thể đưa 1 phần resource lên server và user có thể tải phần đó sau khi mở game.

Quay trở lại vấn đề về dung lượng file. Vậy cho bao nhiều resource lên server để download sau khi user mở game là đủ? Nếu lạm dụng Assetbundle nhiều quá sẽ làm cho lượng resource phải tải về từ server của mình là khá lớn. Server sẽ chịu tải nhiều. Thường thì chúng ta sẽ cố gắng để cân bằng 2 điều đó là dung lượng file dưới 100MB và lượng resource download bằng Assetbundle không quá lớn.

Sau khi build làm thế nào để tính được dung lượng file ipa?
Mình giới thiệu 1 cách hiện giờ mình vẫn đang áp dụng cho game của mình.

Đầu tiên bạn build file ipa (release version). Ví dụ là `mygame.ipa`

Dùng Terminal gõ lệnh: ls -la {đường đẫn đến file}

vd: ls -la mygame.ipa

Kết quả sẽ hiện:

-rw-r--r--+ 1 guest-user  staff  62113983 10 29 11:24 mygame.ipa

Tiếp tục bạn gõ: unzip {đường đẫn đến file}

vd: unzip mygame.ipa
Lúc này file ipa sẽ được unzip.

Unzip xong bạn sẽ thấy file {app-bundle}.app trong thư mục Payload vừa được unzip
Tiếp theo gõ : otool -l Payload/{app-bundle}.app/{app-bundle} | grep cryptsize

vd: otool -l Payload/my-game.app/my-game | grep cryptsize

Kết quả:
    cryptsize 29884416
    cryptsize 34668544

Tính tổng:

62113983 + 29884416 + 34668544 = 126,666,943 bytes

File ipa có size ~ 100MB sau khi up lên apple store theo tính toán như ở trên có kết quả là 125,687,674 bytes

Dựa vào so sánh giữa 2 kết quả này ta thấy file mygame.ipa dung lượng đã vượt qua 100MB

126,666,943 - 125,687,674 = 979,269 ~ 0.93MB

Chúng ta sẽ phải đưa bớt resource thành Assetbundle hoặc tối ưu lại chúng.

Mong là bài viết này hữu ích cho các bạn.