מה חדש למפתחים במערכת הפעלה 5.0?
גיא שביב |
אוק 12, 2011
מערכת הפעלה 5.0 מביאה למשתמשים מספר תכונות חדשות כמו iCloud וסינכרון על גבי Wi-Fi. מעבר לחידושים ברמת המשתמש, כמפתחים SDK 5.0 מביא לנו ספריות חדשות וקריאות חדשות, מעל 1500 מהם. במאמר זה אסקור בכלליות את הספריות והקריאות החדשות שנהיו זמינות למפתחים תחת מערכת הפעלה 5.0. בכתבות המשך נפרט יותר את השימוש באפשרויות החדשות הללו, כעת אנו רוצים בעיקר להכיר מה חדש.
אז לעבודה.
השינוי הגדול ביותר לנו כמפתחים שמביאה SDK 5.0 הוא ספירת התיחסויות אוטומטית (ARC). עד ל–SDK 5.0 נדרשנו לנהל זכרון בעצמנו. אמנם Cocoa עזר לנו מאוד בזה עם retain/release/autorelease אשר ספרו בשבילנו כמה התיחסויות יש לעצם נתון ושחררו את הזכרון כאשר לא נותרו התיחסויות, אבל עדיין נדרשנו לקרוא ל retain/release במקומות הנכונים כדי שהכל יעבוד כמו שצריך.
אפל הבינו כנראה שניהול זכרון הוא אחד המסוכות הגדולות למפתחים באייפון, במיוחד כאשר משווים את אובג'קטיב–סי לשפות כמו ג'בה או C# שבהם יש אוסף אשפה אשר פותר את המפתחים מניהול זכרון. אפל מאמינים שלאוסף אשפה אין מקום על פלטפורמות ניידות כמו האייפון בגלל האופי הבזבזני והלא מבוקר של אוספי אשפה. תחת אוסף אשפה, אפליקציות בד'כ משתמשות ביותר זכרון (עד שהאוסף משחרר זכרוּן לא מנוצלֹ), מבזבזות יותר בטריה (מהצורך להריץ את האלגוריתם של אוסף האשפה) וסובלות בביצועים (כאשר האוסף מתעורר).
הפתרון של אפל הוא להשאר עם אותה שיטה של ספירת התיחסויות אבל לתת למהדר (compiler) לכתוב את הקריאות לretain/release/autorelease באופן אוטומטי. התוצאה שלנו המפתחים יורדת מטלה, וניהול הזכרון מתבצע באופן אוטומטי עבורינו כולו בזמן הקומפילציה ללא צורך להריץ אוסף אשפה או כל תהליך אחר בזמן הריצה. למרות הוסרה מעלינו המטלה לנהל זכרון, ניהול הזכרון מבוצע בצורה יעילה ואינו דורש יותר זכרון או הספק בזמן הריצה.
נשמע מעניין? אפל כל כך מאמינים ב–ARC שהם הפכו את זה לברירת המחדל לפרויקטים חדשים ב–Xcode. את הכתבה הבאה אקדיש ל–ARC ואז נלמד איך להשתמש בזה, איפה זה עובד ואיפה לא.
ובמקום השני...
ישנם הרבה חידושים המתמודדים על המקום השני כחידוש השני הכי חשוב לנו כמפתחים, אני בחרתי למקום השני את ה–Storyboarding. הסיבה שבחרתי את זה למקום השני הוא שמכל החידושים זה השינוי שיכול להקל הכי הרבה עלינו המפתחים (למעט ARC).
עד עכשיו יכולנו בעזרת Interface Builder ליצור nib אשר הכיל עיצוב של מסך באפליקציה. על ידי טעינת קובץ ה nib בזמן הריצה קבלנו מימוש של כל האוביקטים שהגדרנו בקובץ וחסכנו שורות קוד רבות. כעת בעזרת Storyboard אנו יכולים להגדיר ב–IB את הממשק של התוכנה כולה, כולל המעברים ממסך למסך. למעשה ניתן לחשוב על storyboard כעל אוסף של קבצי nib עבור האפליקציה כולה, אולם למעשה ה–storyboard הוא יותר מכך שכן הוא מכיל גם אינפורמציה על המעברים ממסך למסך. ה–storyboard מאפשר להגדיר אפליקציה שלמה ב–IB כולל המעברים בין המסכים ללא כתיבה של שורת קוד.
על מנת להתחיל להשתמש ב–storyboard אין צורך לשנות את כל האפליקציה' ניתן להשתמש ב–storyboard רק עבור חלק מסוים של האפליקציה. זאת עושים על ידי טעינה של storyboard וגישה אל ה–viewController הראשון שבו. כאשר מכינים storyboard ב–IB אנו מכניסים מספר viewControllers ומגדירים את המעברים בינהם. IB מכיר את המעברים הסטנדרטיים כמו הצגה מודלית של viewController או שימוש ב UINavigationController אך גם מאפשר לנו להגדיר מעברים שלנו. את זה עושים על ידי ירושה מהמחלקה UIStoryboardSegue.
מה עוד חדש?
פרוטוקול חדש – UIAppearance – מאפשר קסטומיזציה של המראה של הרבה מהאלמנטים המובנים של הממשק. הדבר מזכיר CSS עבור UIKit. כך למשל על ידי השורה:
[[UINavigationBar appearance] setTintColor:[UIColor greenColor]];
אנו קובעים צבע חדש עבור כל UINavigationBar המוצג באפליקציה. ניתן גם לשלוט יותר בקסטומיזציה, למשל לדאוג שהשינוי יתבצע רק עבור אלמנטים המופיעים בהיררכית viewControllers מסוימת. SDK 5.0 מאפשר יותר קסטומיזציה מבעבר כמו קביעת תמונת רקע ל–bar.
כמובן ש–iCloud הוא אופציה חדשה עיקרית מבחינת המשתמש במערכת 5.0 ויש לו קריאות שאנו המפתחים יכולים להעזר על מנת להשתלב ב–iCloud. בגדול iCloud מאפשר לאפליקציה לשתף נתונים על מספר מכשירים בין אם אלו אייפונים, אייפד או מק. כֵך שהמשתמש יראה אותם נתונים בכל מכשיר בו הוא מתקין את האפליקציה. על מנת להשתלב ב–iCloud יש להעזר במחלקה NSFileCoordinator ולממש את הפרוטוקול NSFilePresenter. אלו מאפשרים קריאה וכתיבה מנוהלת של קבצים. ניתן גם פשוט לרשת מהמחלקה UIDocument אשר כבר מממשת את הפרוטוקול עבורנו ודואגת לכל הקואורדינציה הנדרשת. iCloud גם נותן לנו אפשרות קלה לשיתוף key/value של נתונים בודדים וכן יש כבר אינטגרציה בין CoreData לiCloud כך שאפליקציות מבוססות CoreData יכולות להשתלב עם iCloud בקלות.
מערכת 5 גם מביאה אינטגרציה עם Twitter. מבחינת המשתמש השינוי העקרי שאינו נדרש לתת את הסיסמא מחדש לכל אפליקציה שרוצה לגשת לחשבון Twitter אלא יש חשבון אחד (או מספר) ברמת המערכת. ברמה הפשוטה לנו יש את המחלקה TWTTweetComposeViewController אשר מאפשרת שליחת ציוצים ודואגת לקיצור URL וטיפול בתמונות. ברמה המורכבת יותר יש ניהול חשבונות מלא במערכת על ידי UCAccount ואינטגרציה עם כל ה–API של טוויטר בעזרת TWRequest.
אלו מאתנו שמשתמשים ב–OpenGL באפליקציות מקבלים ספריה חדשה בשם GLKit אשר עוטפת באובג'קטיב–סי מטלות רבות הקשורות בניהול OpenGL. GLKViiew הינו מחלקה היורשת מ–UIView עבור ניהול קונטקסט של OpenGL. המלקה הינה בת–בית ל–UIKit וניתן בקלות לשלב GLKView בתוך היררכית views של UIKit. המחלקה GLKViewController הינו UIViewController המיועד לניהול GLKView ויכולה לבהל עבורינו את הציור ל–OpenGL וכמו כן את הלולאה הראשית של המשחק. המחלקה גם מקלה על התמודדות עם שינויי אורינטציה של המכשיר. בנוסף GLKit מכיל קריאות שימושיות רבות כמו טעינה של טקסטורות או חשבון מטריצות שלא קיים ב–OpenGL ES 2.0. אפל גם כללו shader מובנים לתאימות עם Open GL ES 1.0 המקלים את המעבר מ 1.0 ל 2.0 וכן אפקטים שונים.
מערכת 5.0 נותנת טיפול מיוחד לאפליקציות תוכן אשר מביאות תוכן חדש על בסיס קבוע, כמו מגזינים. אפליקציות לדוכן העתונים מופיעות במקום חדש במערכת הנקרא Newsstand ונראה כמו… דוכן עיתונים. אפליציות אלו יכולות להגדיר אייקון מיוחד לדוכן ולשנות את האייקון בהתאם לתוכן. היתרון הגדול באפליקציות דוכן עיתונים הוא שהמעכת יכולה לטפל עבורם בהורדת התוכן באופן אוטומטי כך שכשהמשתמש נכנס אליהם המהדורה האחורנה כבר ירדה למכשיר. ניתן לשלוח הודעות דחיפה מיוחדות לאפליקציות דוכן עיתונים שמתחילות הורדת תוכן והמערכת מטפלת בהורעה עצמה של התוכן ברקע מבלי שהמשתמש יפתח את האפליקיה. כאשר התוכן מוכן האפליקציה יכולה לסמן את עצמה עם סימון מיוחד באייקון.
גם בכלי הפיתוח חלו התפתחיות רבות. דברנו קודם על interface builder אבל גם xcode התקדם. יש מהדר חדש LLVM 3.0 והחל מXcode 4.2 אין GCC יותר. xcode כולל עכשיו גם דיבגר ל–OpenGL המראה לנו איזו שורה יצרה כל פיקסל בתמונה ואיך ניראית התמונה בכל שלב בבניתה. אינסטרומנטס, כלי הדיאגנוסטיקה, הורחב גם הוא. קבלנו כלים לעזור בדיבוג על מערכות מרובות מעבדים שמאפשרות לראות את ניצול המעבדים באפליקציה. ניתן כעת להקליט פעולות על הממשק ולנגן אותם חזרה, דבר המקל על דיבוג ובחינה. כלי הזכרון הורחב ומאפשר גילוי של לולאות התיחסויות שהם כאשר עצם א' מתיחס לעצם ב' ועצם ב' מתיחס לעצם א'. ARC לא פותר מצב כזה והדבר יכול להוביל לדליפת זכרון. הכלי החדש יודע לאתר מקרים כאלו.
ישנם עוד הרבה חידושים במערכת 5.0 וקשה לסקור את כולם במאמר אחד. בהמשך אוסיף עוד פרטים על החידושים שקבלנו וכמו כן אפרט יותר על מספר חידושים. אז עד הפעם הבאה...

Reader Comments (1)
מתאבן מצויין, מצפה להמשך