pubspec.yaml — یہ کیا ہے، ساخت اور Flutter میں انحصار کی تشکیل

مصنف: IT Sectr اشاعت: 2026-05-31 مطالعے کا وقت: 8 منٹ

pubspec.yaml Flutter پروجیکٹ کی مرکزی ترتیب کی فائل ہے، جو ایپلیکیشن کے میٹا ڈیٹا، انحصار اور وسائل کی وضاحت کرتی ہے۔ یہ YAML فارمیٹ میں لکھی جاتی ہے اور Dart پیکیج مینیجر کے ذریعے پروسیس ہوتی ہے۔ Dart دستاویزات، 2025 کے مطابق، اس فائل کی ہر سطر بلڈ، اشاعت اور ورژننگ کو متاثر کرتی ہے۔ pubspec.yaml Flutter ماحولیاتی نظام میں Podfile، build.gradle اور Info.plist کی جگہ لے کر ان کے افعال کو ایک واحد مینی فیسٹ میں یکجا کرتا ہے۔

اہم نکات

  • pubspec.yaml YAML فارمیٹ میں Flutter پروجیکٹ کا نام، ورژن، انحصار اور وسائل بیان کرتا ہے
  • dependencies سیکشن میں اہم لائبریریاں ہوتی ہیں، dev_dependencies — صرف ترقی اور جانچ کے لیے
  • اثاثے تصاویر، فونٹس اور JSON فائلوں والے فولڈرز کے راستے بتا کر منسلک کیے جاتے ہیں
  • SDK پابندیاں پروجیکٹ کی مطابقت کے لیے Dart اور Flutter کا کم از کم ورژن مقرر کرتی ہیں
  • YAML فارمیٹ میں دو خالی جگہوں کی انڈینٹیشن کی سختی سے پیروی ضروری ہے، ٹیب ممنوع ہیں

pubspec.yaml کیا ہے

pubspec.yaml YAML فارمیٹ میں ایک مینی فیسٹ فائل ہے جسے pub پیکیج مینیجر Dart اور Flutter پروجیکٹس کے انتظام کے لیے استعمال کرتا ہے۔ یہ پروجیکٹ کی جڑ میں واقع ہوتی ہے اور ہر flutter pub get کمانڈ پر پروسیس ہوتی ہے۔ دوسرے پلیٹ فارمز کے برعکس جہاں ترتیب متعدد فائلوں میں بکھری ہوتی ہے، Flutter تمام ضروریات کے لیے ایک واحد مرکزی مینی فیسٹ استعمال کرتا ہے۔

فائل میں میٹا ڈیٹا ہوتا ہے: پروجیکٹ کا نام، تفصیل، ورژن، مصنف۔ یہ ڈیٹا pub.dev پر پیکیج شائع کرتے وقت اور App Store اور Google Play کے لیے ایپلیکیشن بلڈ کرتے وقت استعمال ہوتا ہے۔ description فیلڈ پیکیج تلاش کے نتائج میں ظاہر ہوتا ہے، اس لیے یہ معلوماتی ہونا چاہیے اور اس میں کلیدی الفاظ ہونے چاہئیں تاکہ دوسرے ڈویلپرز لائبریری تلاش کر سکیں۔

درست pubspec.yaml کے بغیر Flutter پروجیکٹ بلڈ نہیں کیا جا سکتا۔ نحو کی غلطیاں یا غلط انڈینٹیشن لائن X پر خرابی کے پیغام کے ساتھ فوری طور پر تالیف کی ناکامی کا سبب بنتی ہیں۔ YAML خالی جگہوں کے لیے حساس ہے: ایک اضافی خالی جگہ ڈیٹا کی ساخت بدل دیتی ہے، اور ٹیب نحو کی غلطی کا سبب بنتے ہیں۔ اس لیے، pubspec.yaml کو دستی طور پر ترمیم کرتے وقت YAML نحو کو نمایاں کرنے والے ایڈیٹر کا استعمال کرنا ضروری ہے، جیسے VS Code میں سرکاری Flutter ایکسٹینشن۔

pubspec.yaml کے اہم سیکشنز

pubspec.yaml لازمی اور اختیاری سیکشنز پر مشتمل ہوتا ہے۔ ہر سیکشن پروجیکٹ کی ترتیب کے ایک مخصوص پہلو کے لیے ذمہ دار ہے۔ سیکشنز کی ترتیب اہم نہیں ہے، لیکن کمیونٹی کی روایت کے مطابق درجہ بندی یہ ہے: میٹا ڈیٹا، ماحول، انحصار، وسائل، پلیٹ فارمز۔

name اور description

name فیلڈ snake_case فارمیٹ میں ایک منفرد پیکیج شناخت کنندہ مقرر کرتا ہے، جو صرف چھوٹے لاطینی حروف، ہندسوں اور زیر خط سے بنا ہوتا ہے۔ description فیلڈ 180 حروف تک کا ایک مختصر پروجیکٹ خلاصہ ہے، جو pub.dev پر شائع کرنے کے لیے لازمی ہے۔ تفصیل کو نام دہرائے بغیر پیکیج کے مقصد کی وضاحت کرنی چاہیے اور ذخیرہ تلاش کی اصلاح کے لیے کلیدی الفاظ شامل کرنے چاہئیں۔

yaml
name: my_flutter_app
description: Flutter کے ساتھ ٹاسک مینجمنٹ ایپلیکیشن
publish_to: 'none'

version اور environment

version فیلڈ جمع کے نشان (1.0.0+1) کے بعد اختیاری بلڈ نمبر کے ساتھ semantic versioning major.minor.patch استعمال کرتا ہے۔ environment سیکشن مطابقت کو یقینی بنانے کے لیے Dart اور Flutter SDK کے کم سے کم اور زیادہ سے زیادہ ورژن مقرر کرتا ہے۔ اگر SDK کے نئے ورژن میں پروجیکٹ کوڈ سے مطابقت نہ رکھنے والی تبدیلیاں ہوں تو بلڈ واضح خرابی کے پیغام کے ساتھ رک جائے گا۔

yaml
version: 1.0.0+1
environment:
  sdk: '>=3.2.0 <4.0.0'
  flutter: '>=3.16.0'

dependencies اور dev_dependencies

dependencies سیکشن ان پیکیجز کو فہرست کرتا ہے جو رن ٹائم پر ایپلیکیشن چلانے کے لیے ضروری ہیں۔ dev_dependencies سیکشن میں جانچ، کوڈ جنریشن اور ترقی کے لیے پیکیج ہوتے ہیں — یہ ریلیز بلڈ میں شامل نہیں ہوتے۔ انحصار کو الگ کرنا کارکردگی کے لیے بہت اہم ہے: dependencies میں ہر پیکیج حتمی APK یا IPA کا سائز بڑھاتا ہے، نیز اضافی لائبریریوں کی ابتدا کی وجہ سے ایپلیکیشن شروع ہونے کا وقت بھی بڑھاتا ہے۔

yaml
dependencies:
  flutter:
    sdk: flutter
  http: ^1.2.0
  provider: ^6.1.0
  shared_preferences: ^2.2.0
  cached_network_image: ^3.3.0

dev_dependencies:
  flutter_test:
    sdk: flutter
  mockito: ^5.4.0
  build_runner: ^2.4.0

اثاثوں اور فونٹس کی ترتیب

flutter سیکشن میں وسائل، فونٹس اور پلیٹ فارم کے پیرامیٹرز کو ترتیب دینے کے لیے ذیلی سیکشنز ہوتے ہیں۔ وسائل paths array کے ذریعے منسلک ہوتے ہیں جو مخصوص فائلوں یا پوری ڈائریکٹریز کی وضاحت کرتا ہے۔ تمام راستے پروجیکٹ کی جڑ کے نسبت بتائے جاتے ہیں، pubspec.yaml کے نسبت نہیں۔ یہ ایک اہم باریک بینی ہے جو اکثر ابتدائی Flutter ڈویلپرز کو الجھن میں ڈالتی ہے۔

yaml
flutter:
  uses-material-design: true
  assets:
    - assets/images/
    - assets/icons/
    - assets/config.json
    - assets/data/translations/
  fonts:
    - family: RobotoMono
      fonts:
        - asset: fonts/RobotoMono-Regular.ttf
        - asset: fonts/RobotoMono-Bold.ttf
          weight: 700
        - asset: fonts/RobotoMono-Italic.ttf
          style: italic

pubspec.yaml کے ذریعے اثاثوں کو منسلک کرنا فائلوں کو رن ٹائم پر AssetBundle کے ذریعے قابل رسائی بناتا ہے۔ یہ تصاویر، JSON، ٹیکسٹ فائلوں اور کسی بھی دوسرے وسائل کے لیے کام کرتا ہے۔ Flutter خود بخود مختلف اسکرین ریزولوشنز کو سپورٹ کرتا ہے: اگر آپ images/2x/ اور images/3x/ شامل کرتے ہیں، تو Flutter ڈیوائس پکسل ریشو کی بنیاد پر مناسب تصویر کا ورژن منتخب کرے گا۔ ایسا کرنے کے لیے، assets میں صرف روٹ images/ فولڈر بتانا کافی ہے۔

کسٹم فونٹس family نام اور طرز کی فہرست کے ساتھ fonts سیکشن کے ذریعے شامل کیے جاتے ہیں۔ pubspec.yaml میں تبدیلی کے بعد، تبدیلیاں لاگو کرنے کے لیے flutter pub get چلانا ضروری ہے۔ فونٹس MaterialApp تھیم میں عالمی طور پر اور مخصوص ویجیٹس میں مقامی طور پر استعمال کیے جا سکتے ہیں۔ ہر طرز کے لیے، آپ weight (100–900) اور style (normal, italic) بتا سکتے ہیں، جو Flutter کو کوڈ میں FontWeight اور FontStyle استعمال کرتے وقت صحیح فونٹ فائل منتخب کرنے کی اجازت دیتا ہے۔

انحصار اور ورژن کا انتظام

pub انحصار کے ماخذ بتانے کے کئی طریقوں کی حمایت کرتا ہے: pub.dev، Git ذخیرے، مقامی راستے اور نجی ذخیرے۔ ماخذ کا انتخاب ترقی کے مرحلے پر منحصر ہے: مستحکم ورژن کے لیے pub.dev استعمال ہوتا ہے، forks اور حسب ضرورت ترمیم کے لیے Git، متوازی طور پر تیار کردہ لائبریریوں کے لیے مقامی راستہ۔

ماخذنحومثال
Pub.dev^1.0.0http: ^1.2.0
Gitgit: urlgit: https://github.com/user/pkg.git
مقامی راستہpath: ./libpath: ../my_package
میزبانیhosted: namehosted: my_private_repo

^version آپریٹر ایک مطابقت رکھنے والے ورژن کی نشاندہی کرتا ہے: ^1.2.0 ورژن >=1.2.0 اور <2.0.0 کی اجازت دیتا ہے۔ یہ CocoaPods میں ~> آپریٹر اور npm میں Caret آپریٹر کے مشابہ ہے۔ pub SAT solver الگورتھم کے ذریعے خود بخود انحصار کی الجھن کو حل کرتا ہے، جو تمام پابندیوں کو پورا کرنے والے ورژن کا مجموعہ تلاش کرتا ہے۔ اگر ایسا کوئی مجموعہ موجود نہ ہو تو pub متضاد پیکیجز کی نشاندہی کرتے ہوئے ایک تفصیلی پیغام دکھاتا ہے۔

pubspec.lock فائل انحصار کے عین مطابق ورژن کو مقفل کرتی ہے۔ یہ ٹیم کی تمام مشینوں پر دوبارہ قابل تولید بلڈ کو یقینی بنانے کے لیے ایپلیکیشنز کے لیے ورژن کنٹرول میں محفوظ کی جانی چاہیے۔ لائبریریوں کے لیے، pubspec.lock ذخیرے میں شامل نہیں کیا جاتا، کیونکہ لائبریری صارفین کو مختلف انحصار ورژن کے ساتھ اسے استعمال کرنے کے قابل ہونا چاہیے۔ flutter pub upgrade کمانڈ pubspec.yaml کی پابندیوں کے مطابق تمام انحصار کو اپ ڈیٹ کرتی ہے، جبکہ flutter pub outdated دکھاتا ہے کہ کون سے پیکیج اپ ڈیٹ کیے جا سکتے ہیں۔

بلڈ اور اشاعت کی ترتیب

pub.dev پر ایپلیکیشن شائع کرنے کے لیے، ترتیبات publish_to سیکشن میں بتائی جاتی ہیں۔ 'none' قدر حادثاتی پیکیج اشاعت کو روکتی ہے، جو اندرونی یا غیر عوامی منصوبوں کے لیے اہم ہے۔ اگر publish_to غائب ہے تو pub ڈیفالٹ pub.dev پر پیکیج شائع کرنے کی کوشش کرتا ہے، جو ناپسندیدہ کوڈ کے اخراج کا باعث بن سکتا ہے۔

flutter سیکشن میں پلیٹ فارم کے پیرامیٹرز شامل ہیں: generate پلیٹ فارم فائلوں کی خودکار تخلیق کے لیے، اور deferred-components ماڈیولر فعالیت لوڈنگ کے لیے۔ generate: true پیرامیٹر Flutter کو flutter create --platforms کے ذریعے نئے پلیٹ فارم شامل کرتے وقت خود بخود پلیٹ فارم پروجیکٹس (iOS، Android، Web) بنانے اور اپ ڈیٹ کرنے پر مجبور کرتا ہے۔ اس پیرامیٹر کے بغیر، پلیٹ فارم فولڈر کی ساخت pubspec.yaml سے غیر مطابقت پذیر ہو سکتی ہے۔

yaml
flutter:
  generate: true
  deferred-components:
    - name: photoEditor
      libraries:
        - package:photo_editor/library.dart

platforms سیکشن پیکیج کے لیے ہدف پلیٹ فارمز مقرر کرتا ہے۔ ایپلیکیشنز کے لیے، یہ flutter create کے ذریعے کسی مخصوص پلیٹ فارم کی حمایت شامل کرتے وقت خود بخود متعین ہوتا ہے۔ پلیٹ فارمز کو pubspec.yaml میں ترمیم کرکے دستی طور پر شامل اور ہٹایا جا سکتا ہے۔ Deferred Components ایپلیکیشن کے حصوں کو ضرورت کے مطابق لوڈ کرنے کی اجازت دیتے ہیں، انسٹالیشن کا سائز کم کرتے ہیں — یہ خاص طور پر گیمز اور بڑی مقدار میں شاذ و نادر استعمال ہونے والے مواد والی ایپلیکیشنز کے لیے متعلقہ ہے۔

پیکیج شائع کرتے وقت pub تمام pubspec.yaml فیلڈز کو ذخیرے کی ضروریات کی تعمیل کے لیے چیک کرتا ہے۔ لازمی فیلڈز name، version اور description کی عدم موجودگی اشاعت کو مسترد کرنے کا سبب بنتی ہے۔ مزید برآں، لائسنس کی درستگی اور README.md اور CHANGELOG.md کی موجودگی کی جانچ کی جاتی ہے۔ کوڈ تجزیہ کار کی غلطیوں (dart analyze) والے پیکیجز بھی توثیق میں ناکام ہوتے ہیں۔ کامیاب اشاعت کے بعد، پیکیج چند منٹوں میں pub.dev پر دستیاب ہو جاتا ہے۔

dependency_overrides سیکشن عبوری انحصار کی پابندیوں کو نظر انداز کرتے ہوئے، پیکیج کے مخصوص ورژن کو زبردستی بتانے کی اجازت دیتا ہے۔ یہ ایک طاقتور لیکن خطرناک طریقہ کار ہے: اگر غلط طریقے سے استعمال کیا جائے تو یہ لائبریری کی عدم مطابقت کا سبب بن سکتا ہے۔ dependency_overrides کو صرف عارضی طور پر تنازعات حل کرنے یا نئے ورژن جانچنے کے لیے استعمال کریں۔ بنیادی انحصار درست کرنے کے بعد، طویل مدت میں پروجیکٹ کے انحصار گراف کو توڑنے سے بچنے کے لیے اوور رائڈ کو ہٹا دینا چاہیے۔

pubspec.yaml میں executables سیکشن قابل عمل اسکرپٹس بتانے کی اجازت دیتا ہے جو pub پیکیج کو فعال کرتے وقت PATH میں انسٹال کرتا ہے۔ یہ Dart میں لکھے گئے CLI ٹولز کے لیے مفید ہے، جیسے build_runner یا dart_code_metrics۔ dart pub global activate کمانڈ پیکیج کو عالمی طور پر انسٹال کرتی ہے، executables میں بتائے گئے اسکرپٹس کو ٹرمینل سے قابل رسائی بناتی ہے۔ ایپلیکیشنز کے لیے، executables عام طور پر استعمال نہیں ہوتا، کیونکہ انٹری پوائنٹ lib/main.dart میں main کے ذریعے متعین ہوتا ہے۔

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

pubspec.yaml ٹیب کیوں قبول نہیں کرتا؟

YAML فارمیٹ انڈینٹیشن کے لیے ٹیب کے حروف کو منع کرتا ہے۔ ہر nesting سطح کے لیے بالکل دو خالی جگہیں استعمال کریں۔ انڈینٹیشن کی غلطی flutter pub get چلاتے وقت غیر متوقع حرف کے پیغام کے ساتھ نحو کی غلطی کا سبب بنتی ہے۔ VS Code Flutter پلگ ان کے ساتھ خود بخود درست انڈینٹیشن داخل کرتا ہے۔

dependencies اور dev_dependencies میں کیا فرق ہے؟

dependencies حتمی ایپلیکیشن بلڈ میں شامل ہوتے ہیں اور صارفین کے آلات پر رن ٹائم میں دستیاب ہوتے ہیں۔ dev_dependencies صرف ترقی اور جانچ کے دوران استعمال ہوتے ہیں — یہ ریلیز APK یا IPA میں شامل نہیں ہوتے۔ مثال: flutter_test کو صرف dev_dependencies میں ہونا چاہیے تاکہ پروڈکشن بلڈ کا سائز نہ بڑھے۔

pubspec.yaml میں تمام انحصار کیسے اپ ڈیٹ کریں؟

flutter pub upgrade کمانڈ pubspec.yaml میں بتائی گئی پابندیوں کے مطابق تمام انحصار کو تازہ ترین ورژن میں اپ ڈیٹ کرتی ہے۔ ایک پیکیج اپ ڈیٹ کرنے کے لیے، flutter pub upgrade <پیکیج_کا_نام> استعمال کریں۔ flutter pub outdated کمانڈ پرانے ورژن اور دستیاب اپ ڈیٹس والے پیکیجز کی فہرست دکھاتی ہے۔

پیکیج ورژن سے پہلے ^ کی علامت کا کیا مطلب ہے؟

^ کی علامت caret ورژننگ کی نشاندہی کرتی ہے۔ ^1.2.0 کا مطلب 1.2.0 سے 2.0.0 تک کوئی بھی ورژن، 2.0.0 کو چھوڑ کر۔ یہ pubspec.yaml میں انحصار بتانے کے لیے معیاری آپریٹر ہے، جو بڑی API تبدیلیوں کے خطرے کے بغیر بگ فکسز اور معمولی اپ ڈیٹس کی ضمانت دیتا ہے۔

کیا pubspec.lock کو git میں شامل کرنا چاہیے؟

ہاں، ایپلیکیشنز کے لیے ایک جیسے بلڈ کو یقینی بنانے کے لیے pubspec.lock ذخیرے میں لازمی ہے۔ لائبریریوں کے لیے، اسے شامل نہ کرنے کی سفارش کی جاتی ہے تاکہ لائبریری صارفین انحصار کے تازہ ترین مطابقت پذیر ورژن حاصل کر سکیں۔ یہ روایت Ruby میں Gemfile.lock اور Node.js میں package-lock.json کے قوانین سے ملتی جلتی ہے۔

خلاصہ

  • pubspec.yaml YAML فارمیٹ میں Flutter پروجیکٹ مینی فیسٹ ہے جو انحصار، وسائل اور میٹا ڈیٹا کا انتظام کرتا ہے
  • name، version اور environment سیکشنز مطابقت کے لیے لازمی میٹا ڈیٹا اور SDK پابندیاں متعین کرتے ہیں
  • dependencies میں اہم رن ٹائم پیکیج ہوتے ہیں، dev_dependencies — صرف ترقی اور جانچ کے لیے
  • اثاثے اور فونٹس خودکار اسکرین ریزولوشن انتخاب کے ساتھ flutter سیکشن کے ذریعے منسلک ہوتے ہیں
  • انحصار کے ذرائع: مختلف منظرناموں کے لیے pub.dev، Git، مقامی راستے اور نجی ذخیرے
  • pubspec.lock ٹیم کی تمام مشینوں پر دوبارہ قابل تولید بلڈ کے لیے ورژن مقفل کرتا ہے
  • YAML فارمیٹ میں بلڈ کے وقت ساخت کی توثیق کے ساتھ ٹیب کے بغیر دو خالی جگہوں کی انڈینٹیشن ضروری ہے

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

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

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

مزید پڑھیں