pubspec.yaml Flutter پروجیکٹ کی مرکزی ترتیب کی فائل ہے، جو ایپلیکیشن کے میٹا ڈیٹا، انحصار اور وسائل کی وضاحت کرتی ہے۔ یہ YAML فارمیٹ میں لکھی جاتی ہے اور Dart پیکیج مینیجر کے ذریعے پروسیس ہوتی ہے۔ Dart دستاویزات، 2025 کے مطابق، اس فائل کی ہر سطر بلڈ، اشاعت اور ورژننگ کو متاثر کرتی ہے۔ pubspec.yaml Flutter ماحولیاتی نظام میں Podfile، build.gradle اور Info.plist کی جگہ لے کر ان کے افعال کو ایک واحد مینی فیسٹ میں یکجا کرتا ہے۔
اہم نکات
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 لازمی اور اختیاری سیکشنز پر مشتمل ہوتا ہے۔ ہر سیکشن پروجیکٹ کی ترتیب کے ایک مخصوص پہلو کے لیے ذمہ دار ہے۔ سیکشنز کی ترتیب اہم نہیں ہے، لیکن کمیونٹی کی روایت کے مطابق درجہ بندی یہ ہے: میٹا ڈیٹا، ماحول، انحصار، وسائل، پلیٹ فارمز۔
name فیلڈ snake_case فارمیٹ میں ایک منفرد پیکیج شناخت کنندہ مقرر کرتا ہے، جو صرف چھوٹے لاطینی حروف، ہندسوں اور زیر خط سے بنا ہوتا ہے۔ description فیلڈ 180 حروف تک کا ایک مختصر پروجیکٹ خلاصہ ہے، جو pub.dev پر شائع کرنے کے لیے لازمی ہے۔ تفصیل کو نام دہرائے بغیر پیکیج کے مقصد کی وضاحت کرنی چاہیے اور ذخیرہ تلاش کی اصلاح کے لیے کلیدی الفاظ شامل کرنے چاہئیں۔
name: my_flutter_app
description: Flutter کے ساتھ ٹاسک مینجمنٹ ایپلیکیشن
publish_to: 'none'
version فیلڈ جمع کے نشان (1.0.0+1) کے بعد اختیاری بلڈ نمبر کے ساتھ semantic versioning major.minor.patch استعمال کرتا ہے۔ environment سیکشن مطابقت کو یقینی بنانے کے لیے Dart اور Flutter SDK کے کم سے کم اور زیادہ سے زیادہ ورژن مقرر کرتا ہے۔ اگر SDK کے نئے ورژن میں پروجیکٹ کوڈ سے مطابقت نہ رکھنے والی تبدیلیاں ہوں تو بلڈ واضح خرابی کے پیغام کے ساتھ رک جائے گا۔
version: 1.0.0+1
environment:
sdk: '>=3.2.0 <4.0.0'
flutter: '>=3.16.0'
dependencies سیکشن ان پیکیجز کو فہرست کرتا ہے جو رن ٹائم پر ایپلیکیشن چلانے کے لیے ضروری ہیں۔ dev_dependencies سیکشن میں جانچ، کوڈ جنریشن اور ترقی کے لیے پیکیج ہوتے ہیں — یہ ریلیز بلڈ میں شامل نہیں ہوتے۔ انحصار کو الگ کرنا کارکردگی کے لیے بہت اہم ہے: dependencies میں ہر پیکیج حتمی APK یا IPA کا سائز بڑھاتا ہے، نیز اضافی لائبریریوں کی ابتدا کی وجہ سے ایپلیکیشن شروع ہونے کا وقت بھی بڑھاتا ہے۔
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 ڈویلپرز کو الجھن میں ڈالتی ہے۔
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.0 | http: ^1.2.0 |
| Git | git: url | git: https://github.com/user/pkg.git |
| مقامی راستہ | path: ./lib | path: ../my_package |
| میزبانی | hosted: name | hosted: 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 سے غیر مطابقت پذیر ہو سکتی ہے۔
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 کے ذریعے متعین ہوتا ہے۔
اکثر پوچھے گئے سوالات
YAML فارمیٹ انڈینٹیشن کے لیے ٹیب کے حروف کو منع کرتا ہے۔ ہر nesting سطح کے لیے بالکل دو خالی جگہیں استعمال کریں۔ انڈینٹیشن کی غلطی flutter pub get چلاتے وقت غیر متوقع حرف کے پیغام کے ساتھ نحو کی غلطی کا سبب بنتی ہے۔ VS Code Flutter پلگ ان کے ساتھ خود بخود درست انڈینٹیشن داخل کرتا ہے۔
dependencies حتمی ایپلیکیشن بلڈ میں شامل ہوتے ہیں اور صارفین کے آلات پر رن ٹائم میں دستیاب ہوتے ہیں۔ dev_dependencies صرف ترقی اور جانچ کے دوران استعمال ہوتے ہیں — یہ ریلیز APK یا IPA میں شامل نہیں ہوتے۔ مثال: flutter_test کو صرف dev_dependencies میں ہونا چاہیے تاکہ پروڈکشن بلڈ کا سائز نہ بڑھے۔
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 ذخیرے میں لازمی ہے۔ لائبریریوں کے لیے، اسے شامل نہ کرنے کی سفارش کی جاتی ہے تاکہ لائبریری صارفین انحصار کے تازہ ترین مطابقت پذیر ورژن حاصل کر سکیں۔ یہ روایت Ruby میں Gemfile.lock اور Node.js میں package-lock.json کے قوانین سے ملتی جلتی ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں