לדלג לתוכן

שיעור 05: אפליקציות ותהליכים

חלק ב': מדריך העברה למרצה


1. האנטומיה של אפליקציה ב-macOS: מ-Packages ל-Bundles

מטרת השיעור (Objective): להמחיש לתלמידים את אשליית מערכת הקבצים של macOS. התלמידים יבינו את ההבדל בין קובץ רגיל, ל-Package (תיקייה מתחזה לקובץ) ול-App Bundle (סביבה סגורה המכילה קוד), ויוכיחו זאת בעזרת הטרמינל.

הנושא הזה הוא ה"וואו" הראשון של השיעור — הרגע שבו אנשי IT ותיקים מווינדוס מבינים שהפילוסופיה של macOS שונה מהיסוד. הנקודה המרכזית להנחיל היא שאפליקציה ב-Mac היא לא קובץ — היא תיקייה שמתחזה. מכאן נגזר הכל: איך מתקינים, איך מאפסים, ולמה "מחיקה" לא עושה את מה שציפינו.

תסריט שיחה (Discussion - Script):

  • "בווינדוס, התרגלנו שתוכנה היא קובץ הפעלה (EXE) שצריך לפזר את עצמו בכל המחשב."
  • "ב-macOS הפילוסופיה שונה לחלוטין. אפל יצרה אשליה שנקראת Package (חבילה)."
  • "מה זה Package?"
  • "זו בעצם תיקייה שלמה שמתחזה לקובץ יחיד, כדי למנוע מאיתנו להרוס אותה בטעות."
  • "למשל: מסמך Pages מורכב או ספריית תמונות ענקית הם בעצם תיקיות."
  • "אז מהי אפליקציה במק?"
  • "כל אפליקציה במק (סיומת .app) היא סוג ספציפי של Package שנקרא Bundle."
  • "יש לה מבנה פנימי קבוע, והיא מכילה את הקוד ואת כל המשאבים הגרפיים שלה בתוך עצמה."
  • "עובדה היסטורית (DeepDive): המבנה הזה הגיע ממערכת ההפעלה NeXTSTEP שאפל רכשה בסוף שנות ה-90."
  • "בואו נוכיח שאפליקציה היא בסך הכל תיקייה!"

הדגמה מעשית (Demonstration):

  • הדגמה גרפית (Finder):
  • פתח את תיקיית Applications.
  • לחץ קליק ימני על אפליקציה מוכרת (למשל Safari או Zoom).
  • בחר ב-Show Package Contents.
  • פתח את תיקיית Contents והצג לכיתה את התיקיות הפנימיות: MacOS (שם הקוד רץ) ו-Resources (האייקונים והתמונות).
  • הוכחה ב-Terminal:
  • פתח Terminal.
  • נווט לתיקיית האפליקציות: cd /Applications
  • הרץ את הפקודה המלאה: ls -la
  • הראה לתלמידים שהרשאות השורה של אפליקציה (כגון Safari.app) מתחילות באות d (למשל drwxr-xr-x). האות d מייצגת Directory (תיקייה).
  • "הוכחנו שאפליקציה היא פשוט תיקייה!"
Instructor Deep-Dive (מידע טכני מורחב)
  • הארכיטקטורה הפנימית: בתוך כל App Bundle ישנו קובץ חובה בשם Info.plist. קובץ זה מגדיר למערכת את הזהות (Bundle ID) ואילו קבצים התוכנה יודעת לפתוח. תיקייה קריטית נוספת היא _CodeSignature השומרת את כלל חתימות האבטחה (CDHash) של הרכיבים בפנים.
  • ההבדל בין Package ל-Bundle: כל Bundle הוא Package (מסתיר תיקייה), אך לא כל Package הוא Bundle. רק Bundle מכיל קוד הפעלה מובנה ויכול להזניק תהליך למעבד.

2. סוגי התקנות: חבילות (PKG), תמונות דיסק (DMG) ו-App Store

מטרת השיעור (Objective): התלמידים יכירו את שלושת ערוצי ההתקנה המרכזיים ב-macOS, ויבינו מתי משתמשים בתמונת דיסק (DMG) לעומת מתקין מערכתי (PKG) ואת ההבדל בהרשאות הנדרשות. הם יכירו גם את השינויים החדשים ב-Gatekeeper ב-macOS Tahoe.

כיוון: אחרי שהכיתה הבינה שאפליקציה היא Bundle — תיקייה — ההתקנה הופכת להגיונית: כל מה שצריך לעשות הוא להעביר את התיקייה הזו למקום הנכון. DMG ו-PKG הם שתי דרכים שונות לעשות בדיוק את זה, עם הבדל מהותי אחד: מי שצריך הרשאות ומי לא.

← זוכרים את Gatekeeper מהתיאוריה בשיעור 03? כאן הוא פוגש אתכם בשטח.

הנקודה הקריטית לסיים איתה היא שינוי ה-Gatekeeper ב-Tahoe — זה מה שיעלה בשטח.

תסריט שיחה (Discussion - Script):

  • "עכשיו שאנחנו מבינים שאפליקציה היא פשוט תיקייה מוכללת, בואו נדבר על איך מתקינים אותה."
  • "ב-macOS, יש לנו שלוש דרכים שונות להפיץ ולהתקין את ה-Bundles האלו:"
  • הדרך הראשונה והפשוטה ביותר היא ה-App Store.
    • "בדיוק כמו באייפון – מחפשים, לוחצים 'הורד' וסיימנו. הכל נבדק ומאובטח על ידי אפל."
  • הדרך השנייה היא קובץ DMG (Disk Image).
    • "נשתמש בזה לרוב לתוכנות מהאינטרנט (דפדפן, נגן מדיה)."
    • "עובדה היסטורית (DeepDive): קבצי תמונות דיסק אלו פותחו במקור כדי לייצג תקליטונים (Floppy Disks) לצורכי ייצור ושכפול במפעלים!"
    • "זה בעצם Volume (ווליום) וירטואלי. לחיצה כפולה עוגנת (Mount) אותו, כאילו הכנסנו כונן אמיתי."
    • "כדי להתקין, פשוט גוררים את האייקון (שראינו שהוא Bundle) לתיקיית Applications."
    • "בסוף התהליך: חובה ללחוץ הוצא (Eject) על ה-Volume הווירטואלי."
  • הדרך השלישית היא חבילות התקנה (PKG).
    • "דומות למתקינים המוכרים מווינדוס."
    • "משמשות כשתוכנה צריכה לשים קבצים במקומות נסתרים, כגון תהליכי רקע מחוץ ל-Bundle."
    • "מכיוון שזה משנה את ליבת המערכת – כמעט תמיד תידרש סיסמת מנהל (Admin)."
  • "רגע, מה לגבי אבטחה?"
  • "אפל אוכפת את ה-Gatekeeper ונוטריזציה (Notarization). אם אפליקציה זדונית או שונתה אפילו בתו אחד ב-Bundle שלה, היא לא תיפתח."
  • "עדכון קריטי ב-Tahoe: בגרסאות קודמות, יכולתם לעקוף את Gatekeeper באמצעות קליק ימני ובחירה ב-'Open'. ב-macOS Sequoia ו-Tahoe, האפשרות הזו הוסרה לחלוטין. חובה לגשת אל System Settings > Privacy & Security וללחוץ על 'Open Anyway'."

הדגמה מעשית (Demonstration):

  • הדגמת DMG:
  • הורד קובץ .dmg מהאינטרנט.
  • לחץ לחיצה כפולה. הראה את ה-Volume החדש בסרגל הצד ב-Finder תחת Locations.
  • גרור את האפליקציה ל-Applications (הצג את חלון ההעתקה).
  • הוצא (Eject) דרך קליק ימני > Eject.
  • הפעל את האפליקציה. הצג את אזהרת ה-Gatekeeper והסבר שזו הגנה שגרתית.
  • אתגר Tahoe: נסה להפעיל אפליקציה שאינה חתומה, הראה שקליק ימני > Open לא עובד יותר, ונווט ל-System Settings > Privacy & Security כדי להדגים לחיצה על "Open Anyway".
  • הדגמת PKG:
  • הפעל קובץ .pkg. הראה את מתקין המערכת ואת שלביו.
  • הדגם כיצד הוא עוצר ומבקש סיסמת Admin.
Instructor Deep-Dive (מידע טכני מורחב)
  • Code Signing & CDHash: מנגנון ה-Gatekeeper מסתמך על ה-Code Directory Hash (CDHash) באלגוריתם SHA-256 (שנשמר בתוך תיקיית _CodeSignature של ה-Bundle). המערכת מבצעת בדיקה בזמן אמת (Lazy checking) ומוודאת כל דף זיכרון בעת טעינתו ל-RAM.
  • App Translocation: אם משתמשים מפעילים אפליקציה ישירות מ-DMG או מההורדות מבלי להזיז אותה, macOS מבצעת רנדומיזציה לנתיב ב-/private/var/folders/ כדי למנוע טעינת ספריות זדוניות סמוכות ל-Bundle. תמיד הנחו: גררו ל-Applications!
  • Rosetta 2 (OAH): זהו לא אמולטור, אלא מתרגם Ahead-Of-Time (AOT). התהליכים מבודדים לחלוטין (אין ערוב של קוד Intel ו-ARM באותו תהליך).

3. ארגזי חול (Sandboxing): איפה אפליקציות שומרות את המידע שלהן ואיך לאפס אותן

מטרת השיעור (Objective): התלמידים יבינו את מנגנון ה-App Sandboxing המונע מאפליקציות גישה בלתי מורשית, וילמדו לחקור דרך ה-Finder היכן נשמר המידע המקומי של האפליקציה כדי לאפס אותה בהצלחה ללא צורך בהסרה מוחלטת של ה-Bundle עצמו.

כאן נגמרת התיאוריה ומתחילה הנקודה שהכי חשובה לאנשי IT בשטח: כשאפליקציה "משתגעת" — מה עושים? הטעות הנפוצה בקרב טכנאים שמגיעים מווינדוס היא למחוק את האפליקציה ולהתקין מחדש. ב-Mac זה לא פותר כלום, כי ה-Bundle הוא רק הקוד — המידע השגוי יושב ב-Container, במקום אחר לגמרי. זו הנקודה להדגיש.

תסריט שיחה (Discussion - Script):

  • "אפל לוקחת אבטחה ופרטיות מאוד ברצינות."
  • "לפני שנדבר על אבטחה מודרנית - איפה אפליקציות 'רגילות' (ללא Sandbox) שומרות את ההגדרות שלנו?"
  • "לרוב הן שומרות קבצי plist תחת ~/Library/Preferences/."
  • "מה הבעיה עם המודל הזה?"
  • "לאפליקציה יש הרשאות בדיוק כמו למשתמש שמריץ אותה. יש לה גישה חופשית לכל הקבצים שלנו (סכנה מוחשית של כופרה או דליפת מידע)."
  • "כדי לפתור זאת, הציגה אפל את מנגנון ה-Sandbox (ארגז חול)."
  • "אפליקציות מה-App Store, ורבות מהאינטרנט, חיות בסביבה סגורה ומבודדת."
  • "אנלוגיה (DeepDive): תחשבו על ה-Container של האפליקציה כמו בובת מטריושקה. האפליקציה מקבלת תיקיית 'Home' קטנה משלה וחיה באשליה שהיא שולטת במערכת, כשבפועל היא כלואה."
  • "הן לא יכולות לקרוא מסמכים בלי אישור מפורש (באמצעות ה-Powerbox)."
  • "היכן נשמרות ההגדרות והמטמון (Cache)?"
  • "במקום לפזר קבצים, ה-Mac יוצר 'תיקיית בית וירטואלית'."
  • "היא נמצאת בנתיב נסתר בשם Containers בתוך ספריית ה-Library של המשתמש."
  • "מה קורה כשאפליקציה נתקעת או משתבשת?"
  • "בווינדוס – מסירים ומתקינים מחדש."
  • "ב-Mac – האפליקציה היא הרי רק Bundle, תיקייה אחת ב-Applications. מחיקת ה-Bundle לא מסירה את ההגדרות והמידע השגוי השמור ב-Container."
  • "הפתרון הנכון: לגשת ל-Container של האפליקציה דרך ה-Finder ולמחוק אותו (ה-Bundle נשאר במקומו)."
  • "בפתיחה הבאה של האפליקציה: היא תיצור Container חדש ותחזור להגדרות יצרן (Factory Defaults)!"

הדגמה מעשית (Demonstration):

  • חשיפת תיקיית Library:
  • פתח את ה-Finder. לחץ על תפריט ה-Go. החזק את Option כדי לחשוף את ה-Library ולחץ עליה.
  • סקירת תיקיות:
  • הראה תיקיות קלאסיות: Preferences, Application Support. נווט אל Containers.
  • (הערה למדריך: הזכר לתלמידים את שיעור 2 – זוהי תיקיית ה-Library במרחב האישי שלהם. כאן האפליקציות שומרות את העדפות המשתמש (Plists). בשיעורים הבאים נלמד לעומק על חלוקת ה-Domains במערכת, המטרה כאן היא היכרות תפעולית לפתרון תקלות).
  • בחינת Containers:
  • הראה שהתיקייה מלאה בארגזי חול (לרוב מתחילים ב-com.apple או שמות מפתחים).
  • היכנס לאחד מהם, והראה את מבנה התיקיות הפנימי (Desktop, Documents, Downloads). הסבר שאלו קיצורי דרך (Symlinks) שמיועדים להטעות את האפליקציה הכלואה.
  • איפוס חי:
  • פתח אפליקציה (כמו Keynote או Apple Configurator). שנה הגדרה.
  • צא ממנה לחלוטין. מחק את ה-Container שלה.
  • פתח מחדש והראה שהיא ריקה עם מסך 'ברוכים הבאים'.
Instructor Deep-Dive (מידע טכני מורחב)
  • Powerbox: ממשק מערכת מאובטח לבחירת קבצים. כאשר משתמש בוחר קובץ, ה-Powerbox מחזיר אסימון מאובטח לאפליקציה ומעניק לה גישה חד-פעמית אליו.
  • פליסטים זומביים (cfprefsd): תהליך הרקע הזה שומר פליסטים ב-RAM לטובת ביצועים. אם טכנאי מוחק פליסט בעוד האפליקציה פועלת, התהליך ישחזר אותו מיד מהזיכרון. סדר נכון: לצאת מהאפליקציה, למחוק את ה-Container, ובמקרה הצורך להריץ killall cfprefsd לאיפוס המטמון.
  • TCC מול Sandbox: ארגז החול מגביל גישה למערכת; TCC מנהל הרשאות פרטיות קריטיות (מצלמה, מיקרופון). גם אפליקציה שאינה ב-Sandbox חייבת לציית ל-TCC.

4. אבחון תקיעות: Force Quit וטיפול באפליקציות קורסות (Not Responding)

מטרת השיעור (Objective): המטרה היא לתת לתלמידים כלים מבוססי GUI לביצוע יציאה מאולצת (Force Quit) ופתרון תקיעות באפליקציות שמסרבות להגיב, תוך שימוש במנגנונים המובנים במערכת.

זה הנושא הכי "ידיים" בשיעור — אנשי IT שעות תמיכה יומיומיות. כדאי לשאול בפתיחה: "מה אתם בדרך כלל עושים כשאפליקציה נתקעת?" — מקבלים תשובות כמו "לחץ X", "ריסטארט". ואז להראות שיש שלוש דרכים נקיות, ולכל אחת יתרון. הנקודה הנוספת לא לשכוח: ההבדל בין Quit ל-Force Quit ברמת הסיגנל — זה מה שמסביר למה Force Quit לא שומר קבצים.

תסריט שיחה (Discussion - Script):

  • "אפליקציה מפסיקה להגיב פתאום? סמן העכבר הופך ל'כדור ים צבעוני'."
  • "לחיצה על X אדום או Command + Q לא תעזור."
  • "המערכת מזהה שהאפליקציה בסטטוס 'Not Responding'."
  • "כאנשי IT, קיימות 4 רמות של כלים להתמודד עם המצב, מהפשוט ביותר ועד לשורת הפקודה:"
  • מנגנון ה-Force Quit (יציאה מאולצת):
    • "הכלי המהיר ביותר, נגיש דרך תפריט התפוח או בקיצור: Command + Option + Escape."
    • "מציג אפליקציות תקועות באדום ומאפשר לחסל אותן."
  • ה-Dock (טריק קטן אך שימושי):
    • "לחיצה ימנית + החזקת Option משנה את תפריט ה-Quit ל-Force Quit."
  • מנטר הפעילות (Activity Monitor) - למטרות אבחון:
    • "לא רק מחסל — מסביר למה האפליקציה נתקעה."
    • "בודקים: האם היא שואבת 100% CPU? אוכלת זיכרון? או שאולי היא ממתינה לשרת (Open Files and Ports)?"
  • שורת הפקודה (Terminal):
    • "כשה-GUI קופא לגמרי, או מרחוק — אל תפחדו לפתוח טרמינל."
    • "פקודה פשוטה כמו killall [AppName] עושה את אותה עבודה מבלי להזיז את העכבר."

הדגמה מעשית (Demonstration):

  • מנגנון Force Quit ו-Dock:
  • פתח מספר אפליקציות. הקש Command + Option + Escape מול הכיתה והראה את החלון.
  • עבור ל-Dock, עשה קליק ימני על אייקון, החזק את Option (⌥) והדגם איך "Quit" מתחלף ל-"Force Quit".
  • שימוש ב-Activity Monitor:
  • פתח Activity Monitor והראה איך בודקים את מצב העיבוד (CPU) והזיכרון.
  • הראה את כפתור ה-i לבדיקת Open Files and Ports, ולאחר מכן לחץ על ה-X להדגמת ההבדל בין Quit ל-Force Quit.
  • שימוש ב-Terminal (הדגמה קצרה ללא פחד):
  • פתח את הטרמינל, פתח אפליקציה כלשהי ברקע (למשל Calculator).
  • הקלד killall Calculator והראה כיצד האפליקציה נסגרת במיידית ללא מגע עכבר.
Instructor Deep-Dive (מידע טכני מורחב)
  • Preemptive Multitasking & WindowServer: ה-WindowServer מנהל את הממשק הגרפי. אם ה-Thread הראשי של אפליקציה נתקע למשך 2-4 שניות, ה-WindowServer מצייר אוטומטית את 'כדור הים'.
  • הבדלים בסיגנלים:
  • Quit: שולחת SIGTERM (15). סגירה נקייה עם שמירת קבצים.
  • Force Quit: שולחת SIGKILL (9). הקרנל רוצח את התהליך מיידית ללא שמירה.
  • תהליכים זומביים (בתוך הקרנל): אם ה-Thread נתקע במרחב הליבה (למשל בהמתנה לכונן חיצוני תקול), הליבה לא תאשר קבלת SIGKILL כדי למנוע Kernel Panic. במצבים אלו האפליקציה לא תיסגר למרות ה-Force Quit עד לניתוק החומרה הפגומה או ביצוע Hard Reboot.

5. תיבול ארגוני: הפצת אפליקציות דרך VPP וקטלוג Self-Service

מטרת השיעור (Objective): להבין כיצד ארגונים מנהלים רכש והפצה של תוכנות באמצעות מנגנוני VPP מתוך Apple Business Manager, וכיצד משתמשים יכולים להתקין אפליקציות ללא הרשאות אדמין באמצעות שירות עצמי (Self Service).

זהו ה"תיבול ארגוני" של השיעור — הקטע שמחבר את כל מה שלמדנו על אפליקציות לעולם ה-Enterprise. הנקודה המרכזית: בארגון, לא המשתמש מתקין — ה-MDM מתקין. Self Service הוא הפנים שהמשתמש רואה, אבל מאחורי הקלעים זה Root-level daemon. כדאי לסיים עם שאלת "מה קורה אם VPP תקוע על Pending?" — זו שאלת ה-Tier 1 הכי שכיחה.

תסריט שיחה (Discussion - Script):

  • "בארגונים גדולים, לעובדים לרוב אין הרשאות מנהל (Admin)."
  • "כאן נכנסים לתמונה הכלים הארגוניים – VPP ו-MDM."
  • "איך זה עובד מאחורי הקלעים?"
  • "ה-IT רוכש רישיונות (לחינם ובתשלום) דרך Apple Business Manager."
  • "הרישיונות משודכים לשרת ה-MDM הארגוני."
  • "ה-MDM מפיץ את האפליקציות שקטה (Silent Install) למחשבים."
  • "המשתמשים לא צריכים להזין את ה-Apple ID האישי שלהם."
  • "מהי חנות ה-Self Service?"
  • "חנות אפליקציות פרטית של הארגון לתוכנות מאושרות."
  • "משתמשים בוחרים ולוחצים 'התקן'."
  • "אין צורך בסיסמת Admin: ה-MDM מתקין בשמם עם הרשאות מערכת ברקע."

הדגמה מעשית (Demonstration):

  • אפליקציית Self Service:
  • פתח את ה-Self Service בעמדת ההדגמה והראה את הקטלוג.
  • התקנה מאובטחת:
  • לחץ 'התקן' על אפליקציה נבחרת והראה התקנה ללא בקשת סיסמת Admin.
  • נווט ל-Applications ב-Finder והראה את התוכנה החדשה.
Instructor Deep-Dive (מידע טכני מורחב)
  • תוקף VPP Token: במרבית המקרים שבהם התקנה נתקעת בסטטוס "Pending", הדבר נובע מ-Token VPP שפג תוקפו ב-ABM, או מנהל מערכת ששינה את הסיסמה לפורטל.
  • חסימת CDN בפיירוול: לעיתים סוכן ה-MDM מעביר את הפקודה בהצלחה, אך תהליך הרקע appstored נחסם על ידי הפיירוול הארגוני. הטריק הידוע: נתק את המק מה-Wi-Fi, חבר אותו ל-Hotspot מסלולרי. אם האפליקציה מחליקה פנימה, הבעיה היא בצוות אבטחת הרשת.
  • Managed App Configuration: מאפשר ל-MDM להזריק קובץ תצורה (XML/Plist) יחד עם האפליקציה לחוויית Zero-Touch מושלמת למשתמש.

סיום שיעור 5: ודא שיש לתלמידים שאלות לגבי מנגנון ארגזי החול והסרת האפליקציות, והסבר שבמעבדה המעשית (Asset D) הם יתנסו במו ידיהם בחשיפת האנטומיה של ה-Bundle, בהתקנות מחבילות, יתמודדו מול ה-Gatekeeper הקשוח ב-Tahoe ויבצעו אילוץ סגירה ואבחון בעזרת הכלים הגרפיים.