PracticU

פרויקט גמר לקורס פיתוח אפליקציות לאייפון

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode › פרויקט גמר לקורס פיתוח אפליקציות לאייפון
מילון מושגים:
iOS - מערכת ההפעלה של אפל למכשירי iPhone ו-iPad.
API - ממשק תכנותי שמגדיר כיצד תוכנה אחת פונה לאחרת ומחליפה איתה נתונים ופעולות.
JSON - פורמט טקסט קריא לייצוג נתונים מובְנים כזוגות מפתח-ערך, נפוץ להחלפת מידע בין שרת ללקוח.
Endpoint - נקודת קצה שאליה פונים ב-API, המזוהה בכתובת ומטפלת בסוג מסוים של בקשות. גם מכשיר קצה ברשת.
ספרייה - אוסף קוד מוכן, כמו פונקציות ומחלקות, שמפתחים משתמשים בו בתוכניותיהם במקום לכתוב הכול מחדש.
Firebase - פלטפורמת ענן של גוגל לפיתוח אפליקציות, הכוללת מסד נתונים, אימות, אחסון ושירותים נוספים.
Singleton - דפוס עיצוב שמבטיח שממחלקה מסוימת יהיה מופע אחד בלבד, עם נקודת גישה גלובלית אליו.
MVC - דפוס ארכיטקטורה שמפריד יישום לשלושה חלקים: מודל (נתונים), תצוגה (View) ובקר (Controller).

פרויקט גמר לקורס פיתוח אפליקציות לאייפון
הסבר על פרויקט הגמר של הקורס: אפליקציית iOS שמציגה סרטים מתוך API של TheMovieDB, ומשלבת את כל מה שנלמד בקורס.
מה האפליקציה צריכה לעשות
1. ארבע לשוניות ב-Tab Bar Controller: ז'אנרים, סרטים פופולריים, הסרט האחרון שנוסף לאתר (Latest), וסרטים שאהבתי (Favorites).
2. ז'אנרים וסרטים לפיהם: מביאים JSON של כל הז'אנרים מה-API ומפענחים אותו עם Codable. לחיצה על ז'אנר לוקחת את ה-ID שלו ופותחת רשימת סרטים מאותו ז'אנר, ב-Table View Controller, דרך endpoint נוסף ב-API.
3. פרטי סרט: לחיצה על סרט מציגה מסך Movie Details עם המידע והתקציר, ומשתמשת שימוש חוזר באותו Table View Controller ו-Details View Controller גם למסך הז'אנרים וגם לפופולריים.
4. תמונות: כתובת התמונה נבנית משרשור כתובת בסיס (image.tmdb.org/t/p/...) עם ה-poster path שמגיע מה-JSON. לתצוגה מומלץ להשתמש בספרייה כמו SDWebImage.
5. הסרט האחרון שנוסף: מסך שמציג סרט בודד בלבד, בלי תמונה (כי לרוב אין עדיין תמונה לסרט חדש).
6. התחברות והרשמה: באמצעות Firebase, עם בדיקת תקינות אימייל וסיסמה (לפחות 3 תווים) והצגת הודעת שגיאה כשהקלט לא תקין. מסכי Login ו-Register בסטוריבורד נפרד, עם מחלקת Router מסוג Singleton שמנתבת בין מסך ההתחברות למסך הראשי לפי מצב המשתמש בטעינת האפליקציה.
7. סרטים שאהבתי: מבוססים על Core Data מקומי, כדי שכל משתמש יוכל לסמן סרט כאהוב ולא יוכל לעשות זאת פעמיים לאותו סרט.
8. עבודה גם בלי אינטרנט: נדרש שמסכי הסרטים ימשיכו לעבוד גם כשאין חיבור, בעזרת שכבת Repository שמגשרת בין ה-API לבין Core Data: היא מנסה למשוך מה-API ולשמור לדאטהבייס, ואם אין אינטרנט (שגיאת URLSession) מושכת מה-Core Data במקום.
מבנה הפרויקט המומלץ
קבוצות (groups) נפרדות למודלים, ל-Repository, ל-Database, ל-API, ל-Controllers ול-Views, עם enum לכל ה-endpoints, עבודה בתבנית MVC, שימוש בדלגייטים לטבלאות ובסינגלטונים, והימנעות מקוד כפול. מחלקת Movie שמשמשת גם מודל JSON (עם Codable) וגם אובייקט Core Data (יורשת מ-NSManagedObject) דורשת מימוש ידני של init(coder:) ו-encode(to:).
שימו לב
- יש לבדוק שהפרויקט עובד ולא קורס גם בסיבוב המכשיר.
- מומלץ להתחיל מהחלק הקל ביותר (למשל בניית ה-Tab Bar עם הלשוניות) ולהתקדם משם בהדרגה, במקום להתייאש ממורכבות הפרויקט כולו.
אחרי השיעור מוכרת דרישת פרויקט הגמר במלואה: מסכים, API, Core Data, התחברות והרשמה, וארכיטקטורה מסודרת לכל הרכיבים.

פרקי ההרצאה: פרויקט גמר לקורס פיתוח אפליקציות לאייפון

  1. 00:00

    אפליקציית מידע על סרטים מ-API

  2. 01:12

    Firebase, JSON ו-Codable בפרויקט

  3. 02:05

    Tab Bar Controller ו-Table Views

  4. 02:42

    שמירה מקומית עם Core Data

  5. 04:10

    התחברות, הרשמה ושמירת מועדפים

  6. 05:41

    מסך הז׳אנרים ושליפתם מה-API

  7. 08:18

    הצגת תמונות הסרטים

  8. 10:02

    מסך הסרטים הפופולריים

תמלול ההרצאה: פרויקט גמר לקורס פיתוח אפליקציות לאייפון

הטקסט המלא של הדקות הראשונות בהרצאה «פרויקט גמר לקורס פיתוח אפליקציות לאייפון» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    שלום וברוכים הבאים אנחנו רוצים לדבר היום על פרויקט מסכם שלכם פתח פשוט אפליקציה לעצמכם שבה תוכלו לבטא את כל מה שלמדנו בקורס ובעצם לתרגל וככה להגיע להבנה והכרה מקיפה יותר של החומר האפליקציה שאנחנו נרצה לבנות היא אפליקציה שמציגה סרטים האפליקציה מציגה את הסרטים מאתר של demoVDB, מה-IPI של demoVDB

  2. 00:26

    אני אתן לכם עוד מעט את הכישורים ואתם תוכלו להתרשם בגדול האפליקציה מורידה ה-JSON מה-API ומציגה אותו בכל מיני אופנים.

  3. 00:36

    ה-JSON ב-API מכין סרטים והאפליקציה פשוט תציג מידע על סרטים, לפי ז'אנר, מידע על סרטים פופולריים וגם מידע על הסרט האחרון שנוסף לאתר.

  4. 00:46

    מעבר לזה אתם תרצו לדעת להוסיף גם סרטים שאהבתם למועדפים, וגם את זה אנחנו נעשה באפליקציה. המטרה של האפליקציה להציג את המידע על הסרטים בצורה נוחה, כיפית ומרוכזת, וכמובן היא רוצה לתת לכם גם אפשרות לגשת לדאטה

  5. 01:03

    למידע למידע לסרטים גם אם המכשיר שלכם מתנתק פתאום מהרשת של האינטרנט ואת זה אנחנו נעשה על ידי דאטה בייס מקומי בקור דאטה אז יש לנו פה שילוב כזה יפה של ג'ייסון הרבה טבלאות הרבה טייבל ויוס כמובן גם עבודה עם קור דאטה בואו נתרכז בככה נושאים שיש בפרויקט אנחנו נרצה בפרויקט לעשות התחברות והשמה שמשתמשים בעזרת פייר בייס

  6. 01:30

    כמו שלמדנו בקורס. אנחנו נרצה להשתמש ב-demo ו-db API כדי לקבל JSON ולעבוד עם פענוח של JSON באמצעות הפרוטוקול Codable ואתם מכירים את זה גם.

  7. 01:42

    אנחנו נשתמש ב-URL Session ובגלל של-API יש מספר endpoints, מספר כתובות שאפשר לגשת אליהן, אז אתם תיגשו לתרגיל הזה כמו שניגשתם לתרגיל שבו פתרנו את ה-API של החדשות.

  8. 01:56

    עכשיו, אנחנו נרצה פשוט בפרויקט לעבוד בצורה מסודרת, בצורה מרשימה שהיא תהיה יפה והגיונית, אז כל העבודה ל-API תהיה במחלקות נפרדות כדי לשמור ככה על חלוקה יפה של הקוד, על סידור יפה של הקוד.

  9. 02:10

    שוב פעם ל-API יש מספר אנדפוינטס ולכן אתם בטח תרצו לייצר לכם איזשהו אינאם של האנדפוינטס ב-API. שוב פעם עשינו דברים דומים באפליקציה של החדשות.

  10. 02:22

    בגלל שיש לנו מספר מסכים אנחנו נבחר להשתמש ב-Tabar Controller כדי להציג את המידע. אתם בטח זוכרים ש-Tabar Controller מכיל כמה טאבים למטה וככה אנחנו נציג את המידע.

  11. 02:34

    שימוש ב-Tableview קוטרולרס בשביל להציג את הסרטים, כל מיני רשימות של סרטים ואנחנו נרצה גם לתמוך בפעולות סטנדרטיות של טייבל ויוס כמו שלמדנו, כמו למשל למחוק סרט מרשימה.

  12. 02:48

    האפליקציה תשתמש ב-core data בנוסף ל-JSON בשביל לשמור את הסרטים מקומית עבור מצב שאין קישוריות אינטרנט. תחשבו נגיד שאתם נמצאים ברכבת ובהתחלה היה לכם אינטרנט ובאמצע הנסיעה פתאום אין לכם, אז אנחנו לא רוצים שהאפסיקציה תפסיק לעבוד באיזושהי צורה אלא אם כבר שלחתם לי את המידע אז רצוי לשמור אותו בcore data.

  13. 03:08

    ננסה לשים לב בפרויקט, לא לעשות קוד חוזר, לא להעתיק קוד, לעשות copy-paste אלא להשתמש, לעשות שימוש חוזר ברכיבים והנחה בפרויקט יסבירו לכם למה הכוונה גם. בנוסף אנחנו נרצה להשתמש בתכנון מונחה עצמים כמה שאפשר, אז אני אשמח שתגדירו פרוטוקולים ותעבדו ככה לפי תבניות עיצוב מתאימות, תבניות עיצוב שלמדנו בקורס עבודה עם טייבל

  14. 03:33

    ויו מתבצעת על ידי דלגייט דיזיינק פאטרן אנחנו נרצה להפוך אובייקטים להיות סינגלטונס וכן הלאה בדיוק כמו שלמדנו בקורס בנוסף למרות שזה סוג של תבנית עיצוב אתם תרצו לכתוב את האפליקציה שלכם בארכיטקטורה של mvc כדי לבצע הפרדה מצוינת בין הממשק משתמש לבין הלוגיקה של האפליקציה אוקיי אז אלה ככה הדגשים הכלליים ומה אנחנו רוצים בגדול לעשות באפליקציה

  15. 04:03

    האפליקציה עכשיו, אתם תרצו לחשוב מה עוד, אז האפליקציה רוצה לאפשר התחברות והרשמה בשביל לאפשר לאנשים לשמור סרטים למועדפים. אז בעזרת הגדרה של משתמש, אתם תוכלו להגיד המשתמש הזה אהב סרט וככה גם הוא לא יוכל לעשות לייק לסרט פעמיים.

  16. 04:21

    סרטים שאהבתי יתבססו על היוזר הנוכחי ואיזה סרטים הוא אהב. אתם תרצו כשאתם עושים התחברות והרשמה, כמו שעשינו בפרויקט לדוגמה, אתם תרצו לבדוק כתובת אימייל תקינה ואתם גם תרצו לבדוק שהסיסמה תכיל לפחות שלוש תווים ולידעת זה פשוטה, במידה והקלט לא תקין אתם תרצו להציג למשתמש הודעה ולא לבצע התחברות או הרשמה, סתם לעשות פניות להשראת מיותרות

  17. 04:49

    כי התנאים האלה חייבים להתקיים. המסכים של ההתחברות וההרשמה יהיו בסטורי בורד נפרד כמו שלמדנו בקורס, אתם תרצו להפריד את כל הלוגיקה של רג'יסטר, רוגין וכן הלאה לקובץ סטורי בורד נפרד ולוויום קונטרולרים של רג'יסטר ורוגין ובנוסף אני מאוד ממליץ לכם לעשות ראוטר איזשהו

  18. 05:11

    קלאס של ראוטר סינגלטון ראוטר כמו שעשינו בקורס כדי לנתק לחלוטין את כל הלוגיקה של התחברות והרשמה ללוגיקה האחרת של האתר משתמש שכבר התחבר בעבר לאפליקציה אנחנו ישר נעביר אותו לעמוד של האפליקציה בטעינה ראשונית של האפליקציה אנחנו נבדוק האם המשתמש קיים ואם כן מעבירים אותו לדף המידע,

  19. 05:34

    אם לא אנחנו נעביר אותו לסטורי בורד של הלוגין והרג'יסטר. האפליקציה תשתמש באובייקט משותף סינגלטון, הכוונה לראוטר שעשינו בשיעורים.

  20. 05:46

    טוב, עכשיו איזה מסכים יש לנו באפליקציה? ככה בערך האפליקציה שלכם תיראה, אתם כמובן מוזמנים להפוך אותה להרבה יותר יפה ומעוצבת, אבל באפליקציה שלכם צריכים להיות טאבר קונטרולר, ולטאבר קונטרולר יהיו ארבע טאבים טאב אחד של ז'אנרים את הז'אנרים אתם תרצו למשוך מאתר של דמו ודיבי

  21. 06:06

    אתם לא תרצו להמציא אותם בעצמכם ובאתר של דמו ודיבי בכתובת הבאה אתם תוכלו פשוט לשלוף את כל הז'אנרים כג'ייסון וזה התרגיל הראשון שלכם לפענח את הג'ייסון בסדר בוא נסגור פה דברים שפתוחים כל הז'אנרים נמצאים כאן אז יש להם ז'אנר של אקשן לז'אנר הזה יש יש ID 28 לז'אנר של אדוונצ'ר, לז'אנר הזה יש ID של 12. אתם

  22. 06:32

    בוודאי תרצו לקחת את ה-JSON הזה ולפרסר אותו בעזרת הפרוטוקול של קודאפל. אז מה שכתוב פה לכל ז'אנר יש ID, תכף נחזור לפה, אז האפליקציה מציגה ז'אנרים ואתם תרצו שברגע שלוחצים על ז'אנר לקחת את ה-ID של הז'אנר ולעבור לעמוד של הסרטים בז'אנר הזה.

  23. 06:58

    מה זאת אומרת העמוד של הסרטים בז'אנר? הוא יצטרך עוד פעם ללכת ל-API יש לכם פה כתובת נוספת ללכת ל-API כשכאן הכתובת הזאת מציגה סרטים לפי ז'אנר ונגיד שיש לכם ז'אנר ID מספר 28 ככה אתם מציגים את הפרטים לז'אנר ID מספר 28 אם היוזר לחץ על ז'אנר של נגיד אדבנצ'ר אנחנו צריכים לדעת מה

  24. 07:20

    ה-ID של הז'אנר ואז ללכת ל-API ולהציג סרטים לפי הז'אנר. הסרטים מוצגים ב-Table View Controller כמו שאתם יכולים לראות ואתם יודעים אני ממש טייבל ויו קונטרולר אחרי שמשכתם ג'ייסון.

  25. 07:33

    עכשיו, בכל פעם שיש לנו מסך שמציג רשימות, הרבה פעמים אנחנו רוצים ללחוץ על פריט מסוים ולראות עליו מידע. במקרה הזה זו רשימה של סרטים, ולכן בלחיצה על כל סרט אנחנו רוצים להציג עוד ויו קונטרולר של Movie Details, אוקיי, פרטים על הסרט.

  26. 07:50

    בואו נעבור למסך של Movie Details, כאן אתם פשוט נשארים עם הפרטים שכבר משכתם לגבי הסרט אבל מציגים עליו את המידע, אתם מעבירים את המידע למסך של Details. פשוט בלחיצה על סרט באים, מציגים את המידע על הסרט בעמוד נפרד, ופה אתם יכולים גם להציג את התקציר של הסרט למקרה שהוא משך למשתמשים שלנו טיים.

  27. 08:12

    אוקיי, אז זה בעצם החלק הזה של הז'אנרים. דרך אגב, יש פה עניין של תמונות גם שלא דיברנו עליו. אתם רואים, פה יש לכם תמונה וכאן יש לכם תמונה, אז איך אנחנו יכולים להציג תמונות?

  28. 08:26

    המידע על הסרטים, בואו ניכנס פה רגע לכתובת. אתם מקבלים פה ג'ייסון עכשיו בג'ייסון יש לנו את רזלט שזה מערך של סרטים מערך של ג'ייסון של סרטים ופה בפנים יש לנו פשוט כל מיני אובייקטים של סרטים כל אובייקטים של הסרטים במקרה הזה סרטים לפי ז'אנר כאן יש לנו פוסטר פאף אתם רואים שזה נתיב חלקי לתמונה זה לא הכתב את המילה על התמונה כי

  29. 08:50

    אם אני אקליט את זה בדפדפן אני לא אקבל תמונה כדי להגיע לתמונות אתם תרצו ללכת פה להסבר הזה שכתבתי לכם אם יש לכם פוסטר פאף נתון מסוים כדי לקבל את התמונות אתם תרצו לשרשר את הפוסטר פאף שכתוב פה לכתובת של התמונות באתר הכתובת של התמונות היא htps/image.moviedb.org/t/p ופה אתם

  30. 09:20

    רוצים לקבל תמונות ברוחב של 500 פיקסלים עבור איזשהו פוסטר פאפ מסוים מה זאת אומרת נגיד יש לכם את הפוסטר פאפ הזה אז אתם מדביקים אותו לפה בכתובת ואז תוצאה תהיה שלקחתם את הכתובת ושרשרתם לה את הפוסטר פאף, ומפה אתם יכולים לקבל את התמונה.

  31. 09:38

    אז אם תלחצו פה על הלינק, אתם תראו שהלינק הזה באמת נותן לי את התמונה. הפוסטר פאף לבדו לא, אבל ברגע שאתם לוקחים את זה ומדביקים לתחילית פה, לכתובת המידע, אז אתם מקבלים את הכתובת של התמונה.

  32. 09:52

    את התמונות אתם תרצו להציג בעזרת ספרייה להצגת תמונות, למשל SD-Waveימנט שכיסינו בקורס, היא תהיה מאוד מאוד יעילה ונוחה.

  33. 10:02

    טוב, אז כיסינו פה את הטאפ של ז'אנרס, עכשיו יש לנו ב-API גם אפשרות לקבל מידע על סרטים פופולריים. שאילתה להצגת סרטים פופולריים היא השאילתה שמוצגת כאן, ברגע שאתם נכנסים ל-API אתם מקבלים רשימה אחרת של סרטים, את הסרטים הפופולריים, לא סרטים לפי ז'אנר אלא את כל הסרטים הפופולריים,

  34. 10:22

    הכתובת היא /movie/popular, ובכל שאילתא אנחנו רוצים כמובן להכניס את הפרמטר הזה של ה-API, גם כאן בכל פעם שאנחנו לוחצים על סרט אנחנו רוצים להציג לגביו מידע אז אנחנו נשתמש שימוש חוזר במובי טייבלד ויו קונטרולר וגם במובי דיטלס ויו קונטרולר.

  35. 10:42

    אנחנו לא רוצים לייצר מסכים כפולים סתם ויו קונטרולרים כפולים,

לקורס המלא: קורס פיתוח אפליקציות לאייפון

ההרצאה הקודמת: ניטור מיקום המשתמש וציור מסלול קוי על המפה

הרצאות קשורות מקורסים אחרים

  • מבוא לקורס פיתוח אפליקציות לאנדרואיד ולאייפון על Flutter
  • פרויקט גמר לקורס Hyper-V
  • מבוא לקורס QA
  • מבוא לקורס

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA
  • קורס פלאטר - Flutter - שפת DART של גוגל למובייל - פיתוח אפליקציות לאנדרואיד ואייפון
  • קורס PhoneGap - פיתוח אפליקציות לאנדרואיד ואייפון