12/08/2018, 09:28
8 điểm nhất định cần lưu ý khi lập trình iOS
1. Response được cache Cho dù sử dụng NSURLConnection hay AFNetworking thì response đều được cache dựa vào setting. Phải trả về đúng response code của http. Phải xem xét cẩn thận setting cache của image hay json được response từ server. Đặc biệt phải kiểm tra kỹ setting liên quan đến ...
1. Response được cache
- Cho dù sử dụng NSURLConnection hay AFNetworking thì response đều được cache dựa vào setting.
- Phải trả về đúng response code của http.
- Phải xem xét cẩn thận setting cache của image hay json được response từ server.
- Đặc biệt phải kiểm tra kỹ setting liên quan đến error page & maintenance page không thường xuyên được trả về.
2. Version control
- Sử dụng các version thấp không được support thì khi cài đặt sẽ thất bại.
- Thay vì setting từ 7.0 trở lên, lại setting từ 7.1 trở lên thì nếu install ở 7.1 sẽ thất bại đến 30%.
- Trong trường hợp đang sử dụng cocoapod, cần kiểm tra xem có sự khác nhau giữa project version và version đang ghi trong Podfile không.
- Lưu ý với 7.0.2 thì có 1 số vấn đề như vỡ view chả hạn.
3. Setting iOS bị sai
Setting calendar sai
- Bên cạnh Gregorian Calendar còn có Japanese Calendar và Buddhist Calendar.
- Nếu lưu ngày tháng dưới dạng NSDate thì sẽ không gặp vấn đề, tuy nhiên khi format sang dạng string để hiển thị hay khi làm việc với web server chả hạn thì sẽ phát sinh vấn đề.
- Japanese Calendar output ra Bình Thành năm 26 thay cho năm 2014.
- Buddhist Calendar output ra Phật Lịch năm 2557 thay cho năm 2014.
Xử lý split keyboard
- iPad hỗ trợ chức năng split keyboard.
- Cần lưu ý các vấn đề khác biệt so với các keyboard khác (ví dụ như notification timing).
4. Những bugs khó để ý
Các view được set bằng sharedInstance và viewDidLoad sẽ gặp vấn đề
- Trong trường hợp sử dụng sharedInstance để gửi nhận dữ liệu thì có thể phát sinh vấn đề sử dụng data cũ để xử lý.
- Ví dụ như gởi message đến A thì lại bị gửi đến B.
- Cần lưu ý thiết kế tránh việc xuất hiện bug khi gửi nhận dữ liệu. Do đó cần tránh sử dụng sharedInstance để gửi nhận dữ liệu. Tuyệt đối cũng không sử dụng notification.
- Hãy tham khảo Communication Pattern ở link sau: http://www.objc.io/issue-7/communication-patterns.html
5. Những abnormal cases dễ gây crash
Có nil trong NSDictonary và NSNumber
- Thỉnh thoảng có case xuất hiện nil khi giải phóng biến số trong block.
- Cần chú ý property của view.
- Cần xác định và viết test sẵn liên quan đến việc dữ liệu từ server có bắt buộc phải có không, nếu không có thì có hoạt động được không.
Thỉnh thoảng KVO bị lỗi
- Nếu không chú ý sẽ rất dễ bị crash.
- Khuyến khích sử dụng KVOController của Facebook: https://github.com/facebook/KVOController
Thao tác khi đang kết nối network
- Chuyển sang view khác.
- Chú ý nếu việc run một action khác.
Test cho new user
- Những vấn đề phụ thuộc vào dữ liệu là khó nhận thấy nhất.
- Nên test tất cả các cases có thể thì tốt (ví dụ như tất cả các lựa chọn của user).
Nên sử dụng Crashlytics
6. Những điểm khiến việc hiển thị trở nên kỳ cục
Vị trí phía trên ScrollView
- Dễ phát sinh vấn đề do version.
- Dễ phát sinh vấn đề khi sắp xếp nhiều items ở đó.
Test khi data là 0 record
- Phát sinh vấn đề không hiển thị bất cứ gì cả.
- Trong quá trình phát triển thì khó để ý đến lỗi này.
Tái sử dụng cell
- Tái sử dụng cell trong tableView & collectionView.
- Ngay cả khi không có data thì cũng gán lại là không có data.
- Rất hay gặp trường hợp tái sử dụng cell đang thực hiện load ảnh.
7. Phương pháp khởi động app
Mở từ notification
- Khi mở từ notification thì có 2 trường hợp: chưa chạy app và đang chạy app.
- Rất dễ quên các case như đang chạy app và đang mở modal view thì mở notification.
- Cần chú ý việc user chưa login mà access từ notification.
- Có cả trường hợp notification khi đang khởi động app.
Mở từ url schema
- Liệu có xuất hiện bug về mặt security không ?
- Thiết kế sao cho đối với API thì bất cứ dữ liệu bình thường nào đến cũng ko gặp vấn đề gì.
Mở từ background fetch
- Khác life cycle
8. iPhone device
- Có cả những vấn đề phụ thuộc vào device nên tốt nhất hãy test trên từng device một.
Source: iOS開発する上で絶対に押さえておく8つの項目