ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
-o0o-
BÁO CÁO THỰC TẬP
LẬP TRÌNH ỨNG DỤNG TRÊN NỀN TẢNG iOS
Cơng ty thực tập
: STYL Solutions Pte. Ltd
Người phụ trách
: Nguyễn Văn Trung
Thực tập sinh
: Phạm Thị Hồng Mai
HỒ CHÍ MINH – tháng 07 năm 2020
LỜI MỞ ĐẦU
Ngày nay, điện thoại thông minh ngày càng phát triển và trở nên phổ biến,
kéo theo đó là sự phát triển thần tốc của những ứng dụng trên di động. Theo
thông tin đến từ công ty nghiên cứu thị trường Annie, đến năm 2022, người tiêu
dùng sẽ chi khoảng 157 tỉ USD cho các ứng dụng hàng năm. Con số đó đang
khẳng định rằng ngành cơng nghiệp ứng dụng di động là một bộ phận không thể
thiếu của ngành cơng nghiệp phần mềm.
Khơng nằm ngồi cuộc chơi, Việt Nam cũng đang tích cực nỗ lực và phát
triển ngành công nghiệp ứng dụng di động phát triển mạnh mẽ, để hịa nhập với
những cơng ty hàng đầu về lập trình ứng dụng trên thế giới.
Lĩnh vực lập trình ứng dụng di động phát triển bắt kịp xu hướng phát triển
chung, đáp ứng tốt nhu cầu, đòi hỏi thực tế của con người. Vì thế em quyết đinh
lựa chọn lập trình ứng dụng trên điện thoại, cụ thể là trên nền tảng iOS để tìm
hiểu và định hướng cho việc học cũng như nghề nghiệp sau này.
Sau quá trình học tập, lĩnh hội được nhiều kiến thức nền tảng bổ ích từ
thầy cơ, để có thể ứng dụng vào thực tế, tích lũy kinh nghiệm cho bản thân. Em
đã lựa chọn STYL Solutions Pte. Ltd để có thể vận dụng những kiến thức đã học
được vào thực tế và làm quen với một môi trường làm việc chuyên nghiệp.
LỜI CẢM ƠN
Trân trọng gửi lời cảm ơn STYL Solutions Pte. Ltd đã tạo điều kiện cho
em có cơ hội được thực tập tại công ty.
Chỉ trong một thời gian ngắn, nhưng nhờ sự chỉ dẫn nhiệt tình của anh Ân
(Leader) và anh Trung (Mentor), em đã tiếp thu được những kiến thức quan trọng
và nhiều kinh nghiệm quý báu để có thể làm được một ứng dụng di dộng. Chân
thành cảm ơn anh Ân, anh Trung và các anh chị trong nhóm Mobile đã bỏ ra
nhiều thời gian, cơng sức và giúp đỡ em hoàn thành đợt thực tập này.
Đặc biệt cảm ơn và lòng biết ơn sâu sắc tới anh Nguyễn Văn Trung, đã
training iOS, hướng dẫn, giúp đỡ cho em tận tình, cả những khó khăn trong cơng
việc, đến những khó khăn việc làm quen với mơi trường mới cũng như trong việc
tiếp cận các kiến thức cơng nghệ, các kỹ năng về tư duy lập trình và tư duy sản
phẩm để có thể làm ra một sản phẩm trong thời gian qua.
Em cũng xin cảm ơn thầy cơ trong khoa Cơng nghệ phần mềm đã nhiệt
tình hỗ trợ, tạo điều kiện em làm bài báo cáo này.
Phạm Thị Hồng Mai
Hồ Chí Minh, ngày 29 tháng 07 năm 2020
NHẬN XÉT
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
MỤC LỤC
Chương 1
GIỚI THIỆU CÔNG TY THỰC TẬP........................................................ 1
1.1
Giới thiệu STYL Solutions Pte. Ltd ....................................................................... 1
1.2
Sản phẩm của công ty ........................................................................................ 1
1.3
Lịch làm việc khi thực tập tại công ty .................................................................. 5
Chương 2
NỘI DUNG THỰC TẬP ....................................................................... 6
2.1
Tìm hiểu cơng ty và các kỹ năng cơ bản trong công ty.......................................... 6
2.2
Nghiên cứu kỹ thuật........................................................................................... 6
2.2.1
Các công cụ làm việc ......................................................................................... 6
2.2.2
Git/ Git flow ....................................................................................................... 7
2.2.3
Coding Convention ............................................................................................ 7
2.3
Thực hiện dự án............................................................................................... 13
2.4
Lịch làm việc .................................................................................................... 13
Chương 3
CHI TIẾT PROJECT ........................................................................... 15
3.1
Giới thiệu về ứng dụng .................................................................................... 15
3.2
Thực hiện ........................................................................................................ 15
3.2.1
Màn hình Login ................................................................................................ 16
3.2.2
Màn hình Home............................................................................................... 17
3.2.3
Màn hình Edit Profile Picture .......................................................................... 18
3.2.4
Màn hình Food List .......................................................................................... 20
3.2.5
Màn hình Ratings ............................................................................................ 21
3.2.6
Màn hình Settings ........................................................................................... 22
3.2.7
Màn hình Rate Food ........................................................................................ 23
3.2.8
Màn hình Sign out ........................................................................................... 24
3.2.9
Các màn hình phụ............................................................................................ 24
Chương 4
KẾT QUẢ ĐẠT ĐƯỢC....................................................................... 26
Chương 5
TÀI LIỆU THAM KHẢO ..................................................................... 27
MỤC LỤC ẢNH
Hình 1.1 Logo cơng ty STYL Solutions Pte. Ltd ..................................... 1
Hình 1.2 Maui-Dolphin 2 (MD2) ............................................................. 2
Hình 1.3 Maui-Dolphin 2 (MD2) ............................................................. 2
Hình 1.4 BLUEFIN 2 LITE ..................................................................... 3
Hình 1.5 YELLOWFIN TRANSIT .......................................................... 3
Hình 1.6 021 READER with LED ........................................................... 4
Hình 1.7 Swordfish 2 Mini ....................................................................... 4
Hình 1.8 Kiosk ......................................................................................... 5
CHƯƠNG 1
1.1
GIỚI THIỆU CÔNG TY THỰC TẬP
Giới thiệu STYL Solutions Pte. Ltd
Hình 1.1 Logo cơng ty STYL Solutions Pte. Ltd
STYL Solutions được thành lập vào năm 2008 với 3 thành viên. Hiện nay
cơng ty đã có hơn 80 nhân viên, mở rộng chi nhánh tại Singapore, Việt Nam với
các đại diện và đối tác trên khắp Châu Á.
Tầm nhìn: Simplifying Technologies for Your Lifestyle.
Sứ mạng: Đưa FINTECH IoT vào ứng dụng trong cuộc sống hàng ngày,
tạo ra môi trường thông minh và hiệu quả giúp nâng cao chất lượng cuộc sống
cho tất cả mọi người.
Mảng tập trung phát triển: Tạo các giải pháp với thanh tốn và cơng
nghệ IoT giúp cuộc sống của tất cả mọi người tốt hơn.
1.2
Sản phẩm của công ty
Sản phẩm của công ty hiện được chia thành 4 nhóm chính:
− Sản phẩm đeo:
o Thiết bị đeo hỗ trợ thanh tốn khơng tiếp xúc trong khi phục vụ như
một thiết bị an toàn và sức khỏe cho trẻ em, thanh thiếu niên, người
lớn và người già. Tất cả các thiết bị đeo đều hoạt động với ứng dụng
di động DELPHINUS được xây dựng bởi STYL.
o Sản phẩm: Maui-Dolphin 4 (MD4), Maui-Dolphin 2 (MD2)
1
Hình 1.2 Maui-Dolphin 2 (MD2)
Hình 1.3 Maui-Dolphin 2 (MD2)
− Máy đọc:
o Thiết bị IoT thanh toán chéo thị trường:
▪ Các thiết bị thanh toán IoT được STYL thiết kế và phát triển
nội bộ, tỉ mỉ. Máy đọc hỗ trợ thanh tốn EMV khơng tiếp xúc
nhờ vào tính linh hoạt của mã QR và thanh toán Bluetooth.
▪ Sản phẩm: BLUEFIN 2 LITE, YELLOWFIN TRANSIT
COMBO, TRANSIT READER, ORCA NFC.
2
Hình 1.4 BLUEFIN 2 LITE
Hình 1.5 YELLOWFIN TRANSIT
o Đầu đọc thẻ linh hoạt:
▪ Đầu đọc máy tính để bàn được hỗ trợ USB với hiệu suất đọc
tuyệt vời để phù hợp với các ứng dụng đọc thẻ (NFC / RFID).
▪ Sản phẩm: HMU108, 021 READER with LED
3
Hình 1.6 021 READER with LED
− Self-service:
o Thiết bị thanh toán IoT:
▪ Giải pháp thanh toán, giám sát và phân tích cho ứng dụng bán
hàng tự động và tự phục vụ
▪ Sản phẩm: Bluefin 2, Swordfish 2 Mini, Bluefin VM
Hình 1.7 Swordfish 2 Mini
o Kiosk dịch vụ tự động:
4
▪ Kiosk tùy chỉnh và với Bộ cấu hình thanh tốn phụ trợ thanh
tốn tùy chọn, có thể được điều chỉnh theo yêu cầu.
▪ Sản phẩm: Kiosk
Hình 1.8 Kiosk
− IoT Nodes and Sensors:
o Các nút và kết hợp cảm biến cho GROW platform
o Sản phẩm: Bigeyenode/ Gateway
1.3
Lịch làm việc khi thực tập tại công ty
Em tham gia thực tập tại công ty từ ngày tới 02/05/2020. Một tuần em
tham gia làm việc vào 3 ngày trong tuần: thứ 4, thứ 5, thứ 6. Bắt đầu làm việc
lúc 8h30 và kết thúc vào lúc 17h30, nghỉ trưa 1 tiếng. Sau mỗi ngày làm việc em
sẽ commit lên git để anh mentor kiểm tra. Khi có khó khăn em sẽ nhờ anh mentor
giúp đỡ.
5
CHƯƠNG 2
2.1
NỘI DUNG THỰC TẬP
Tìm hiểu cơng ty và các kỹ năng cơ bản trong công ty
Thời gian: 1 ngày
Nội dung:
−
HR giới thiệu về công ty, lịch sử thành lập và phát triển, bộ máy quản lý
phân cấp, cách tổ chức.
−
HR giới thiệu những thành tựu nổi bật, dự án công ty đã và đang thực
hiện, định hướng trong tương lai.
−
HR trình bày văn hóa riêng của cơng ty: Thời gian làm việc, qui định cần
phải tuân thủ, chính sách bảo mật, ràng buộc, cách thức tổ chức và tương tác
trong nhóm phát triển dự án.
Kết quả:
− Nắm rõ các thông tin cơ bản về công ty
− Học thêm về kỹ năng sử dụng email trong công việc, làm việc có kế hoạch,
có kỷ luật, trách nhiệm hơn.
2.2
Nghiên cứu kỹ thuật
2.2.1 Các công cụ làm việc
Thời gian: 2 ngày
Nội dung: Tìm hiểu các cơng cụ sẽ được sử dụng khi làm việc:
− Công cụ phát triển phần mềm (IDE): XCode
− Công cụ quản lý mã nguồn: Source Tree
− Công cụ giao tiếp, trao đổi: Skype
− Công cụ thiết kế UX/UI: Zeplin
6
Kết quả: Biết cách sử dụng các công cụ trên để làm việc. Biết cách
sử dụng một công cụ quản lý mã nguồn mới.
2.2.2 Git/ Git flow
Thời gian: 1 ngày
Nội dung: Tìm hiểu về Git và nắm các thơng tin:
− Repository: nơi để lưu trữ, là thư mục chứa tất cả mã nguồn, phiên bản.
− Head: một con trỏ chỉ vào mã nguồn mới nhất bạn đang làm việc.
− Add: giúp Git biết được tập tin này cần được theo dõi.
− Commit: yêu cầu Git lưu lại trạng thái của repo hiện tại.
− Remote: nơi chứa repositories nhưng không không nằm trên máy của mình
mà nằm ở đâu đó khác (như Github, Gitlab ...).
− Pull: giúp lấy mã nguồn từ remote về.
− Push: tải mã nguồn lên remote.
− Merge: kết hợp 2 phiên bản khác nhau của mã nguồn lại thành một.
− Status: hiển thị thơng tin về tình trạng hiện tại của repo.
− Git rebase: quá trình gắn một nhánh vào nhánh gốc.
− Gitlog: ghi lại những thao tác xảy ra với repo.
− Git branch: phân nhánh để làm việc với Git.
Kết quả: Nắm được cơ bản về Git. Biết cách sử dụng và áp dụng
vào công việc.
2.2.3 Coding Convention
Thời gian: 1 ngày
Nội dung: Tìm hiểu về coding convention trong ngôn ngữ Swift:
− Correctness: Cố gắng để khi compile khơng có bất kì lỗi hay warning
− Naming: Đặt tên biến có tính mơ tả và nhất qn
o Ưu tiên đặt tên rõ ràng hơn ngắn gọn.
o Sử dụng camelCase (khơng sử dụng snake_case)
o Sử
dụng
UpperCamelCase
đối
với
types
và
protocols,
lowerCamelCase cho những thứ cịn lại.
7
o Cần đặt tên bao gồm tất cả những từ cần thiết, tránh những từ không
cần thiết.
o Sử dụng tên dựa trên chức năng, không dựa vào kiểu.
o Đặt tên cho methods phụ thuộc vào chức năng:
▪ Verb method cần có –ed, -ing
▪ Noun method tuân theo quy tắc formX
▪ Boolean nên đặt như 1 câu khẳng định
▪ Protocol đặc tả what something is nên đặt theo noun
▪ Protocol miêu tả một khả năng nên kết thúc bằng -able hoặc –
ible
o Sử dụng thuật ngữ không gây ngạc nhiên cho các chuyên gia hoặc
nhầm lẫn đối với người mới bắt đầu.
o Tránh viết tắt.
o Đặt cùng tên cơ sở cho các phương thức có cùng ý nghĩa.
o Tránh overload các hàm trả về
o Chọn tên có thể phục vụ cho viết document
o Gắn nhãn Closure và Tuple parameter
o Tận dụng các tham số mặc định
− Code Organization:
o Protocol Conformance: Khi thêm protocol, hãy thêm từng protocol
riêng biệt, tách ra thành extension cho từng protocol method.
▪ Preferred:
8
▪ Not preferred:
o Unused Code: Tất cả các code không sử dụng đến và placeholder
comment cần xoá đi
▪ Preferred:
▪ Not Preferred:
o Minimal Import: Hạn chế import các thư viện không cần thiết hoặc
không sử dụng đến.
− Spacing:
o Thụt lề bằng cách sử dụng 2 khoảng trắng thay vì các tab để tiết kiệm
không gian và giúp ngăn chặn đường bao.
o Các phương thức có dùng dấu ngoặc phải mở ngoặc trên cùng một
dịng, đóng ngoặc ở một dịng mới:
▪ Preferred:
9
▪ Not Preferred:
o Colons ln khơng có khoảng trống bên trái và một khoảng trống bên
phải. Trường hợp ngoại lệ là toán tử ternary ? :, từ điển trống [:] và
cú pháp #selector addTarget (_: action :)
▪ Preferred:
▪ Not Preferred:
o Chỉ nên có tối đa 70 kí tự trên 1 dịng.
o Khơng thêm khoảng trống vào cuối hàng. Thêm một dòng mới ở cuối
mỗi file.
− Comments:
o Khi cần thiết, sử dụng comment để giải thích đoạn code này sử dụng
để làm gì. Comment cần được cập nhật hoặc xố đi.
o Tránh comment trong cùng 1 dòng với code
− Function Declarations:
o Hàm ngắn: để dấu mở ngoặc cùng một dòng với định nghĩa
o Hàm dài: Mỗi parameter để trên 1 dòng mới
10
− Function Calls: Giống với Function Declarations
− Closure Expressions: Chỉ sử dụng cú pháp Closure nếu có một parameter
closure ở cuối danh sách đối số.
o Preferred:
o Not Preferred:
− Types:
11
o Constant: Sử dụng let để định nghĩa hằng. Luôn sử dụng let thay cho
var nếu biến có giá trị không đổi.
▪ Preferred:
▪ Not Preferred:
o Type Inference: Ưu tiên code nhỏ gọn và để trình biên dịch tự suy ra
kiểu cho các hằng hoặc biến của các single instance. Type Inference
cũng thích hợp cho các mảng và từ điển nhỏ, không trống. Khi được
yêu cầu, chỉ định loại cụ thể như CGFloat hoặc Int16.
▪ Preferred:
▪ Not Preferred:
− Memory Management: Code (cả non-production code và code demo hướng
dẫn) không nên tạo reference cycle. Sử dụng các loại giá trị (struct, enum) để
ngăn chặn hoàn toàn cycle.
o Preferred:
12
o Not Preferred:
Kết quả: Nắm được coding convention. Áp dụng vào code để giúp
code đẹp và dễ đọc hơn.
2.3
Thực hiện dự án
Sau khi đã tìm hiểu về cơng ty, cách tổ chức và làm việc. Anh Trung đã
giao cho em hiện thực ứng dụng STYL FOOD để nhân viên trong cơng ty có thể
sử dụng.
2.4
Lịch làm việc
Tuần
Cơng việc
Người hướng
Mức độ
Nhận xét
dẫn
1
Tìm hiểu về cơng ty, cách làm Mr.
việc.
Ân,
Trung
Mr. Tìm hiểu, Hồn thành
học tập
Tìm hiểu kỹ thuật
Hiện thực LauchScreen
2
Sử dụng storyboard hiện thực Mr. Trung
Áp dụng
Hoàn thành
Áp dụng
Hoàn thành
thiết kế Login, Home
3
Hoàn thiện tất cả thiết kế UI
Mr. Trung
13
4
Chuyển thiết kế từ storyboard Mr. Trung
Áp dụng
Hoàn thành
Áp dụng
Hoàn thành
Áp dụng
Hoàn thành
Áp dụng
Hoàn thành
Áp dụng
Hoàn thành
Áp dụng
Hoàn thành
cho Mr. Trung
Áp dụng
Hoàn thành
Hiện thực unit test cho Login Mr. Trung
Áp dụng
Hoàn thành
Sửa lỗi unit test, hiện thực Mr. Trung, Mr. Áp dụng
Hoàn thành
sang code, sửa lỗi thiết kế,
thêm hiệu ứng
5
Chuyển code sang mơ hình Mr. Trung
MVC, hiện thực các chức
năng trang Home, fetching
data với JSONDecoder
6
Sửa lỗi sau khi anh Mentor Mr. Trung
review, call API, chuyển sang
sử dụng Firebase để lưu dữ
liệu
7
Sửa lỗi UI, constraint, hiện Mr. Trung
thực các chức năng của các
ViewController khác
8
Tối ưu hoá code, thêm Mr. Trung
animation cho các component
9
Lưu dữ liệu vào firebase, Mr. Trung
chuyển một phần mơ hình
MVC thành mơ hình MVVM
10
Thêm
unit
test
HomeViewController
11
và các service
12
trên máy thật, review lại quá Ân
trình thực tập
14
CHƯƠNG 3
3.1
CHI TIẾT PROJECT
Giới thiệu về ứng dụng
Ứng dụng được phát triển nhằm giúp nhân viên trong công ty biết được
món ăn trưa của mình trong ngày hơm đó cũng như trong cả tuần. Ứng dụng gồm
các chức năng chính sau:
− Login: Sử dụng tên của mình để login
− Home: Xem món ăn của trưa ngày hơm nay, chuyển hướng đến các trang
khác. Thay đổi ảnh profile
− Food List: Xem danh sách các món ăn trong tuần
− Rate Food: Đánh giá món ăn của ngày hơm đó
− Rating View: Xem xếp hạng các món ăn có đáng giá cao nhất từ các nhân
viên trong công ty
− Setting: Xem phiên bản của ứng dụng. Gửi Mail phản hồi cho nhà phát triển.
Đánh giá ứng dụng.
3.2
Thực hiện
Project đã được thực hiện và có sản phẩm được sử dụng như sau:
15
3.2.1 Màn hình Login
Các bước thực hiện:
− Thêm Scrollview trên nền ViewController, thêm uiview lên nền scrollview
− Thêm imageview để thêm logo app
− Thêm uiview để hiện đề xuất tên khi người dùng login
− Thêm textfield để nhập dữ liệu
− Thêm button để chuyển hướng sang Home
− Hiệu chỉnh UI bằng code, thêm extension gradient để tái sử dụng
16
3.2.2 Màn hình Home
Các bước thực hiện:
− Thêm Scrollview trên nền ViewController, thêm uiview lên nền scrollview
− Thêm 3 component chính: Food List, Ratings, Settings với cùng cấu trúc: 2
uiview, 1 imageview, 1 button, 1 label. 3 component được đặt vào 1
stackview.
− Thêm imageview để làm khung cho profile picture. Thêm button Edit profile
− Thêm 3 uiview làm background
− Thêm button Sign out
− Thêm uiview hiển thị món ăn hơm nay, đánh giá món ăn
17
3.2.3 Màn hình Edit Profile Picture
Các bước thực hiện:
− Thêm uiview vào ViewController
− Thêm 2 component: Take photo, Select photo với cùng cấu trúc: 1 uiview, 1
label, 1 button, 1 imageview
− Thêm button Cancel
− Flow:
o “Take a photo”: Chuyển sang camera của máy, Chụp ảnh, Chọn ảnh
o “Select a photo from your phone”: Chuyển sang thư viện, chọn ảnh,
xác nhận thay đổi.
Ví dụ:
18
− Chọn Select a photo from phone, chuyển sang thư viện:
− Chọn ảnh, xác nhận thay đổi. Màn hình chính sau khi thay đổi ảnh
19