PracticU

הורדת תמונות מהאינטרנט ב-Xcode

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode › הורדת תמונות מהאינטרנט ב-Xcode
מילון מושגים:
Xcode - סביבת הפיתוח של אפל לכתיבת אפליקציות ל-iOS ול-macOS.
JSON - פורמט טקסט קריא לייצוג נתונים מובְנים כזוגות מפתח-ערך, נפוץ להחלפת מידע בין שרת ללקוח.
UTF-8 - שיטת קידוד נפוצה של Unicode, שמייצגת כל תו במספר משתנה של בתים ותואמת ל-ASCII.
URL - הכתובת שמזהה משאב באינטרנט, למשל דף אתר, וכוללת פרוטוקול, שם מארח ונתיב.
HTTPS - הגרסה המאובטחת של HTTP, שמצפינה את התקשורת בין הדפדפן לשרת בעזרת TLS ומאמתת את זהות האתר.
אסינכרוני - אופן פעולה שבו פעולה ארוכה רצה ברקע והתוכנית ממשיכה בלי להמתין לה, ומטופלת כשתסתיים.
תהליכון - יחידת ביצוע בתוך תהליך, המאפשרת להריץ כמה מהלכים במקביל ולחלוק את אותו זיכרון.
MVC - דפוס ארכיטקטורה שמפריד יישום לשלושה חלקים: מודל (נתונים), תצוגה (View) ובקר (Controller).

הורדת תמונות מהאינטרנט ב-Xcode
הדוגמה בשיעור הזה מחברת את GCD לעבודה מעשית: טוענים מהאינטרנט רשימה של תמונות לפי כתובות מקובץ JSON ומציגים אותן בתוך scroll view עם stack view. בהתחלה האפליקציה נתקעת, ואחר כך מתקנים אותה עם GCD.
השלבים העיקריים
1. הנתונים: באתר שמייצר נתוני דוגמה מבקשים עשר כתובות של תמונות דמה, כמערך JSON ללא ערכי null.
2. פענוח: struct בשם MyImage עם name מסוג String, ו-Decodable. את ה-JSON מדביקים כמחרוזת רב-שורות, ממירים ל-Data ב-UTF-8 ומפענחים למערך. URL הוא Decodable בעצמו, ולכן אפשר להגדיר את השדה ישירות כ-URL.
3. HTTP: אפל חוסמת כתובות HTTP לא מאובטחות. האתר בדוגמה תומך ב-HTTPS. מי שחייב, יכול להוסיף ב-Info.plist את App Transport Security Settings עם Allow Arbitrary Loads, אך אפל לא ממליצה על כך.
4. scroll view ב-code: יוצרים UIScrollView ומכבים את translatesAutoresizingMaskIntoConstraints. מצמידים אותו לארבעת הצדדים של ה-view. בתוכו UIStackView אנכי עם alignment בערך fill ו-distribution בערך fillProportionally, מוצמד ארבעה צדדים ל-scroll view. נדרש גם אילוץ שהרוחב של ה-stack view שווה לרוחב ה-scroll view, אחרת הגלילה לא עובדת.
5. הורדת התמונות: לכל כתובת: Data(contentsOf:), יצירת UIImage מה-Data, יצירת UIImageView ושימוש ב-addArrangedSubview של ה-stack view.
6. ללא GCD: הממשק תקוע זמן רב וכל התמונות מופיעות בבת אחת.
7. עם GCD: מעבירים את ההורדה לתור גלובלי. הקוד שמוסיף את התמונה לממשק חייב לרוץ ב-DispatchQueue.main.async, אחרת מתקבלת שגיאה על שינוי layout מ-thread משני. אחרי התיקון התמונות מופיעות אחת אחרי השנייה ואפשר לגלול.
שימו לב
כל הקוד נכתב כאן ב-View Controller, וזה לא מומלץ. העבודה עם ה-JSON וההורדה צריכות להיות בקבצים נפרדים בארכיטקטורת MVC, וזה נושא השיעור הבא עם callbacks.
אחרי השיעור אפשר להוריד תמונות מכתובות ברקע ולהציג אותן בגלילה בלי לתקוע את הממשק.
השיעור הבא בקורס: עבודה עם Callbacks עבור משימות אסינכרוניות

פרקי ההרצאה: הורדת תמונות מהאינטרנט ב-Xcode

  1. 00:00

    דוגמה מעשית עם GCD ותמונות

  2. 00:35

    כתובות תמונות לדוגמה מ-Mockaroo

  3. 01:48

    פענוח ה-JSON ל-struct של MyImage

  4. 04:02

    URL כטיפוס Decodable

  5. 04:58

    HTTP ו-App Transport Security ב-info.plist

  6. 05:58

    הצגת התמונות ב-Stack View עם גלילה

תמלול ההרצאה: הורדת תמונות מהאינטרנט ב-Xcode

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

  1. 00:02

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

  2. 00:23

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

  3. 00:38

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

  4. 00:53

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

  5. 01:08

    ופה אנחנו רוצים פשוט לבחור ב-image, בואו נחפש פה. יש לנו פה dummy image url, אוקיי. אז אני מקבל פה json, והפורמט הוא בין 100 ל-250 בגודל.

  6. 01:22

    אנחנו רוצים בעצם לקבל מערך, ואנחנו לא רוצים ערכים של null, ובואו נעשה רגע preview, אוקיי.

  7. 01:37

    אז קיבלתי פה 10 urlים, נכון? בתור מערך של דברים כאלה. אתם יודעים כבר לעבוד עם json, אז זה לא אמור להיות משימה מסובכת.

  8. 01:44

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

  9. 02:06

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

  10. 02:27

    עכשיו, זה סטרינג, נכון? אנחנו רוצים להפוך את זה לדאטה כבר, אז אפשר להגיד נקודת דאטה, Using Encoding של UTF-8, ועכשיו ה-JSON הזה הוא כבר אופציונל דאטה, בואו נבדוק, יפה.

  11. 02:41

    אנחנו רוצים, אם אין JSON, אם אין דאטה, אנחנו לא רוצים להמשיך לעבוד, זה בטוח יעבוד נכון, אז בואו נעשה guard let, נקרא לזה JSON data, שווה לדבר הזה, else return פה למטה, וכרגע יש לי כבר דאטה.

  12. 02:58

    אנחנו מכירים את זה משיעורים קודמים. אז אני אגיד guard.let.images שווה try ואנחנו נבקש מJSON Decoder חדש שיעשה לנו Decode לתמונות התמונות הם מערך של MyImage זה הטיפוס נקודה סלף כמובן מהדאטה של JSON דאטה אז עכשיו יש לי בעצם את כל התמונות כסטרינגים רגע אלס ריטר נכון וגם אנחנו נרצה לשבור את השורה

  13. 03:30

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

  14. 04:10

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

  15. 04:36

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

  16. 04:58

    מאתרים לא מאובטחים, מאתרים שיש להם כתובת של HTTP רגיל, הייתי צריך ללכת לקובץ הגדרות של הפרויקט, הלוא הוא ה-info.plist, וכאן להוסיף שורה, אז פלוס.

  17. 05:15

    רגע, בוא נלחץ על זה איכשהו. ואנחנו רוצים להוסיף app transport security settings, ובתוך זה אני אפתח את זה כאן, וכאן בפנים אנחנו רוצים להגיד allow arbitrary loads true, אוקיי? אחרת, פשוט, כאן אנחנו רוצים לשנות את זה ל-yes או ל-true.

  18. 05:38

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

  19. 05:53

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

  20. 06:10

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

  21. 06:19

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

  22. 06:41

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

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

ההרצאה הקודמת: עבודה עם GCD - עבודה אסינכרונית ב-Xcode

ההרצאה הבאה: עבודה עם Callbacks עבור משימות אסינכרוניות

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

  • הורדת ESXi 8
  • הצגת תמונות באפליקציה
  • הורדת דאמפים - Dumps
  • הורדת ISO של לינוקס להתקנה

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

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