אתם מכירים את התרגיל: אפל שחררה זה עתה את ה-iOS 7 Gold Master build למפתחים וזהו הסופי בניית תוכנת iOS 7 של אפל זהה לגרסה שתהיה זמינה לציבור הבא שָׁבוּעַ. iOS 7 GM תואם לאייפון 5, אייפון 4S, אייפון 4, אייפד (דור שלישי ורביעי), אייפד מיני ו דגמי iPod touch (דור רביעי וחמישי), וקבצי ההורדה של מערכת ההפעלה זמינים כעת אצל המפתחים של אפל שַׁעַר. יחד איתם, כמו תמיד, יומן השינויים של אפל עבור המהדורה האחרונה הזו, עותק שלו נמסר זה עתה ל-BGR. iOS 7 GM תהיה הגרסה האחרונה של iOS שאינה ציבורית של אפל, לפני שה-iOS 7 יהפוך זמין לציבור בשבוע הבא לקראת השקות ה-iPhone 5S וה-iPhone 5C. יומן השינויים המלא של iOS 7 GM מופיע להלן.
טק. בידור. מַדָע. תיבת הדואר הנכנס שלך.
הירשם לחדשות הטכנולוגיה והבידור המעניינות ביותר שיש.
בהרשמה אני מסכים ל תנאי שימוש וסקרו את הודעת פרטיות.
הערות ובעיות ידועות
הבעיות הבאות קשורות לשימוש ב-iOS SDK 7.0 לפיתוח קוד.
פנקס הכתובות
הערות
השיעורים ב AddressBookUI
המסגרת אוסרת כעת במפורש סיווג משנה. עבור אפליקציות המקושרות ל- iOS 7 SDK, ניסיון לאתחל תת-מחלקה של אחת מהמחלקות הללו מחזיר אפס. עבור אפליקציות המקושרות מול ערכות SDK ישנות יותר, שינוי ההתנהגות היחיד הוא אזהרה שנרשמה למסוף.
AirDrop
הערות
- התמיכה באנשי קשר בלבד דורשת כי:
- אתה מחובר ל-iCloud.
- לשולח ולמקבל יש את כתובות האימייל של Apple ID זה ב-'אנשי קשר' במכשירים שלהם.
פריסת אפליקציה
הערות
משווה [[[UIDevice currentDevice] identifierForVendor] UUIDString]
על מספר אפליקציות Enterprise או אפליקציות המותקנות באמצעות Xcode (לא ה-App Store), כאשר מזהי ה-bundleID שונים רק ברכיב האחרון, יגרמו למחרוזות זהות. אם ל-bundleID יש 3 רכיבים או פחות, התנהגות זו אינה משתנה מ-iOS 6.
זה נובע משינוי בהתנהגות בין iOS 6 ל-iOS 7 שבו -[UIDevice identifierForVendor]
לוקח בחשבון את ה-bundleID אם אין מזהה ספק. מזהה ספק מוקצה רק לאפליקציות ב-App Store.
קרן AV
הערות
-
AVCaptureSession
משתמש כעת באפליקציה שלךAVAudioSession
כברירת מחדל. -
+[AVPlayer playerWithPlayerItem:]
מחזירה anAVPlayer
אובייקט, אך הפריט הנוכחי יחזיר אפס אם הנגן נוצר על שרשור אחר.
אנשי קשר
בעיה ידועה
אם יצרת ימי הולדת באמצעות גרסת בטא של iOS 7, ייתכן שפרטי יום ההולדת נשמרו בצורה שגויה. כדי לתקן יום הולדת שכזה שמוצג בצורה לא נכונה, ערוך את איש הקשר ושנה את התאריך.
אנימציית ליבה
הערות
כאשר UIViewGroupOpacity
המפתח אינו קיים, ערך ברירת המחדל הוא כעת YES. ברירת המחדל הייתה בעבר NO.
המשמעות היא שתצוגות משנה של תצוגה שקופה יורכבו תחילה על אותה תצוגה שקופה, ולאחר מכן תת העץ המורכב מראש יצויר בשלמותו על הרקע. הגדרת NO גורמת לשילוב פחות יקר, אך גם פחות מדויק: כל תצוגה בתת-עץ השקוף מורכב על מה שמתחתיו, לפי האטימות של ההורה, באלגוריתם של הצייר הרגיל להזמין.
קרן
הערות
- א
NSMetadataQuery
עם היקף בכל מקום יכול כעת להשתמשkMDItemContentTypeTree
בפרדיקטים. לדוגמה:NSPredicate *p = [NSComparisonPredicate predicateWithLeftExpression:[NSExpression expressionForKeyPath:@"kMDItemContentTypeTree"] rightExpression:[NSExpression expressionForConstantValue:@"public.rtf"] modifier: NSAnyPredicateModifier type: NSLikePredicateOperatorType options: 0];
- כאשר קוראים לתוצאות המוחזרות על ידי שאילתות עם היקפים בכל מקום,
-[NSMetadataItem valueForAttribute: NSMetadataItemDisplayNameKey]
כעת מייצר את אותו ערך כמו-[NSURL getResourceValue: forKey: NSURLLocalizedNameKey]
, התאמת שאילתות שאינן נמצאות.
טיימרים דיוק גבוה
בעיה ידועה
בעת שינה או המתנה למרווחי זמן מדויקים במיוחד, הטיימרים עשויים להתעכב עד 1 אלפית שנייה.
iCloud
הערות
- ה
kSecAttrSynchronizable
ממשקי API שהיו זמינים ב-Beta Seeds אינם זמינים ב-GM Seed. - נעילת הפעלה, תכונה חדשה של Find My iPhone, מופעלת באופן אוטומטי כאשר Find My iPhone מופעל בכל מכשיר שבו פועל iOS 7. נעילת הפעלה דורשת מהמשתמשים להזין את ה-Apple ID והסיסמה שלהם כדי לכבות את Find My iPhone, לצאת מ-iCloud, למחוק את המכשיר או להפעיל מחדש את המכשיר לאחר מחיקה. חשוב לבצע אחת מהפעולות הבאות לפני העברת מכשיר למשתמש חדש:
- צא מ-iCloud.
- כבה את נעילת ההפעלה בהגדרות > iCloud > מצא את האייפון שלי.
רדיו iTunes
הערות
אם השתמשת ב-iTunes Radio ב-seeds לפני ה-GM Seed, עליך לצאת מחשבונך ולהיכנס שוב. אחרת, התחנות שלך לא יתעדכנו. כדי לעשות זאת, עבור אל הגדרות > iTunes ו-App Store. בחר את ה-Apple ID שלך ולאחר מכן צא. לאחר מכן, הזן את מזהה Apple והסיסמה שלך, והיכנס.
MapKit
הערות
אם השיחות ל renderInContext
על שכבת גיבוי an MKMapView
עשויים מהחוט הראשי, יש לבטל אותם או להעבירם לחוט הראשי. אי ביצוע פעולה זו עלול לגרום לקריסת אפליקציה. במקום להשתמש renderInContext
, השתמש בחדש MKMapSnapshotter
ממשקי API.
כְּלֵי תִקְשׁוֹרֶת
הערות
iOS זוכר כעת את אפליקציית המדיה האחרונה שבה נעשה שימוש לאחר אתחול מחדש וקריסות אפליקציה. אפליקציות מדיה שיכולות לקבל אירועי שליטה מרחוק צריכות להיות מוכנות להפעלה ברקע ועשויות לקבל אירוע שלט רחוק כדי להתחיל בהפעלה. בנוסף, חשוב שאפליקציות מדיה יפקחו ויטפלו באירוע איפוס שרת המדיה, מכיוון שאפליקציית המדיה עשויה לקבל בקשה מרחוק לחדש את ההשמעה לאחר איפוס. התראות לניטור אירועי שרת מדיה אלו זמינות ב AVAudioSession
וטיפול נכון מתואר ב המלצות כלליות לטיפול ב-kAudioSessionProperty_ServerDied.
קישוריות מרובה משתתפים
הערות
- השיטה החדשה הבאה על
MCSession
יושם:- (NSOutputStream *)startStreamWithName:(NSString *)streamName toPeer:(MCPeerID *)peerID error:(NSError **)error
שיטת נציג זו יושמה:
- (void)session:(MCSession *)session didReceiveStream:(NSInputStream *)stream withName:(NSString *)streamName fromPeer:(MCPeerID *)peerID
- השיטה החדשה הבאה על
MCSession
יושם:- (NSProgress *)sendResourceAtURL:(NSURL *)resourceURL withName:(NSString *)resourceName toPeer:(MCPeerID *)peerID withCompletionHandler:(void(^)(NSError *error))completionHandler
שיטת האציל להתחיל בקבלת משאב מעמית מרוחק יושמה כ:
- (void)session:(MCSession *)session didStartReceivingResourceWithName:(NSString *)resourceName fromPeer:(MCPeerID *)peerID withProgress:(NSProgress *)progress
שיטת האציל לסיים את קבלת משאב מעמית מרוחק ושמירת התוכן במיקום זמני מיושמת כך:
- (void)session:(MCSession *)session didFinishReceivingResourceWithName:(NSString *)resourceName fromPeer:(MCPeerID *)peerID atURL:(NSURL *)localURL withError:(NSError *)error
-
MCAdvertiserAssistant
הוא שיעור נוחות להטמעת מפרסם, המטפל בהזמנות וחיבורים ל-MCSession
. -
MCSession
יש חדשinitWithPeer:
שיטה. -
sendResource
הוסיף "עם" ל-completionHandler
. - פסק הזמן הקצוב הוסר מ
connectPeer: withNearbyConnectionData
.
למידע נוסף על ממשקי API אלה, צפו WWDC 2013: רשת בקרבת מקום עם קישוריות מרובה משתתפים.
ריבוי משימות
הערות
-
AVAudioSession
כבר לא יכול להיות פעיל על ידי אפליקציות ברקע שמתעוררות עקב אחזור רקע, העברות רקע ואירועי התראות מרחוק. - מגבלת הזמן להשלמת המשימה ירדה מ-10 הדקות שהיה ב-iOS 6.
רשת
הערות
שני ממשקי API לרשת ברמה נמוכה שבעבר החזירו כתובת MAC מחזירים כעת את הערך הקבוע 02:00:00:00:00:00. ממשקי ה-API המדוברים הם sysctl (NET_RT_IFLIST)
ו ioctl (SIOCGIFCONF)
. מפתחים המשתמשים בערך של כתובת ה-MAC צריכים לעבור למזהים כגון -[UIDevice identifierForVendor]
. שינוי זה משפיע על כל האפליקציות הפועלות ב-iOS 7.
זמן ריצה של Objective-C
הערות
עקב שינויים באופן שבו isa
השדה מיושם, *self
עשוי להשתנות במהלך הספירה (לדוגמה, אם המיכל נשמר).
פתרון עוקף: בעת יישום countByEnumeratingWithState
, לא להגדיר state->mutationsPtr = self
.
פנקס חשבונות
הערות
- Passbook הוסיפה תמיכה עבור התחומים העיקריים והקטנים כדי להתאים טוב יותר לשאר המערכת האקולוגית של iBeacon. החדש
major
וminor
המפתחות משתנים באופן עצמאי ואופציונליים לצדםproximityUUID
(חובה) בכל מילון ב-beacons
מַעֲרָך. - בגרסאות קודמות של iOS SDK, Passbook לא אימתה את השדות האחוריים בכרטיסים לחלוטין. כללי האימות לא השתנו, אבל האימות כולל כעת שדות אחורי. אנא בדוק את יומן המסוף עבור יומנים נוספים.
-
PKPassLibraryDidCancelAddPasses
הוא קוד סטטוס חדש ב-PKPassLibraryAddPassesStatus
enum. זה מסמל שהמשתמש הקש על ביטול בהתראה על הוספת מעברים.
תמונות
הערות
עם שדרוג ממקור מוקדם יותר, תמונות ממוזערות באפליקציית התמונות לא יופיעו לזמן קצר.
ספארי
בעיה ידועה
אם משדרגים ל-GM Seed מזרע מוקדם יותר, ייתכן שהעדפות Safari יאבדו.
פתרון: השבת את נעילת קוד הגישה לפני השדרוג.
בִּטָחוֹן
הערות
-
-[UIDevice uniqueIdentifier]
לא מתקבל יותר בהגשות ל-App Store. ב-iOS 7, אפליקציות שכבר נמצאות בחנות או במכשירים של משתמשים הקוראים ל-API שהוסר זה לא יקבלו עוד את ה-UDID. במקום זאת,-[UIDevice uniqueIdentifier]
יחזיר מחרוזת בת 40 תווים שמתחילה ב- FFFFFFFF, ואחריו הערך הקבוע של-[UIDevice identifierForVendor]
. חשוב לשקול כיצד זה ישפיע על אפליקציות קיימות. שקול לשלוח עדכונים שאינם ניגשים יותר ל-UDID. - iOS מבקש כעת את הסכמת המשתמש לאפליקציות להשתמש בקלט שמע בכל מכשירי iOS 7. עבור מכשירים הנמכרים בסין, iOS יבקש גם את הסכמת המשתמש לאפליקציות להשתמש בחומרת המצלמה. מערכת ההפעלה תציג את התראת ההסכמה כאשר תגדיר את הקטגוריה של המופע
AVAudioSession
. הAVAudioSession
קטגוריות שיציגו את ההתראה הןAVAudioSessionCategoryRecord
וAVAudioSessionCategoryPlayAndRecord
.אם המשתמש לא מאפשר גישה, נתוני הפעלת האודיו יהיו כולם אפסים (שקט). עבור מכשירים שבהם הגישה למצלמה מתבקשת ונדחית על ידי המשתמש, הפעלת צילום הווידאו היא מסך שחור. - ה-API
gethostuuid()
הוסר ולא יתקבל להגשה לחנות, ללא קשר למערכת ההפעלה הממוקדת. עבור אפליקציות קיימות הפועלות ב-iOS 7, הפונקציה תחזיר א uuid_t ייצוג של מזהה הספק (-[UIDevice identifierForVendor]
).
חֶברָתִי
הערות
- דרך iOS 6, בעת שימוש
TWTweetComposeViewController
וSLComposeViewController
(האחרון רק לטוויטר ולווייבו, אבל לא לפייסבוק), אם המתקשר מספק אcompletionHandler
, המסופקcompletionHandler
אחראי לפטר את בקר התצוגה. החל מ-iOS 7, אם האפליקציה מתחברת ל- iOS 7 SDK, בקר התצוגה יפטור את עצמו גם אם המתקשר מספקcompletionHandler
. כדי להימנע מכך, של המתקשרcompletionHandler
לא צריך לבטל את בקר התצוגה. - בעת שימוש ב- iOS 6.1 SDK ב-OS X v10.8 Mountain Lion, אם אתה משתמש ב- iOS 5.0 או iOS 5.1 Legacy SDK ב- iOS סימולטור, לא תוכל להשתמש בתכונות טוויטר: ניסיון להיכנס לטוויטר דרך חלונית ההגדרות יעשה זאת להיכשל, ו
Twitter.framework
לא יפעל כראוי. אם אתה צריך לבדוק תכונות של טוויטר, תצטרך לבחור ביעד להפעלת סימולטור iOS 6.1 או iOS 6.0, או שאתה יכול לבדוק עם iOS 5.x במכשיר.
מַקפֵּצָה
הערות
- נגיעות פעילות אינן מבוטלות עוד כאשר המשתמש מצלם צילום מסך.
- טפט דינמי אינו זמין באייפון 4.
חנויות
תוקן ב-GM Seed
הורדות אפליקציות כבר לא נתקעות במצב "ממתין".
UIKit
תוקן ב-GM Seed
שדות סיסמה לא הוצגו בתצוגות התראה עבור אפליקציות לרוחב (לדוגמה, אימות Game Center או רכישה בתוך האפליקציה).
בעיות ידועות
- אם
UITextField
או אUILabel
שמיושר לקו הבסיס עם אילוצים יש תכונות המשתנות לאחר שהאילוצים נוספו, ייתכן שהפריסה לא נכונה. החריג לכך הוא-setFont:
עַלUILabel
, שאמור לעבוד כצפוי. פתרון לעקיפת הבעיה: הימנע מביצוע שינויים בUITextField
אוֹUILabel
לאחר הוספת אילוצי יישור בסיס. אם עליך לבצע שינויים, עליך להסיר את האילוצים ולאחר מכן להחיל אותם מחדש לאחר מכן. שימו לב שזהו להיט ביצועים, אז אל תעשו זאת אלא אם כן יש צורך בכך. - ה
backIndicatorTransitionMask
מלוח תכנון או מ-xib לא יתפרשו כהלכה בזמן ריצה. דרך לעקיפת הבעיה: הגדר אתbackIndicatorTransitionMask
בקוד.
הערות
- כאשר אין מספיק מקום בפריסת סרגל הניווט עבור הטקסט המלא של כותרת כפתור הקודמת, סרגל הניווט יחליף כותרת אחורית קצרה גנרית (באנגלית, "Back"). אם אפילו המחרוזת הזו ארוכה מדי, הסרגל יציג את שבר המחוון האחורי ללא כותרת.
-
+[UIPasteboard pasteboardWithName: create:]
ו+[UIPasteboard pasteboardWithUniqueName]
כעת ייחודי השם הנתון כדי לאפשר רק לאותן אפליקציות באותה קבוצת יישומים לגשת ללוח. אם המפתח ינסה ליצור לוח עם שם שכבר קיים והם אינם חלק מאותה חבילת אפליקציות, הם יקבלו לוח דביק ייחודי ופרטי משלהם. שימו לב שזה לא משפיע על לוחות ההדבקה המסופקים על ידי המערכת, כללית וחיפוש. - אפליקציות כברירת מחדל לשימוש במערכת ניהול שורת המצב החדשה מבוססת בקר התצוגה. כדי לבטל את הסכמתך לכך, הוסף ערך של NO עבור ה-
UIViewControllerBasedStatusBarAppearance
מפתח ל-Info.plist שלך. - בעת שימוש ב-Auto Layout למיקום א
UIButton
, אם תגדיר את התנגדות דחיסת התוכן או עדיפות חיבוק התוכן למינימום, ללחצן תהיה פריסה מעורפלת. פתרון עוקף: אל תשתמש בעמידות לדחיסת תוכן או בעדיפות חיבוק תוכן של פחות מ-2 עבורUIButton
. -
UIScreenEdgePanGestureRecognizer
מאפשר לך לבצע פעולות בתגובה להחלקות מעל קצה המסך באמצעות אותן היוריסטיות שבהן המערכת משתמשת למחוות שלה. השתמש בזה אם יש לך סמנטיקת ניווט משלך שאין בה שימושUINavigationController
אבל צריך לכלול את המחווה הזו (למשל, Safari). לזיהוי המחוות הזה יש מאפיין שמתאר את הקצוות שבהם הוא פעיל.UIRectEdge
הוא סוג enum חדש שמאפיין זה ו-[UIViewController edgesForExtendedLayout]
יכול לשתף.UIRectEdge
מחליףUIExtendedEdge
, אשר יוסר. לחברים של שניהם אותם ערכים. השתמש ב-Xcode כדי להחליף את כל המופעים של "UIExtendedEdge" בפרויקט שלך ב-"UIRectEdge". -
UIButtonTypeInfoLight
,UIButtonTypeInfoDark
, וUIButtonTypeDetailDisclosure
הכפתורים כולם נראים אותו הדבר. - שכבות מטושטשות אינן זמינות באייפון 4.
- Parallax אינו זמין באייפון 4.
- טקסט בדפוס אינו זמין באייפון 4.
מזג אוויר
הערות
תנאי מזג האוויר אינם מונפשים באייפון 4.
WebKit
הערות
- בעבר, כאשר שונו הפרמטרים של נקודת התצוגה, הפרמטרים הישנים מעולם לא נמחקו. זה גרם לפרמטרים של נקודת התצוגה להיות תוספים. לדוגמה, אם התחלת עם רוחב=רוחב התקן ולאחר מכן שינית את זה ל קנה מידה התחלתי=1.0, בסופו של דבר קיבלת נקודת מבט ממוחשבת של רוחב=רוחב התקן, קנה מידה התחלתי=1.0.
ב-iOS 7, זה טופל. עכשיו אתה מסיים עם נקודת מבט מחושבת של קנה מידה התחלתי=1.0.
- בעבר, בעת שימוש, הסולם עלול להיות שגוי לאחר סיבוב. כעת, אם משתמש לא קנה קנה מידה מפורש של העמוד, העמוד ישוחזר לקנה המידה הראשוני שלו. כמו כן, הסולם הנוכחי מוגבל כעת כהלכה בתוך
min-scale
,max-scale
גבולות. - חלק מהתמונות עבור התקני תצוגה ברשתית מופיעות בגודל פי שניים מהגודל שהן אמורות, במקום להיות מוקטן ב-50%. בעיה זו יכולה להתרחש גם עם כל תמונה שיש לשנות אותה, שהיא גדולה יותר מהמיכל שלה ומשתמשת ב-
background-size
רכוש או ה-webkit-background-size
תכונה. בעיה זו משפיעה הן על אפליקציות מקוריות המציגות תוכן אינטרנט והן על דפי אינטרנט שנצפו ב-Safari עבור iPhone. הbackground
מאפיין קיצור של CSS מאפס כעת את הערך שלbackground-size
רכוש לauto
כאשר גודל הרקע לא מצוין. התנהגות חדשה זו היא לפי מפרט CSS, וההתנהגות הישנה זמינה רק עבור אפליקציות המקושרות ל-SDK לפני iOS 7.0 כאשר הן פועלות ב-iOS 7 ואילך.פתרון לעקיפת הבעיה: ציין את
background-size
רכוש או ה-webkit-background-size
נכס לאחר הbackground
מאפיין קיצור בגיליון הסגנונות של CSS עבור תוכן האינטרנט המוצג. - אפליקציות אינטרנט וקטעי אינטרנט שנוצרו לפני Seed 4 לא יישארו בתיקיות במהלך האתחול מחדש. פתרון: מחק את אפליקציית האינטרנט או קליפ האינטרנט הישן וצור אותם מחדש ב-Seed זה על ידי טעינת התוכן ב-Safari, הקשה על כפתור הפעולה ולאחר מכן "הוסף למסך הבית".