1. Trang chủ
  2. » Cao đẳng - Đại học

Báo cáo thực tập lập trình ứng dụng trên nền tảng iOS (2)

32 10 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 32
Dung lượng 752,95 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đặc biệt cảm ơn và lòng biết ơn sâu sắc tới anh Ninh Đắc Thêm, đã 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

Trang 1

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

KHOA CÔNG NGHỆ PHẦN MỀM

BÁO CÁO THỰC TẬP

LẬP TRÌNH ỨNG DỤNG TRÊN NỀN TẢNG iOS

TP Hồ Chí Minh, tháng 07 năm 2020

Trang 2

LỜI MỞ ĐẦU

Ngày nay, cùng với sự phát triển vượt bậc của điện thoại thông minh đã kéo theo 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 ngoà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 Zalo Group, Công ty

cổ phần VNG – là môi trường lý tưởng và chuyên nghiệp giúp em có cơ hội thực hiện dự định bản thân

Trang 3

Đặc biệt cảm ơn và lòng biết ơn sâu sắc tới anh Ninh Đắc Thêm, đã 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

Nguyễn Hồng Phúc Tp.HCM, ngày 29 tháng 07 năm 2020

Trang 4

NHẬN XÉT CỦA KHOA

Trang 5

Nội dung

LỜI MỞ ĐẦU 2

LỜI CẢM ƠN 3

CHƯƠNG 1: GIỚI THIÊU CÔNG TY THỰC TẬP 7

1.1 Giới thiệu VNG Corp 7

1.2 Sản phẩm của công ty 7

1.3 Lịch làm việc khi thực tập tại công ty 8

CHƯƠNG 2: NỘI DUNG THỰC TẬP 9

2.1 Tìm hiểu công ty và các kỹ năng cơ bản trong công ty 9

2.2 Nghiên cứu kỹ thuật 9

2.2.1 Các công cụ làm việc 9

2.2.2 Git / Git workflow 9

2.2.2 Tìm hiểu ngôn ngữ Objective-C 10

2.2.3 Lập trình iOS với Objective-C 12

2.2.4 Tìm hiểu ngôn ngữ Swift 14

2.2.5 Lập trình “Reactive programing” 20

3 Thực hiện project 21

CHƯƠNG 3: CHI TIẾT VỀ PROJECT 22

3.1 Giới thiệu về ứng dụng 22

3.2 Thực hiện 23

3.2.1 Màn hình lựa chọn chức năng 23

3.2.2 Màn hình chức năng nhiều đối tượng tiêu thụ từ camera 24

3.2.3 Màn hình áp dụng nhiều bộ lọc 25

3.2.4 Màn hình áp dụng hiệu ứng video 26

3.2.5 Màn hình chụp ảnh/quay video 27

3.2.6 Kết quả xử lý ảnh và video được lưu vào thư viện 29

TỔNG KẾT 32

Trang 7

CHƯƠNG 1: GIỚI THIÊU CÔNG TY THỰC TẬP 1.1 Giới thiệu VNG Corp

VNG được thành lập ngày 09/09/2004, là một trong những công ty Internet và Công nghệ hàng đầu Việt Nam và Đông Nam Á, kỳ lân công nghệ 1 tỷ USD+ duy nhất của Việt Nam với hơn 3200 thành viên

VNG có văn phòng đặt tại 5 quốc gia, các lĩnh vực hoạt động của VNG tập trung vào 4 nhóm sản phẩm chủ lực, mang đến cho người dùng những trải nghiệm phong phú

và đơn giản hơn

Nhập khẩu và phát hành các trò chơi nổi tiếng thế giới

Sản phẩm: Võ Lâm Truyền Kỳ, Rules of Survival, Crossfire Legend…

Trang 8

• Tài chính và thanh toán:

Các nền tảng và dịch vụ trung gian thanh toán, tài chính cá nhân theo xu hướng mới

Sản phẩm: Cổng trung gian thanh toán 123 Pay, Ví điện tử ZaloPay

1.3 Lịch làm việc khi thực tập tại công ty

Em tham gia làm việc tại công ty bắt đầu từ ngày 02/12/2019 tới 30/05/2020 Công việc hằng ngày bắt đầu từ lúc 9:00am tới 6:00pm Thời gian nghỉ trưa khoảng 1 tiếng rưỡi Sau mỗi ngày làm việc em sẽ báo cáo tiến độ công việc trong ngày, đặt câu hỏi và nhận chia sẻ, giải đáp từ anh hướng dẫn, đặt mục tiêu cho ngày làm việc tiếp theo Mỗi tuần sẽ họp tiến độ tuần 1 lần, thường sẽ là chiều thứ 6 Mọi người sẽ cùng họp và bàn bạc về các vấn đề đã giải quyết, tồn đọng, bài học, giải pháp và mục tiêu cho tuần tiếp theo

Trang 9

CHƯƠNG 2: NỘI DUNG THỰC TẬP 2.1 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 : Giới thiệu về công ty, cách tổ chức của công ty

Được nghe người phụ trách giới thiệu về công ty, quá trình thành lập và phát triên, quy trình làm việc từ cao xuống thấp, cách thức tổ chức của công ty

Ngoài ra, thực tập sinh còn được giới thiệu về cách thức làm việc trong công ty như thời gian đi làm, các quy định cần phải tuân thủ, cách sử dụng email trong công việc…

Kết quả : Hiểu thêm về công ty cổ phần VNG, quá trình thành lập và phát triển Có

thêm các kỹ năng về việc sử dụng email trong công việc, làm việc có kế hoạch, có kỷ luật, có 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 : 1 ngày

Nội dung : Tìm hiểu về các công cụ sẽ được sử dụng trong quá trình làm việc

Trong thời gian này, anh lead đã hướng dẫn thực tập sinh tìm hiểu về các công cụ sẽ giúp ích cho trong công việc sau này Một số phần mềm trong số đó như Bộ công cụ XCode sử dụng để lập trình ứng dụng iOS, Zalo - ứng dụng trao đổi và làm việc nhóm, Source Tree - ứng dụng quản lý phiên bản mã nguồn

Thực hiện : Thực hành sử dụng các phần mềm đã nêu trên

Kết quả : Sử dụng thành thạo các chứng năng cơ bản của các phần mềm nêu trên, đáp

ứng nhu cầu làm việc trong suốt quãng thời gian thực tập

2.2.2 Git / Git workflow

Thời gian : 1 ngày

Nội dung: Được giới thiệu chi tiết về Git

Trang 10

- 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ô 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ôngtin về tình trạng hiện tại của repo

Ngoài những cơ bản mà người dùng Git nào cũng biết, em còn được biết thêm trong quá trình thực tập ở công ty các lệnh khác như:

- 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

Và để phối hợp nhịp nhàng giữa các thành viên với nhau, công ty sử dụng git workflow

Kết quả :

- Nắm được cơ bản về Git

- Biết được cách sử dụng và áp dụng vào công việc

2.2.2 Tìm hiểu ngôn ngữ Objective-C

Thời gian : 3 ngày

Nội dung : Được training về ngôn ngữ Objective-C, Foudation framework

- Biên dịch và chạy chương trình

Sử dụng Xcode để soạn thảo code , cấu trúc cơ bản của 1 chương trình

- Class, Object và Method :

Các khái niệm này tương tự với các khái niệm đã được học trong môn lập trình hướng đối tượng, tuy nhiên cách triển khai, cũ pháp có phần khác so với các ngôn ngữ như C++, Java

Trang 11

Mỗi class sẽ được định nghĩa bằng từ khóa @interface và kết thúc bởi @end, class có thể kế thừa class khác bằng từ khóa “:”, tương tự java – Objective-C chỉ cho phép đơn

kế thừa và mặc định đều dẫn xuất từ lớp NSObject

Mỗi Class được khai báo trong file h và hiện thực trong file m Với file m class được bắt đầu với từ khóa @implement và kết thúc bởi @end

Method được khai báo theo cú pháp:

method type (return type) methodName: (argumentType) argumentName

- Kiểu dữ liệu và các toán tử

Thực tập sinh sẽ được hướng dẫn về các kiểu dữ liệu cơ bản các các toán tử trong Objective-C

- Vòng lặp, biểu thức quyết định :

Các phương pháp lặp như sử dụng câu lệnh for, while, do Biểu thức quyết định if, switch và toán tử điều kiện

Trang 12

- Categories, Protocols, Delegate

Categories cung cấp cách đơn giản để module hóa định nghĩa class, nhóm chúng thành các phần chứa các method liên quan Nhờ vào chức năng này ta cũng có thể mở rộng các method cho các Method trên Object đã có

Protocols có thể xem như interface trong Java, chứa tập các method mà các class có thể định nghĩa hoặc không (@require or @optional)

Ta sử dụng delegate để ủy quyền thực thi 1 method nào đó trên class có implement protocols được yêu cầu bởi delegate

- Các phần được kế thừa từ ngôn ngữ C:

Bao gồm mảng, Hàm, Blocks, Structures, pointer,…

- Foundation Framework

Tìm hiểu về Numbers, Strings, Collections, quản lý bộ nhớ (retain – release), ARC

- Code complete and coding convention

Thực hiện :

- Tham gia đầy đủ các buổi training của công ty

- Làm các bài thực hành, kiểm tra về kiến thức đã học

Kết quả :

- Nâng cao kỹ năng lập trình với ngôn ngữ Objective-C

- Có được những kiến thức quan trọng cho việc lập trình iOS sau này

- Ngoài ra còn được biết thêm một số quy tắc trong việc viết code sao cho đúng chuẩn, dễ đọc, dễ hiểu, các phương pháp xử lý tránh việc crash app

2.2.3 Lập trình iOS với Objective-C

Thời gian : 5 ngày

Nội dung : Được training về các thành phần quan trọng trong lập trình iOS Các design

pattern thường dùng, tối ưu hiệu suốt chương trình, áp dụng kiến trúc MVC và MVVM trong ứng dụng

- Quản lý bộ nhớ:

Trang 13

Hiểu về ARC và non ARC (sử dụng Grand Central Dispatch)

Giải quyết các vấn đề liên quan đến memory để tránh crash app

- View, Controller, Navigation:

Sử dụng view cho việc hiện thị và quản lý bằng controller Điều hưỡng giữa các màn hình bằng Navigation

- Table Views và AutoLayout:

Quản lý form input sử dụng tableview và auto layout

Tạo và sử dụng tableview template

Sử dụng auto layout để pin, center và align views

Debug auto layout runtime constrain conflicts

Quản lý intrinsic conten size, conten hunging và expansion

- Animation, Gestures và container View Controllers

- Custom views và View Controller Transitions:

Tạo View từ nib file

- Tham gia đầy đủ các buổi training của công ty

- Làm các bài thực hành, kiểm tra về kiến thức đã học

Kết quả :

- Sử dụng thành thạo các views cơ bản

Trang 14

- Có khả năng tạo các wraper để thread-safe

- Custom view theo yêu cầu

- Hiểu về kiến trúc của 1 ứng dụng theo mô hình MVVM, auto binding bằng observer partten

- Sử dụng các design partten giúp code dễ đọc, lập trình tốt hơn

- Lập trình đa luồng sử dụng GDC

- Tối ưu chương trình bằng cách sử dụng cache, buzy loading

2.2.4 Tìm hiểu ngôn ngữ Swift

Thời gian : 3 ngày

Nội dung: Các kiến thức về ngôn ngữ lập trình Swift 5.2

Collection Type: Swift cung cấp 3 kiểu dữ liệu tập hợp cơ bản, bao gồm array, set,

dictionary

Mảng (array) là tập hợp các giá trị được lưu trữ theo thứ tự

Tập hợp (set) là tập hợp các giá trị riêng biệt và không theo thứ tự

Dictionary là tập hợp không có thứ tự, được lưu dưới dạng key – value

Trong 1 collection thì các giá trị được lưu theo cùng kiểu dữ liệu, ta không thể chèn 1 kiểu dữ liệu khác bởi sự bất cẩn

Control Folow: So với các ngôn ngữ khác, Swift cung cấp khá nhiều câu lệnh lên quan

đến điều khiển luồng Bao gồm for in loop, while, repeat – while Các câu lệnh điều kiện:

If, switch Control transfer statements: continue, break, fallthrough, return, throw

Function: hàm được khai báo và sử dụng theo cú pháp

Func functionName(label name: type,…) -> (return type) { body }

Theo mặc định, tham số được truyền vào hàm là hằng số nên nếu muốn thay đối giá trị của tham số trong quá trình sử dụng hàm ta cần dùng đến in-out parameters bằng cách

thêm từ khóa inout trước kiểu dữ liệu

Trang 15

Hàm cũng được sử dụng như 1 biến bằng cách khai báo tham số, kiểu trả về và có thể gán bằng 1 closure bất cứ lúc nào

Tham số truyền vào và kiểu trả về của hàm cũng có thể là 1 (hay nhiều) hàm khác

Closures: Tương tự như block trong Objective-C, closure có thể capture và lưu giữ tham

chiếu đến biến và hằng từ context nó được định nghĩa

{ (parameters) -> return_type in

Statements }

Chúng ta có thể truy cập nhanh các tham số bằng ký hiệu $0, $1, … theo thứ tự tham số thay vì dùng tên tham số 1 cách tường minh

Khi closure được truyền qua hàm, ta có thể sử dụng nó để gọi lại sau này bằng kí hiệu

@escaping

Enumeration: Tương tự các ngôn ngữ khác, tuy nhiên nó không được mặc định ngầm

gán giá trị là kiểu nguyên

Ta có thể lặp qua các giá trị của enum bằng các thêm ký hiệu :CaseIterable ngay sau tên của enum Khi sử dụng ta gọi ten_enum.allCases

Mỗi case của enum có thể lưu giá trị kiểu associated values

Case name_case(type1, type2, …)

Structures and Class:

Cả 2 đều có thể:

- Định nghĩa properties để lưu trữ giá trị

- Định nghĩa các phương thức để cung cấp các chức năng

- Định nghĩa subscrip để truy cập nhanh phần tử

- Đinh nghĩa hàm khởi tạo

- Comform với protocol để cung cấp các hàm chuẩn cần thiết

Trang 16

Tuy nhiên có những thứ chỉ có ở class như:

- Kế thừa

- Ép kiểu và sử dụng lúc runtime

- Hàm hủy để giải phóng vùng nhớ

- Reference counting để nhiều tham chiếu đến cùng 1 đối tượng

Properties: Có 2 kiểu properties

- Store property: Là biến hoặc hằng lưu trữ 1 phần thông tin của thể hiện lớp

- Lazy store properties: Giá trị sẽ được khởi tạo ngay sức khi gọi đến nó

- Computed properties: Không thực sự lưu giá trị mà cung cấp getter và optional setter

để lấy và gán giá trị 1 cách không trực tiếp

Subscripts: Class, structures và enumerations có thể định nghĩa subscript để truy cập

phần tử trong collection, list, sequence Tương tự như việc truy cấp và gán giá trị trên mảng

Subscript(parametters) -> return_type {

Get { } Set {newValue}

}

Inheritance: Một lớp có thể kế thừa method, properties và nhưng tính chất khác từ 1 lớp

cha Method có thể custom lại bằng cách thêm từ khóa Overide trước method

Truy cập method, properties, subscript của lớp cha bằng từ khóa supper.method()

Initialization: là quá trình chuẩn bị cho 1 thể hiện của class, structure, enumeration để sử

dụng Nó được tự động gọi để tạo 1 thể hiện mới của 1 kiểu cụ thể

Trang 17

Init(parametters) {

statements }

Swift cung cấp 1 hàm khởi tạo mặc định cho class và structure có defaulf values cho tất

cả properties của nó nếu ta không cung cấp ít nhất 1 hàm khởi tạo cho nó

Structure có hàm khởi tạo memberwise initializer dù có cung cấp giá trị mặc định hay không

Designated initializers là kiểu khởi tạo chính của class, có thể gọi hàm khởi tạo phù hợp

từ class cha để tiếp tục chuỗi khởi tạo

Convinience initializers là kiểu hỗ trợ để khởi tạo cho 1 class Nó chỉ có thể gọi designated hoặc convinience có gọi designated

Trong quá trình khởi tạo được chia thành 2 pha:

- Pha đầu tiên, tất cả store properties mà nó khai báo sẽ được khởi tạo giá trị (trước khi gọi hàm khởi tạo lớp cha) Sau khi delegate cho lớp cho nó mới được quyền

sử dụng giá trị mà nó kế thừa để gán giá trị, cứ thế gọi cho đến lớp cha ở trên cùng

- Quay trở lại từ lớp cha trên cùng, mỗi hàm khởi tạo có cơ hội để custom lại, có thể gọi được self, các method của class Cuối cùng các convinience có thể custom lại các properties.s

Deinitialization: Được gọi ngay trước khi 1 thể hiện của class được giải phóng Chỉ có

trong class type Deinit được gọi tự động, sau khi deinit ucar subclass được gọi xong thì supper class sẽ được gọi

Optional chaining: Được sử dụng cho việc truy vấn các thuộc tính, phương thức và

subscripts có chứa optional value mà có thể nil trong quá trình gọi, tránh xảy ra lỗi trong quá trình runtime Kết quả của câu lệnh là 1 optional

Ngày đăng: 05/09/2021, 21:04

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w