PreviewProvider — یہ کیا ہے، SwiftUI پروٹوکول اور Xcode میں ترتیب

مصنف: IT Sectr اشاعت: 2026-06-27 مطالعے کا وقت: 10 منٹ

PreviewProvider ایک SwiftUI پروٹوکول ہے جو Xcode Canvas میں پیش نظارہ تیار کرنے کے لیے داخلے کے مقام کی وضاحت کرتا ہے۔ پروٹوکول کا نفاذ ڈویلپر کو سمیلیٹر شروع کیے بغیر انٹرفیس دیکھنے کی اجازت دیتا ہے، لے آؤٹ مرحلے میں تکرار کو تیز کرتا ہے۔ Apple Developer Documentation (2026) کے مطابق، اگر پروجیکٹ Canvas استعمال کرتا ہے تو PreviewProvider تمام SwiftUI View کے لیے لازمی ہے — اس کے بغیر Canvas یوزر انٹرفیس ظاہر نہیں کرتا۔ SwiftUI کے بارے میں مضمون میں مزید جانیں۔

اہم نکات

  • PreviewProvider — Canvas میں Xcode پیش نظارہ تیار کرنے کے لیے SwiftUI پروٹوکول۔
  • ایک ہی ضرورت — پروٹوکول میں صرف ایک حسابی خاصیت previews: some View شامل ہے۔
  • متعدد پیش نظارہ — Group ایک View کی متعدد حالتیں دکھا سکتا ہے۔
  • ڈیوائس کنفیگریشنز — previewDevice، previewLayout اور displayName ڈسپلے کو ترتیب دیتے ہیں۔
  • UIKit مطابقت — UIViewRepresentable اور UIViewControllerRepresentable بھی PreviewProvider کو سپورٹ کرتے ہیں۔

PreviewProvider کیا ہے؟

PreviewProvider ایک SwiftUI پروٹوکول ہے جو Xcode Canvas میں پیش نظارہ مواد بنانے کے لیے معاہدے کی وضاحت کرتا ہے۔ پروٹوکول میں ایک لازمی خاصیت ہے: previews قسم some View کی۔ previews کے ذریعے لوٹائی گئی کوئی بھی قدر Canvas میں انٹرایکٹو پیش نظارہ کے طور پر ظاہر ہوتی ہے۔ PreviewProvider کو وراثت کی ضرورت نہیں ہے — extension میں جامد نفاذ کافی ہے۔

فن تعمیر کے لحاظ سے، PreviewProvider SwiftUI رن ٹائم کا حصہ نہیں ہے — یہ خالصتاً ایک ڈویلپمنٹ ٹول ہے۔ پروٹوکول @available(iOS 13.0, *) وصف سے نشان زد ہے اور ریلیز بلڈ میں مرتب نہیں ہوتا، کیونکہ Xcode مشروط تالیف کا استعمال کرتا ہے تاکہ پیش نظارہ کوڈ کو پروڈکشن سے خارج کیا جا سکے۔ اس کا مطلب ہے کہ PreviewProvider بائنری سائز یا ایپلیکیشن کارکردگی کو متاثر نہیں کرتا۔

previews پروٹوکول

previews خاصیت PreviewProvider کی واحد ضرورت ہے۔ اسے کوئی بھی View لوٹانا چاہیے: سادہ Text سے لے کر Group اور ForEach کے ساتھ پیچیدہ درجہ بندی تک۔ Xcode لوٹائی گئی View کو Canvas میں رینڈر کرتا ہے، سسٹم سیٹنگز (تھیم، سائز، فونٹ) لاگو کرتا ہے۔

swift
import SwiftUI

struct GreetingView: View {
    let name: String
    
    var body: some View {
        Text("Hello, \(name)!")
            .padding()
    }
}

// PreviewProvider — static implementation
struct GreetingView_Previews: PreviewProvider {
    static var previews: some View {
        GreetingView(name: "World")
    }
}

نام رکھنے کا طریقہ: Apple پیش نظارہ ساخت کا نام {ViewName}_Previews رکھنے کی سفارش کرتا ہے۔ یہ مرتب کرنے والے کے لیے ضروری نہیں ہے، لیکن پڑھنے کی اہلیت اور پروجیکٹ نیویگیشن کو بہتر بناتا ہے۔ Xcode نیا SwiftUI فائل بناتے وقت خود بخود یہ ٹیمپلیٹ داخل کرتا ہے۔

PreviewProvider کیسے کام کرتا ہے: پروٹوکول اور previews طریقہ

کام کرنے کا طریقہ کار PreviewProvider جامد تقسیم پر مبنی ہے: Xcode صرف Debug کنفیگریشن کے لیے PreviewProvider extension مرتب کرتا ہے اور Canvas کی تعمیر کے عمل کے دوران previews کو کال کرتا ہے۔ جب بھی کوڈ تبدیل ہوتا ہے، Xcode صرف تبدیل شدہ PreviewProvider کو دوبارہ مرتب کرتا ہے، تقریباً فوری پیش نظارہ اپ ڈیٹ کو یقینی بناتا ہے۔

SwiftUI سمیلیٹر یا ڈیوائس پر پیش نظارہ اور حتمی یوزر انٹرفیس کے درمیان صحیح مماثلت کی ضمانت نہیں دیتا — Canvas آسان رینڈرنگ استعمال کرتا ہے۔ تاخیر کے ساتھ اینیمیشن غلط ظاہر ہو سکتی ہیں، اور کچھ UIKit اجزاء (MapKit، WebView) اضافی ترتیب کے بغیر Canvas میں رینڈر نہیں ہوتے۔

Group کے ذریعے متعدد پیش نظارہ

Group ایک View کی متعدد حالتوں کو ایک ساتھ ظاہر کرنے کی اجازت دیتا ہے، مختلف کنفیگریشنز ترتیب دیتے وقت تکرار کو تیز کرتا ہے۔ Group کے اندر ہر پیش نظارہ آزادانہ طور پر رینڈر ہوتا ہے۔

swift
struct ButtonView_Previews: PreviewProvider {
    static var previews: some View {
        Group {
            ButtonView(title: "Primary", style: .primary)
                .previewDisplayName("Primary")
            
            ButtonView(title: "Disabled", style: .primary)
                .disabled(true)
                .previewDisplayName("Disabled")
            
            ButtonView(title: "Secondary", style: .secondary)
                .previewDisplayName("Secondary")
        }
    }
}

previewDisplayName Canvas میں ہر پیش نظارہ میں ایک لیبل شامل کرتا ہے، جو متعدد حالتوں کا موازنہ کرتے وقت خاص طور پر مفید ہے۔ Group میں پیش نظارہ کی زیادہ سے زیادہ تعداد محدود نہیں ہے، لیکن 6–8 سے زیادہ Canvas کو سست کر دیتے ہیں۔

Xcode میں پیش نظارہ کی ترتیب

Xcode فراہم کرتا ہے پیش نظارہ ڈسپلے کو ترتیب دینے کے لیے کئی ترمیم کار۔ اہم: previewDevice — کسی مخصوص ڈیوائس کی تقلید کرتا ہے (iPhone 16 Pro، iPad Air، Apple Watch Ultra)، previewLayout — سائز سیٹ کرتا ہے (device، fixed، sizeThatFits)۔ ان ترمیم کاروں کا مجموعہ پیش نظارہ ماحول پر مکمل کنٹرول دیتا ہے۔

previewDevice ڈیوائس کے نام کے ساتھ ایک سٹرنگ قبول کرتا ہے، مثال کے طور پر "iPhone 16 Pro" یا "iPad Pro 13-inch (M4)"۔ دستیاب ڈیوائسز کی فہرست Xcode میں انسٹال کردہ سمیلیٹر پر منحصر ہے۔ اگر ڈیوائس نہ ملی، Canvas بغیر کسی خرابی کے ڈیفالٹ ڈیوائس پر پیش نظارہ ظاہر کرتا ہے۔

ترمیم کاروضاحتمثال
previewDeviceڈیوائس کی تقلید.previewDevice("iPhone 16 Pro")
previewLayoutسائز موڈ.previewLayout(.sizeThatFits)
previewDisplayNameپیش نظارہ لیبل.previewDisplayName("Dark Mode")
preferredColorSchemeرنگ سکیما.preferredColorScheme(.dark)
dynamicTypeSizeفونٹ سائز.dynamicTypeSize(.xxxLarge)

مختلف ڈیوائسز کے لیے پیش نظارہ

عام عمل موافقت کی جانچ کرنے کے لیے ایک View کو ایک ساتھ متعدد ڈیوائسز پر دکھانا ہے۔ اس کے لیے ڈیوائس کے ناموں کی ایک صف کے ساتھ ForEach استعمال کیا جاتا ہے۔

swift
struct AdaptiveView_Previews: PreviewProvider {
    static var previews: some View {
        ForEach(["iPhone SE (3rd generation)", "iPhone 16 Pro Max", "iPad Pro 13-inch (M4)"], id: \.self) { device in
            AdaptiveView()
                .previewDevice(.previewDevice(device))
                .previewDisplayName(device)
        }
    }
}

PreviewProvider کی مثالیں

عملی مثالیں سادہ پیش نظارہ سے لے کر لائیو ڈیٹا اور UIKit مطابقت کے ساتھ پیچیدہ کنفیگریشنز تک PreviewProvider کے استعمال کے مختلف منظرنامے دکھاتی ہیں۔

جعلی ڈیٹا کے ساتھ پیش نظارہ

جعلی ڈیٹا پیش نظارہ کے لیے ایک معیاری پیٹرن ہے جب View ایک ماڈل قبول کرتا ہے۔ اصل API کے بجائے، ٹیسٹ ڈیٹا استعمال کیا جاتا ہے، جو ایپلیکیشن شروع کیے بغیر UI حالت کی بصری تصدیق کی اجازت دیتا ہے۔

swift
struct UserProfileView: View {
    let user: User
    
    var body: some View {
        VStack {
            AsyncImage(url: user.avatarURL)
                .clipShape(Circle())
            Text(user.name)
                .font(.title)
            Text(user.bio)
                .font(.body)
                .foregroundColor(.secondary)
        }
    }
}

struct UserProfileView_Previews: PreviewProvider {
    static var previews: some View {
        UserProfileView(user: .mock)
            .previewDisplayName("Profile")
        
        UserProfileView(user: .mockLongName)
            .previewDisplayName("Long Name")
    }
}

UIViewRepresentable کے ذریعے UIKit پیش نظارہ

UIKit مطابقت — PreviewProvider UIViewRepresentable میں لپٹے UIKit اجزاء کے ساتھ بھی کام کرتا ہے۔ یہ پورے پروجیکٹ کو منتقل کیے بغیر SwiftUI Canvas میں موجودہ UIKit ویوز کا پیش نظارہ کرنے کی اجازت دیتا ہے۔

swift
struct MapViewRepresentable: UIViewRepresentable {
    func makeUIView(context: Context) -> MKMapView {
        MKMapView()
    }
    
    func updateUIView(_ uiView: MKMapView, context: Context) {
        // Configure map
    }
}

struct MapView_Previews: PreviewProvider {
    static var previews: some View {
        MapViewRepresentable()
    }
}

PreviewProvider اور SwiftUI Canvas

Canvas Xcode کا بصری ایڈیٹر ہے جو PreviewProvider کے آؤٹ پٹ کو ریئل ٹائم میں رینڈر کرتا ہے۔ PreviewProvider کے نفاذ کے بغیر، Canvas خالی رہتا ہے۔ Canvas اور PreviewProvider جوڑی کے طور پر کام کرتے ہیں: PreviewProvider بتاتا ہے کہ کیا دکھانا ہے، Canvas بتاتا ہے کہ کہاں اور کیسے۔

یہ سمجھنا ضروری ہے: Canvas پیش نظارہ عملدرآمد کا ماحول ہے، PreviewProvider کا متبادل نہیں۔ یہاں تک کہ اگر ڈویلپر Canvas نہ کھولے، PreviewProvider Canvas آئیکن پر ہوور کرنے پر پاپ اپ پیش نظارہ کے ذریعے فوری کوڈ چیکنگ کے لیے استعمال کیا جا سکتا ہے۔ WWDC 2024 کے مطابق، Apple یونٹ ٹیسٹ لکھنے کی طرح، ہر View کے لیے PreviewProvider لکھنے کو ترقیاتی معیار کے طور پر تجویز کرتا ہے۔

جزوکردارلازمی
PreviewProviderپیش نظارہ مواد کی وضاحت کرتا ہےCanvas کے لیے لازمی
Canvasایڈیٹر میں پیش نظارہ رینڈر کرتا ہےاختیاری (.preview استعمال کر سکتے ہیں)
SwiftUI ViewUI جزولازمی

سفارش: پروجیکٹ میں ہر عوامی View کے لیے PreviewProvider لکھیں۔ یہ نئے ڈویلپرز کے آن بورڈنگ کو تیز کرتا ہے، کوڈ کا جائزہ آسان بناتا ہے اور پورا پروجیکٹ بنائے بغیر بصری تبدیلیوں کی فوری تصدیق کی اجازت دیتا ہے۔

PreviewProvider کے ساتھ عام مسائل

مسئلہ 1: پیش نظارہ اپ ڈیٹ نہیں ہوتا۔ اگر Canvas کوڈ کی تبدیلیوں کو ظاہر نہیں کرتا، تو وجہ عام طور پر DerivedData کیش ہے۔ Product → Clean Build Folder (⇧⌘K) کے ذریعے DerivedData صاف کریں یا ~/Library/Developer/Xcode/DerivedData فولڈر کو دستی طور پر حذف کریں۔ صفائی کے بعد، Canvas پیش نظارہ کو نئے سرے سے بناتا ہے۔

مسئلہ 2: PreviewProvider @StateObject نہیں دیکھتا۔ PreviewProvider View کی ایک جامد مثال بناتا ہے، لہذا انجیکشن کی ضرورت والے انحصار (ViewModels، سروسز) کو ابتدا کار یا ڈیفالٹ ویلیو والے @StateObject کے ذریعے منتقل کیا جانا چاہیے۔ پیش نظارہ میں حقیقی خدمات کی بجائے جعلی اشیاء استعمال کریں۔

مسئلہ 3: Canvas میں اینیمیشن کام نہیں کرتیں۔ Canvas تمام SwiftUI اینیمیشن کو سپورٹ نہیں کرتا — خاص طور پر وہ جو وقت پر منحصر ہیں (تاخیر کے ساتھ withAnimation، .spring)۔ اینیمیشن کی جانچ کے لیے، ایپلیکیشن کو سمیلیٹر پر چلائیں۔ Canvas جامد لے آؤٹ کی تصدیق کے لیے موزوں ہے۔

انحصار کے ساتھ PreviewProvider کی اصلاح

انحصار انجیکشن پیچیدہ ViewModels کے ساتھ PreviewProvider کو کام کرنے کا بہترین طریقہ ہے۔ ٹیسٹ ڈیٹا کے ساتھ ایک علیحدہ ViewModel مثال بنائیں اور اسے View ابتدا کار کو دیں۔

swift
struct DashboardView: View {
    @StateObject var viewModel: DashboardViewModel
    
    var body: some View {
        List(viewModel.items) { item in
            Text(item.title)
        }
    }
}

struct DashboardView_Previews: PreviewProvider {
    static var previews: some View {
        DashboardView(viewModel: DashboardViewModel.mock)
    }
}

جعلی توسیعات: ViewModel کے لیے ایک extension بنائیں جو جامد .mock مثالیں فراہم کرے۔ یہ ٹیسٹ ڈیٹا کو ViewModel کے قریب رکھتا ہے اور PreviewProvider کو پڑھنے کے قابل بناتا ہے۔

اکثر پوچھے گئے سوالات

کیا ہر View کے لیے PreviewProvider لکھنا لازمی ہے؟

تکنیکی طور پر نہیں — ایپلیکیشن PreviewProvider کے بغیر بھی مرتب ہو جائے گی۔ تاہم، عملی طور پر، Apple اور SwiftUI کمیونٹی ہر عوامی View کے لیے پیش نظارہ لکھنے کی سفارش کرتے ہیں۔ PreviewProvider ترقی کو تیز کرتا ہے، مختلف ڈیوائسز پر فوری لے آؤٹ جانچ کی اجازت دیتا ہے اور ٹیم کے لیے بصری دستاویزات کا کام کرتا ہے۔

PreviewProvider بعض اوقات تالیف کی خرابی کیوں دکھاتا ہے؟

PreviewProvider صرف Debug بلڈز میں کوڈ شامل کرتا ہے، لہذا تالیف کی خرابیاں ہو سکتی ہیں اگر پیش نظارہ ریلیز کنفیگریشن میں غیر دستیاب اقسام استعمال کرے۔ Canvas کو سپورٹ نہ کرنے والے پلیٹ فارمز پر @available استعمال کرتے وقت یا پیش نظارہ پیچیدگی کی حد سے تجاوز کرنے پر بھی خرابیاں ہوتی ہیں۔

API سے PreviewProvider میں ڈیٹا کیسے منتقل کیا جائے؟

براہ راست — ممکن نہیں، PreviewProvider علیحدگی میں چلتا ہے۔ جعلی ڈیٹا استعمال کریں: .mock مثالوں کے ساتھ ایک جامد ماڈل extension بنائیں۔ @StateObject والے Views کے لیے، ابتدا کار کے ذریعے ٹیسٹ ڈیٹا کے ساتھ ViewModel دیں۔ یہ نیٹ ورک کی درخواستوں کے بغیر حقیقی ڈیٹا کی نقل کرتا ہے۔

کیا PreviewProvider حتمی IPA سائز کو متاثر کرتا ہے؟

نہیں، PreviewProvider ریلیز بائنری سائز کو متاثر نہیں کرتا۔ Xcode مشروط تالیف (#if DEBUG / #if !RELEASE) استعمال کرتا ہے تاکہ پیش نظارہ کوڈ کو ریلیز بلڈز سے خارج کیا جا سکے۔ PreviewProvider کوڈ صرف Debug کنفیگریشن میں موجود ہوتا ہے اور App Store بلڈز میں نہیں جاتا۔

کیا Xcode میں PreviewProvider کو ڈیبگ کیا جا سکتا ہے؟

ہاں، Xcode پیش نظارہ ڈیبگنگ کو سپورٹ کرتا ہے۔ previews یا View کوڈ کے اندر ایک بریک پوائنٹ سیٹ کریں اور Product → Preview → Debug Preview منتخب کریں۔ Canvas رینڈرنگ کے دوران بریک پوائنٹ متحرک ہو جائے گا۔ یہ لے آؤٹ مسائل کے تجزیہ کے لیے مفید ہے جو صرف پیش نظارہ میں نظر آتے ہیں۔

خلاصہ

  • PreviewProvider — ایک previews خاصیت کے ساتھ Xcode Canvas میں پیش نظارہ بنانے کے لیے SwiftUI پروٹوکول۔
  • متعدد پیش نظارہ — ForEach کے ساتھ Group مختلف ڈیوائسز پر View کی متعدد حالتیں دکھا سکتا ہے۔
  • ترمیم کار — previewDevice، previewLayout، preferredColorScheme اور dynamicTypeSize ڈسپلے کو ترتیب دیتے ہیں۔
  • علیحدگی — PreviewProvider صرف Debug کنفیگریشن میں کام کرتا ہے اور ریلیز IPA سائز کو متاثر نہیں کرتا۔
  • جعلی ڈیٹا — پیچیدہ ماڈل والے پیش نظارہ کے لیے، جامد .mock مثالیں استعمال کریں۔
  • UIKit سپورٹ — UIViewRepresentable کے ذریعے، PreviewProvider UIKit اجزاء کے ساتھ بھی کام کرتا ہے۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں