בנית אפליקציית מובייל, והמשתמשים שלך רוצים להפוך תרחישים לאוטומטיים באמצעות Shortcuts. ללא אינטגרציית App Intents, הם נאלצים לפתוח את האפליקציה ידנית עבור כל פעולה. App Intents הפכו לסטנדרט עבור אוטומציה של iOS, ומאפשרים להריץ משימות מבלי לפתוח את האפליקציה.
אנו מספקים אינטגרציה עמוקה: מפקודות בסיסיות ועד להעברת נתונים מורכבים בין פעולות. עם למעלה מ-20 פרויקטי iOS מוצלחים, אנו מבטיחים תאימות לגרסאות ה-iOS העדכניות ואוטומציה ללא תקלות. חיסכון בעלויות התמיכה האופייני לאחר אימוץ App Intents מקזז לחלוטין את השקעת הפיתוח תוך חודשים. יתרה מזאת, אוטומציה של הזנת נתונים שגרתית מפחיתה את עלויות בדיקות ה-QA הידניות בשיעור דומה.
למה לבחור ב-App Intents על פני SiriKit?
לפני App Intents, האינטגרציה התבססה על SiriKit עם קבצי .intentdefinition ו-INExtension ביעד נפרד. זה דרש הרבה קוד boilerplate ויצירת קוד. החל מ-iOS 16, מסגרת AppIntents פשוטה יותר: פחות קוד, אינטנטים גלויים ב-Shortcuts ללא הגדרה נוספת. הנה השוואה:
| תכונה | SiriKit | App Intents |
|---|---|---|
| מורכבות | גבוהה (יעד נפרד, יצירת קוד) | נמוכה (קובץ יחיד) |
| ביצועים | בינוניים | גבוהים (פועל מבלי לפתוח את האפליקציה) |
| תמיכת iOS | iOS 10+ | iOS 16+ |
| פרמטרים דינמיים | באמצעות INObject | באמצעות AppEntity (פשוט יותר) |
| App Shortcuts | לא | מובנה |
App Intents מנצחים בכל מדד עבור פרויקטים חדשים. הפיתוח מהיר פי 3 מאשר SiriKit—פחות קוד, פחות תבניות. אנו ממליצים לבצע הגירה מ-SiriKit אם האפליקציה שלך עדיין משתמשת בגישה הישנה. ההגירה מקצרת את זמן הפיתוח לאוטומציות חדשות ב-40%.
כיצד App Intents מייעלים את הפיתוח
אינטנט מינימלי עבור Shortcuts:
struct StartWorkoutIntent: AppIntent {
static var title: LocalizedStringResource = "Начать тренировку"
static var description = IntentDescription(
"Запускает тренировку в приложении",
categoryName: "Тренировки"
)
static var openAppWhenRun: Bool = false // не открывать приложение
@Parameter(title: "Тип тренировки")
var workoutType: WorkoutType
func perform() async throws -> some IntentResult & ProvidesDialog {
try await WorkoutService.shared.start(type: workoutType)
return .result(dialog: "Тренировка \(workoutType.name) началась")
}
}struct StartWorkoutIntent: AppIntent { static var title: LocalizedStringResource = "Начать тренировку" static var description = IntentDescription( "Запускает тренировку в приложении", categoryName: "Тренировки" ) static var openAppWhenRun: Bool = false // не открывать приложение @Parameter(title: "Тип тренировки") var workoutType: WorkoutType func perform() async throws -> some IntentResult & ProvidesDialog { try await WorkoutService.shared.start(type: workoutType) return .result(dialog: "Тренировка \(workoutType.name) началась") } } הוא המפתח לאוטומציות. האינטנט רץ ברקע מבלי לפתוח את האפליקציה. עבור Shortcuts זה קריטי—אחרת המסך מהבהב ופותח את ממשק המשתמש שלך.
מהם AppEntity ולמה הם נחוצים?
פרמטרים סטטיים (openAppWhenRun: Bool = false, String, Int, Bool) הם מאפיינים פשוטים עם Date. פרמטרים דינמיים משתמשים ב-@Parameter עם AppEntity.
enum WorkoutType: String, AppEnum {
case running, cycling, swimming
static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "Тип тренировки")
static var caseDisplayRepresentations: [WorkoutType: DisplayRepresentation] = [
.running: "Бег",
.cycling: "Велосипед",
.swimming: "Плавание"
]
}AppEntityQuery הוא רשימה סגורה. enum WorkoutType: String, AppEnum { case running, cycling, swimming static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "Тип тренировки") static var caseDisplayRepresentations: [WorkoutType: DisplayRepresentation] = [ .running: "Бег", .cycling: "Велосипед", .swimming: "Плавание" ] } + AppEnum הוא רשימה דינמית ממסד הנתונים של האפליקציה שלך. אם משתמש מוסיף סוג אימון מותאם אישית, הוא חייב להופיע ב-Shortcuts כאופציה—אפשרי רק באמצעות AppEntity.
| סוג פרמטר | שימוש | דוגמה |
|---|---|---|
| @Parameter | סוגים בסיסיים | String, Int, Bool, Date |
| AppEnum | רשימה סגורה | WorkoutType.running |
| AppEntity + Query | רשימה דינמית | Workout מ-CoreData |
כיצד להעביר נתונים בין פעולות Shortcuts?
Shortcuts מאפשרים להעביר תוצאה של פעולה אחת לפעולה אחרת. האינטנט חייב להחזיר סוג קונקרטי, לא רק דיאלוג.
func perform() async throws -> some IntentResult & ReturnsValue<WorkoutSummary> {
let summary = try await WorkoutService.shared.getLastSummary()
return .result(value: summary)
}AppEntityQuery הוא struct התואם ל-AppEntityQuery.entities(matching:) או סוג בסיסי. כעת הבלוק הבא של Shortcuts יכול לקבל נתונים אלה כפרמטר.
App Shortcuts: ביטויים ללא הגדרה
func perform() async throws -> some IntentResult & ReturnsValue<WorkoutSummary> { let summary = try await WorkoutService.shared.getLastSummary() return .result(value: summary) } מספק ביטויים שעובדים ללא הגדרה ידנית של המשתמש:
struct FitnessAppShortcuts: AppShortcutsProvider {
static var appShortcuts: [AppShortcut] {
AppShortcut(
intent: StartWorkoutIntent(),
phrases: [
"Начни тренировку в \(.applicationName)",
"Запусти \(.applicationName)"
],
shortTitle: "Начать тренировку",
systemImageName: "figure.run"
)
}
static var shortcutTileColor: ShortcutTileColor = .teal
}הביטוי עם WorkoutSummary הוא חובה. אפל בודקת את שם האפליקציה בביטויים במהלך הבדיקה (סעיף 4.2 בהנחיות App Store Review). בלעדיו—דחייה.
כעת ניתן להשתמש בפרמטרים ישירות בביטויים: AppEntity—Siri מזהה את "running" כערך הפרמטר AppShortcutsProvider.
ווידג'טים ו-Shortcuts יחד
כפתורים בווידג'טים משתמשים באותו struct FitnessAppShortcuts: AppShortcutsProvider { static var appShortcuts: [AppShortcut] { AppShortcut( intent: StartWorkoutIntent(), phrases: [ "Начни тренировку в \(.applicationName)", "Запусти \(.applicationName)" ], shortTitle: "Начать тренировку", systemImageName: "figure.run" ) } static var shortcutTileColor: ShortcutTileColor = .teal } . אינטנט אחד עובד כפעולת Shortcuts, ככפתור ווידג'ט וכפקודה קולית. זה מפשט מאוד את הפיתוח: הלוגיקה נכתבת פעם אחת.
שלבי האינטגרציה
- ניתוח תרחישים: זיהוי הפעולות שמשתמשים רוצים להפוך לאוטומטיות.
- עיצוב מודל מבנה: יצירת AppIntent, AppEntity, AppEnum עבור כל פעולה.
- יישום perform(): כתיבת לוגיקת ביצוע עם תמיכה ברקע.
- הגדרת AppShortcutsProvider: תרגום ביטויים עבור Siri ו-Shortcuts.
- בדיקות: אימות על סימולטורים ומכשירים אמיתיים, כולל אוטומציות.
- פריסה: הגשת build ל-App Store Connect ובדיקה.
בדיקות
בסימולטור: Settings → Siri & Search → [אפליקציה] מציג אינטנטים רשומים. אפליקציית Shortcuts בסימולטור מאפשרת הוספת אינטנט לאוטומציה ידנית והרצתו.
עבור App Shortcuts: השתמש ב-\(.applicationName) עם "Начни бег в \(.applicationName)" או פשוט הרץ דרך Shortcuts.app ובדוק את התוצאה.
מה כלול
- פיתוח אינטנטים המותאמים לתרחישים העסקיים שלך.
-
workoutTypeו-AppIntentעבור נתונים דינמיים. -
XCTestאינטגרציה עם ביטויים מתורגמים. - בדיקות על מכשירים אמיתיים וסימולטורים.
- תיעוד לשימוש ותחזוקה.
לוחות זמנים ותמחור
אינטגרציה בסיסית (3–5 אינטנטים, ללא AppEntity): 2–4 שבועות. אינטגרציה מלאה עם AppEntity, App Shortcuts והעברת ערכים: 5–9 שבועות. הגירה מאינטנטים של SiriKit ל-App Intents: 3–6 שבועות. התמחור נקבע באופן אישי לפי מספר ומורכבות הפעולות. צור קשר להערכת פרויקט—נספק הצעת מחיר ולוח זמנים. קבל ייעוץ כדי ללמוד כיצד App Intents יכולים להפחית את עלויות פיתוח האוטומציה שלך.
מידע נוסף ניתן למצוא ב-תיעוד הרשמי של אפל.
חשוב: App Intents אינם דורשים הרשאות נוספות אלא אם נעשה שימוש בנתונים פרטיים—במקרה כזה, יש להגדיר App Tracking Transparency.







