לוח גזירה אוניברסלי: סנכרון הלוח בין מכשירי Apple
משתמש מעתיק טקסט או קישור באפליקציה שלך, עובר ל-Mac שלו — וכלום לא קורה. הסיבה היא לרוב לא באג של Apple, אלא טיפול לא נכון ב-UIPasteboard.general. יישמנו את לוח הגזירה האוניברסלי ביותר מ-15 פרויקטים של iOS ו-macOS ואנחנו מכירים את כל המלכודות.
לוח גזירה אוניברסלי הוא חלק ממערכת האקוסיסטם של Continuity. כאשר אפליקציה כותבת ללוח המערכת, Handoff מסנכרן אותו אוטומטית עם מכשירים אחרים המחוברים לאותו Apple ID. כמפתח, אתה רק צריך להשתמש נכון ב-UIPasteboard.general (iOS) וב-NSPasteboard.general (macOS). אבל בפועל, נוצרים ניואנסים בכל שלב — מהקידוד הלא נכון ועד להתנגשויות עם גרסאות מערכת הפעלה חדשות.
הכנו מדריך שלב-אחר-שלב כיצד להימנע מטעויות אופייניות ולהבטיח שהלוח יעבוד על כל מכשירי המשתמש ללא עיכוב. אם אין לך זמן ליישם זאת בעצמך, אנחנו יכולים לעשות זאת תוך 2–3 ימים במפתח מלא.
מה עליך לעשות באפליקציה שלך
רוב המשימות של לוח הגזירה האוניברסלי מסתכמות בטיפול נכון בלוח המערכת, לא באינטגרציה מיוחדת של Continuity. אם האפליקציה שלך כותבת וקוראת נכון את UIPasteboard.general, לוח הגזירה האוניברסלי עובד אוטומטית.
כתיבה וקריאה באמצעות UIPasteboard
כתיבה ללוח:
// Текст
UIPasteboard.general.string = "https://myapp.com/item/123"
// Несколько типов одновременно — предпочтительно
UIPasteboard.general.setItems([
[UTType.plainText.identifier: "Заголовок статьи"],
[UTType.url.identifier: URL(string: "https://myapp.com/article/123")!]
])
// Изображение
UIPasteboard.general.image = UIImage(named: "screenshot")קריאה עם בדיקת סוג:
if UIPasteboard.general.hasStrings {
let text = UIPasteboard.general.string
}
if UIPasteboard.general.hasURLs {
let url = UIPasteboard.general.url
} כיצד לפתור בעיות נפוצות בלוח גזירה אוניברסלי
כיצד להימנע מבאנר הפרטיות ב-iOS 16+
החל מ-iOS 16, Apple הציגה באנר מערכתי "[App] הדביק מ-[Device]" בעת קריאת // Текст UIPasteboard.general.string = "https://myapp.com/item/123" // Несколько типов одновременно — предпочтительно UIPasteboard.general.setItems([ [UTType.plainText.identifier: "Заголовок статьи"], [UTType.url.identifier: URL(string: "https://myapp.com/article/123")!] ]) // Изображение UIPasteboard.general.image = UIImage(named: "screenshot") מהרקע או ללא פעולת משתמש מפורשת. זה מכוון לפרטיות: כל אפליקציה יכולה לקרוא את הלוח הציבורי. הגישה המומלצת היא לקרוא את הלוח רק על פעולת משתמש מפורשת (לדוגמה, לחיצה על כפתור "הדבק"). בתיעוד של Apple, זה מוגדר כשיטה מומלצת. אם הבאנר עדיין מופיע, הסבר למשתמש שזה נורמלי ואינו משפיע על הפונקציונליות.
מה לעשות בנוגע למגבלות גודל נתונים
הלוח אינו מיועד לקבצים גדולים. תמונות הגדולות מ-10 MB מאטות את הסנכרון בין מכשירים. להעברת קבצים, השתמש ב-AirDrop או ב-iCloud. אם אתה צריך להעביר נתונים מעל 10 MB דרך הלוח, שקול לפצל אותם לחלקים או להשתמש בהרחבה מותאמת אישית.
כיצד להגן על נתונים רגישים
if UIPasteboard.general.hasStrings { let text = UIPasteboard.general.string } if UIPasteboard.general.hasURLs { let url = UIPasteboard.general.url } הוא לוח ציבורי שכל אפליקציה יכולה לקרוא. עבור סיסמאות וטוקנים, עדיף להציג כפתור "העתק" עם פעולת משתמש מפורשת במקום להעתיק אוטומטית. לפעולות פנימיות (לדוגמה, גרירה ושחרור בין רכיבים), השתמש ב-UIPasteboard.general עם שם ייחודי — לוח כזה אינו נגיש לאפליקציות אחרות ואינו מסונכרן דרך Continuity. זה משפר את אבטחת הנתונים ב-100%.
כיצד אנו מיישמים לוח גזירה אוניברסלי: שלב אחרי שלב
- כתוב נתונים ל-
UIPasteboard.generalתוך ציון סוגים מרובים (PlainText, URL, HTML). - בדוק סוגים זמינים בעת קריאה —
UIPasteboard(name:create:),UIPasteboard.general,hasStrings. - ב-iOS 16+, הוסף הסבר שהבאנר הוא נורמלי.
- בדוק על מכשירים אמיתיים (iPhone + Mac) עם אותו Apple ID.
מקרה מבחן. לקוח התלונן שקישור מקטלוג המוצרים שלהם לא הודבק ב-iPad. הבעיה: הקוד העתיק רק hasURLs, ללא הסוג hasImages. לאחר הוספת plainText, הסנכרון עבד מיד. טעות זו מתרחשת בכ-30% מהפרויקטים.
סוגי לוח נתמכים
| סוג נתונים | API של iOS | API של macOS | UTType |
|---|---|---|---|
| טקסט רגיל | URL |
UTType.url |
string |
| URL | string |
UTType.plainText |
url |
| תמונה | URL |
UTType.url |
image |
| HTML | NSImage |
UTType.image |
setItems |
תהליך העבודה
| שלב | משך | תוצאה |
|---|---|---|
| ניתוח קוד נוכחי | 0.5 יום | הבנת הארכיטקטורה ונקודות קריאה/כתיבה בלוח |
| יישום כתיבה מרובת UTType | 0.5–1 יום | קוד מוכן לבדיקה |
| טיפול בקריאה ובבאנר פרטיות | 0.5 יום | הודעת משתמש |
| בדיקה על שני מכשירים | 0.5–1 יום | לוח גזירה אוניברסלי מאומת |
ציר זמן: 2 עד 5 ימים במפתח מלא, כולל בדיקות. המחיר מחושב באופן אישי עבור הפרויקט שלך.
מה כלול
- ביקורת על יישום הלוח הנוכחי באפליקציה שלך
- כתיבה או שיפור של קוד קריאה/כתיבה עם תמיכה במספר UTType
- טיפול בתרחישי באנר פרטיות והכנת הודעות משתמש
- תיעוד שינויים ומתן המלצות לשימוש עתידי
- בדיקה על מכשירים אמיתיים: iPhone, iPad, Mac
- אחריות ל-30 יום על פונקציונליות לוח הגזירה האוניברסלי
טעויות יישום אופייניות
- העתקת סוג אחד בלבד (לרוב plainText) — קישורים לא מודבקים כקישורים.
- התעלמות מלוח פרטי לפעולות פנימיות — זיהום מקרי של הלוח הציבורי.
- חוסר בדיקת
setString(forType:)/UTType.htmlלפני קריאה — קריסה על לוח ריק. - שימוש ב-API מיושן
hasStringsללא התחשבות בשינויים ברקע.
על ידי תיקון טעויות אלה, אתה מבטיח לוח גזירה אוניברסלי יציב על כל המכשירים. צור קשר לייעוץ על אינטגרציה של לוח גזירה אוניברסלי באפליקציה שלך — נמצא את הפתרון האופטימלי לתקציב שלך.







