.xcconfig — یہ کیا ہے، نحو اور Xcode میں متغیرات

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

.xcconfig ایک Xcode ترتیب فائل ہے جو “کلید=قدر” کی شکل میں پروجیکٹ کے Build Settings کو مرکزی طور پر منظم کرتی ہے۔ ہر ترتیب کے لیے Xcode انٹرفیس میں دستی طور پر پیرامیٹرز تبدیل کرنے کے بجائے، ڈویلپر انہیں ایک ٹیکسٹ فائل میں بیان کرتے ہیں جسے ورژن کیا جا سکتا ہے اور پروجیکٹس کے درمیان دوبارہ استعمال کیا جا سکتا ہے۔ Apple Developer Documentation, 2025 کے مطابق، .xcconfig کا استعمال پروجیکٹ سیٹ اپ کے وقت کو 70% تک کم کرتا ہے اور ڈویلپرز کے درمیان ترتیب کے فرق کو ختم کرتا ہے۔ .xcconfig فائلیں ایک دوسرے سے وراثت حاصل کر سکتی ہیں، ترتیب کی ایک زنجیر تشکیل دیتی ہیں۔

اہم نکات

  • .xcconfig — کلید=قدر کی شکل میں Build Settings پر مشتمل ایک ٹیکسٹ فائل۔
  • وراثت #include کے ذریعے ترتیب کی زنجیریں بنانے کی اجازت دیتی ہے (Dev ← Staging ← Production)۔
  • مشروط ہدایات پلیٹ فارم (iOS/macOS) اور فن تعمیر کے لیے ترتیب کے ذریعے منظم کی جاتی ہیں۔
  • Build Settings .xcconfig میں Xcode پروجیکٹ میں طے شدہ قدروں کو زیر کرتے ہیں۔
  • ورژن کنٹرول — .xcconfig پروجیکٹ کے ساتھ Git میں xcshareddata میں محفوظ ہوتی ہے۔

.xcconfig کیا ہے؟

.xcconfig (Xcode ترتیب فائل) ایک سادہ ٹیکسٹ فائل ہے جس میں PARAMETER_NAME = value کی شکل میں Build Settings ہوتے ہیں۔ .xcconfig فائلیں Xcode بلڈ ترتیبات کے مرکزی انتظام کے لیے استعمال ہوتی ہیں: یہ Build Settings انٹرفیس میں فیلڈز کی دستی تدوین کو تبدیل کرتی ہیں۔ ہر .xcconfig ایک Build Configuration (Debug, Release) یا پورے پروجیکٹ سے منسلک ہوتی ہے اور کسی بھی build setting کو زیر کر سکتی ہے: SWIFT_VERSION, IPHONEOS_DEPLOYMENT_TARGET, PRODUCT_BUNDLE_IDENTIFIER, CODE_SIGN_STYLE, PROVISIONING_PROFILE_SPECIFIER۔

.xcconfig کے آنے سے پہلے، بلڈ سیٹنگز صرف project.pbxproj میں محفوظ تھیں — ایک بائنری/plist فائل جسے diff میں پڑھنا مشکل ہے اور جس پر تبصرہ کرنا ناممکن ہے۔ .xcconfig نے اس مسئلے کو حل کیا: ڈویلپر پیرامیٹرز پر تبصرہ کر سکتے ہیں، انہیں معنی کے مطابق گروپ کر سکتے ہیں، مختلف ماحول کے لیے ورژن قابل فائلیں بنا سکتے ہیں، اور فائلوں کے درمیان پیرامیٹرز وراثت میں لے سکتے ہیں۔ اس نے .xcconfig کو iOS پروجیکٹس میں ترتیب کے انتظام کا حقیقی معیار بنا دیا۔

.xcconfig فائلیں پروجیکٹ کے اندر، عام طور پر Configurations/ یا BuildConfig/ فولڈر میں واقع ہوتی ہیں۔ ہر فائل ایک Build Configuration سے مطابقت رکھتی ہے: Debug.xcconfig, Release.xcconfig, Staging.xcconfig۔ اس کے علاوہ، ایک مشترکہ Shared.xcconfig فائل بنائی جاتی ہے، جو #include کے ذریعے تمام ترتیبوں میں شامل ہوتی ہے۔ یہ مشترکہ پیرامیٹرز کو ایک بار متعین کرنے اور ترتیب فائلوں میں مخصوص پیرامیٹرز کو زیر کرنے کی اجازت دیتا ہے۔

UI Build Settings پر فوائد

Diff پڑھنے کی اہلیت: .xcconfig میں تبدیلیاں Git diff میں عام لائنوں کے طور پر نظر آتی ہیں۔ project.pbxproj کے برعکس، جہاں فیلڈ کی ترتیب تبدیل کرنے سے ایک پیرامیٹر کی تدوین پر 50 لائنیں تبدیلیاں دکھائی دیتی ہیں۔ تبصرے: .xcconfig میں آپ بتا سکتے ہیں کہ ہر پیرامیٹر کی ضرورت کیوں ہے۔ وراثت: آپ مشترکہ ترتیبات کے ساتھ ایک بنیادی ترتیب بنا سکتے ہیں اور صرف Debug اور Release کے لیے ضروری پیرامیٹرز کو زیر کر سکتے ہیں۔

.xcconfig کا نحو اور ساخت

متغیرات اور تبدیلیاں

.xcconfig کا نحو جتنا ممکن ہو سکے آسان ہے: ہر لائن ایک پیرامیٹر ہے، نام اور قدر مساوی نشان سے الگ کی گئی ہے۔ = کے ارد گرد خالی جگہوں کو نظر انداز کیا جاتا ہے۔ قدروں میں $(VARIABLE_NAME) یا ${VARIABLE_NAME} کی شکل میں متغیرات ہو سکتے ہیں۔ تبصرے // یا # سے شروع ہوتے ہیں اور لائن کے آخر تک لاگو ہوتے ہیں۔ لائنیں بیک سلیش \ کا استعمال کرتے ہوئے اگلی لائن پر جاری رہتی ہیں۔ خالی لائنوں کو نظر انداز کیا جاتا ہے۔

.xcconfig میں متغیرات دوسرے متغیرات کا حوالہ دے سکتے ہیں، مرکب قدریں بنا سکتے ہیں۔ مثال کے طور پر: PRODUCT_NAME = MyApp، PRODUCT_BUNDLE_IDENTIFIER = com.example.$(PRODUCT_NAME)۔ Xcode بلڈ کے وقت قدر کا اندازہ لگاتا ہے، متغیرات کی اصل قدروں کو تبدیل کرتا ہے۔ AGP سسٹم متغیرات کو بھی سپورٹ کرتا ہے: ARCHS, SDK_NAME, CONFIGURATION, PLATFORM_NAME، جو بلڈ ماحول کے ذریعے متعین ہوتے ہیں۔

مشروط ترتیب کے لیے، مربع بریکٹ میں پلیٹ فارم کی ہدایات استعمال ہوتی ہیں: PARAMETER[sdk=iphoneos*] = value۔ مثال کے طور پر، SUPPORTED_PLATFORMS[sdk=iphoneos*] = iphoneos پیرامیٹر کو صرف iOS بلڈز کے لیے متعین کرتا ہے۔ وائلڈ کارڈ معاونت یافتہ ہیں: * (کوئی بھی حرف)، ? (ایک حرف)۔ مشروط ہدایات متعدد پلیٹ فارمز کے لیے ایک .xcconfig رکھنے اور ایک فائل میں iOS اور macOS کے لیے مختلف قدریں متعین کرنے کی اجازت دیتی ہیں۔

text
// Shared.xcconfig — مشترکہ پروجیکٹ کی ترتیبات
SWIFT_VERSION = 5.0
IPHONEOS_DEPLOYMENT_TARGET = 16.0
SDKROOT = iphoneos
TARGETED_DEVICE_FAMILY = 1,2

// بنڈل شناخت کنندہ — سابقہ اور نام سے بنتا ہے
BUNDLE_ID_PREFIX = com.example
PRODUCT_NAME = MyApp
PRODUCT_BUNDLE_IDENTIFIER = $(BUNDLE_ID_PREFIX).$(PRODUCT_NAME)

// macOS کے لیے مشروط ترتیب
SUPPORTED_PLATFORMS[sdk=macosx*] = macosx
PRODUCT_BUNDLE_IDENTIFIER[sdk=macosx*] = $(BUNDLE_ID_PREFIX).$(PRODUCT_NAME).mac

// ورژن بندی
MARKETING_VERSION = 2.4.1
CURRENT_PROJECT_VERSION = 37

#include کے ذریعے ترتیب کی وراثت

#include ایک .xcconfig پری پروسیسر ہدایت ہے جو کسی دوسری .xcconfig فائل کے مواد کو شامل کرتی ہے۔ ہدایات کو نیسٹ کیا جا سکتا ہے: Shared.xcconfig “Base.xcconfig” کو #include کر سکتا ہے، Debug.xcconfig “Shared.xcconfig” کو #include کر سکتا ہے۔ وراثت کی زنجیر ترتیبات کا ایک درجہ بندی بنانے کی اجازت دیتی ہے، جہاں ہر سطح پچھلی سطح کے پیرامیٹرز کو زیر کرتی ہے۔ #include آخری تحریر کے اصول پر کام کرتا ہے: اگر ایک ہی پیرامیٹر شامل اور مرکزی فائل دونوں میں متعین ہو، تو مرکزی فائل کی قدر کو ترجیح دی جاتی ہے۔

ایک عام iOS پروجیکٹ کے لیے صحیح درجہ بندی: Base.xcconfig (سب سے عام پیرامیٹرز) ← Shared.xcconfig (پروجیکٹ کی ترتیبات) ← Debug.xcconfig یا Release.xcconfig۔ Base.xcconfig معیارات متعین کرتا ہے (SWIFT_VERSION, DEPLOYMENT_TARGET)، Shared.xcconfig — پروجیکٹ کی خصوصیات (PRODUCT_NAME, PREPROCESSOR_DEFINITIONS)، Debug/Release — ماحول (DEBUG_INFORMATION_FORMAT, OPTIMIZATION_CFLAGS)۔ #include چکروں کی اجازت نہیں دیتا — چکری انحصار پائے جانے پر Xcode خرابی دکھائے گا۔

مثال: Config/Base.xcconfigConfig/iOS/Shared.xcconfigConfig/iOS/Debug.xcconfig۔ یہ ساخت Base کو iOS، macOS اور tvOS پروجیکٹس کے لیے اور Shared کو صرف iOS کے لیے دوبارہ استعمال کرنے کی اجازت دیتی ہے۔ نوٹ: #include جڑ .xcconfig کے مقام سے فائل کا نام یا رشتہ دار راستہ استعمال کرتا ہے۔ مطلق راستے تجویز نہیں کیے جاتے — وہ دوسری مشینوں اور CI/CD میں بلڈ کو توڑ دیتے ہیں۔

text
// --- Config/Base.xcconfig ---
SWIFT_VERSION = 5.0
ENABLE_MODULE_VERIFIER = YES
CLANG_ENABLE_MODULES = YES

// --- Config/iOS/Shared.xcconfig ---
#include "../Base.xcconfig"
IPHONEOS_DEPLOYMENT_TARGET = 16.0
PRODUCT_BUNDLE_IDENTIFIER = com.example.myapp

// --- Config/iOS/Debug.xcconfig ---
#include "Shared.xcconfig"
OPTIMIZATION_CFLAGS = -O0
DEBUG_INFORMATION_FORMAT = dwarf
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG
ENABLE_TESTABILITY = YES

// --- Config/iOS/Release.xcconfig ---
#include "Shared.xcconfig"
OPTIMIZATION_CFLAGS = -Osize
DEBUG_INFORMATION_FORMAT = dwarf-with-dsym
SWIFT_COMPILATION_MODE = wholemodule

Xcode پروجیکٹ میں .xcconfig جوڑنا

پروجیکٹ کی سطح اور ہدف کی سطح کی ترتیبات

.xcconfig کو پروجیکٹ سے جوڑنا Project Info ← Configurations میں کیا جاتا ہے۔ ہر Build Configuration (Debug, Release, AdHoc) کے لیے “Based on Configuration File” ڈراپ ڈاؤن سے متعلقہ .xcconfig منتخب کی جاتی ہے۔ اگر کوئی ترتیب فائل سے منسلک نہیں ہے، تو Xcode project.pbxproj کی قدریں استعمال کرتا ہے۔ .xcconfig منتخب کرنے کے بعد، فائل کے تمام پیرامیٹرز اس ترتیب کے لیے فعال ہو جاتے ہیں۔

پروجیکٹ کی سطح اور ہدف کی سطح کی ترتیبات میں فرق کرنا ضروری ہے۔ پروجیکٹ کی سطح کا .xcconfig تمام اہداف کے لیے طے شدہ پیرامیٹرز متعین کرتا ہے۔ ہدف کی سطح کا .xcconfig انہیں ایک مخصوص ہدف کے لیے زیر کرتا ہے۔ اگر کوئی پیرامیٹر ہدف کی سطح کے .xcconfig میں متعین نہیں ہے، تو پروجیکٹ کی سطح سے قدر استعمال ہوتی ہے۔ اگر وہاں بھی متعین نہیں ہے، تو project.pbxproj سے قدر استعمال ہوتی ہے۔ عملی اصول: مشترکہ پیرامیٹرز (بلڈ، ورژن) پروجیکٹ کی سطح پر رکھیں، اور ہدف کی خصوصیات (بنڈل شناخت کنندہ، پروویژننگ) ہدف کی سطح پر رکھیں۔

.xcconfig اور UI Build Settings کے درمیان تصادم کی صورت میں، UI کی قدر کو ترجیح دی جاتی ہے (یہ .xcconfig کو زیر کرتا ہے)۔ یہ الجھن کا سبب بن سکتا ہے: ایک ڈویلپر UI میں Build Setting تبدیل کرتا ہے، یہ نہیں جانتے کہ .xcconfig ایک مختلف قدر متعین کرتی ہے۔ یہ تجویز کیا جاتا ہے کہ مکمل طور پر .xcconfig پر سوئچ کریں اور UI Build Settings کو ہاتھ نہ لگائیں۔ یہ جانچنے کے لیے کہ کون سا پیرامیٹر لاگو ہو رہا ہے، xcrun xcodebuild -showBuildSettings استعمال کریں — یہ کمانڈ تمام سطحوں کو حل کرنے کے بعد تمام پیرامیٹرز کی حتمی قدریں دکھائے گی۔

مثال: Dev، Staging، Production ماحول

تین سطحی ترتیب پر غور کریں: Dev (مقامی ترقی)، Staging (جانچ سرور)، Production (اجرا)۔ ہر ماحول کے لیے ایک علیحدہ .xcconfig بنائی جاتی ہے، جو مختلف API_URL، لاگنگ اور سرٹیفکیٹ قدریں متعین کرتی ہے۔ Dev localhost استعمال کرتا ہے، Staging staging.api.example.com استعمال کرتا ہے، Production api.example.com استعمال کرتا ہے۔ تینوں #include کے ذریعے مشترکہ Shared.xcconfig کو وراثت میں لیتے ہیں۔

ماحول کے درمیان فرق کرنے والا اہم پیرامیٹر PRODUCT_BUNDLE_IDENTIFIER ہے۔ Dev کے لیے: com.example.myapp.dev، Staging کے لیے: com.example.myapp.staging، Production کے لیے: com.example.myapp۔ مختلف بنڈل ID ایک ہی آلے پر تینوں ورژن بیک وقت انسٹال کرنے کی اجازت دیتی ہیں۔ CODE_SIGN_IDENTITY (Dev کے لیے Apple Development، Production کے لیے Apple Distribution) اور PROVISIONING_PROFILE_SPECIFIER بھی مختلف ہوتے ہیں۔

کوڈ میں قدریں منتقل کرنے کے لیے، INFOPLIST_PREFIX_HEADER یا -D پری پروسیسر کے ساتھ OTHER_SWIFT_FLAGS استعمال ہوتا ہے۔ Swift میں پری پروسیسر نہیں ہے، اس لیے Active Compilation Conditions استعمال ہوتی ہیں: SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEV۔ کوڈ میں: #if DEV; #elseif STAGING; #else; #endif۔ Objective-C کے لیے GCC_PREPROCESSOR_DEFINITIONS استعمال ہوتا ہے۔ یہ سورس فائلوں کو تبدیل کیے بغیر مختلف ماحول کے لیے مختلف کوڈ مرتب کرنے کی اجازت دیتا ہے۔

text
// --- Config/Dev.xcconfig ---
#include "Shared.xcconfig"

PRODUCT_BUNDLE_IDENTIFIER = $(BUNDLE_ID_PREFIX).$(PRODUCT_NAME).dev
CODE_SIGN_IDENTITY = Apple Development
PROVISIONING_PROFILE_SPECIFIER = Dev Profile

SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG DEV
OTHER_SWIFT_FLAGS = -D DEV

// Info.plist کے ذریعے API URL — قدر تبدیل ہوتی ہے
API_BASE_URL = http://localhost:3000/api

// --- Config/Staging.xcconfig ---
#include "Shared.xcconfig"

PRODUCT_BUNDLE_IDENTIFIER = $(BUNDLE_ID_PREFIX).$(PRODUCT_NAME).staging
CODE_SIGN_IDENTITY = Apple Development
PROVISIONING_PROFILE_SPECIFIER = Staging Profile

SWIFT_ACTIVE_COMPILATION_CONDITIONS = STAGING
OTHER_SWIFT_FLAGS = -D STAGING
API_BASE_URL = https://staging.api.example.com/v2

// --- Config/Production.xcconfig ---
#include "Shared.xcconfig"

PRODUCT_BUNDLE_IDENTIFIER = $(BUNDLE_ID_PREFIX).$(PRODUCT_NAME)
CODE_SIGN_IDENTITY = Apple Distribution
PROVISIONING_PROFILE_SPECIFIER = AppStore Distribution

SWIFT_ACTIVE_COMPILATION_CONDITIONS = RELEASE
API_BASE_URL = https://api.example.com/v3

.xcconfig اور Info.plist: قدریں منتقل کرنا

.xcconfig کی قدریں متغیرات $(PARAMETER_NAME) کے ذریعے Info.plist میں منتقل کی جا سکتی ہیں۔ اگر .xcconfig میں کوئی پیرامیٹر متعین ہے (مثال کے طور پر، API_BASE_URL)، تو اسے Info.plist میں استعمال کیا جا سکتا ہے: <key>ApiBaseUrl</key><string>$(API_BASE_URL)</string>۔ بلڈ کے وقت، Xcode $(API_BASE_URL) کو .xcconfig کی قدر سے تبدیل کر دیتا ہے۔ یہ کوڈ تبدیل کیے بغیر ایپلیکیشن کو ترتیب دینے کی اجازت دیتا ہے — بس سکیم تبدیل کریں۔

Info.plist میں استعمال ہونے والے .xcconfig پیرامیٹرز عوامی ہونے چاہئیں — وہ بائنری میں جاتے ہیں اور ڈی کمپائل شدہ ایپلیکیشن میں نظر آتے ہیں۔ خفیہ قدروں (ٹوکن، پاس ورڈ) کے لیے .xcconfig استعمال نہ کریں — سرور پر چلنے والی Firebase Remote Config جیسی خدمات استعمال کریں۔ Info.plist کے لیے .xcconfig اس کے لیے موزوں ہے: سرور URLs، ہستیوں کے نام، ٹریکر شناخت کنندگان، feature flags۔

کوڈ میں Info.plist کی قدروں تک رسائی: Objective-C/Swift کے لیے Bundle.main.object(forInfoDictionaryKey: “ApiBaseUrl”)۔ اگر قدر .xcconfig کے ذریعے متعین کی گئی ہے، تو اسے تبدیل کر دیا جائے گا اور Bundle main.infoDictionary میں دستیاب ہو گی۔ یہ طریقہ BuildConfigField (جیسا کہ Android میں ہے) سے بہتر ہے، کیونکہ Info.plist ایک معیاری iOS طریقہ کار ہے، اور اس کی قدریں سسٹم کے تمام اجزاء بشمول extensions، widgets اور Siri Intents کے لیے دستیاب ہیں۔

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

.xcconfig Xcode میں User-Defined Setting سے کیسے مختلف ہے؟

User-Defined Setting ایک حسب ضرورت پیرامیٹر ہے جو UI Build Settings کے ذریعے شامل کیا گیا ہے۔ یہ .xcconfig کی طرح کام کرتا ہے، لیکن اسے ورژن، تبصرہ یا پروجیکٹس کے درمیان دوبارہ استعمال نہیں کیا جا سکتا۔ .xcconfig ڈسک پر ایک فائل ہے، User-Defined Setting project.pbxproj میں ایک اندراج ہے۔

کیا CocoaPods کے لیے .xcconfig استعمال کیا جا سکتا ہے؟

ہاں، CocoaPods ہر ترتیب کے لیے Pods-*.xcconfig فائلیں تیار کرتا ہے۔ ان فائلوں میں پوڈز کو جوڑنے کی ترتیبات ہوتی ہیں۔ Pods.xcconfig جنریٹر فائل میں #include کے ذریعے آپ کے .xcconfig سے خود بخود منسلک ہو جاتا ہے۔ Pods.xcconfig کو دستی طور پر ترمیم نہ کریں — یہ pod install کے دوران اوور رائٹ ہو جاتا ہے۔

Swift کوڈ میں .xcconfig کی قدر کیسے حاصل کریں؟

Info.plist کے ذریعے: .xcconfig میں ایک پیرامیٹر متعین کریں اور Info.plist میں $(PARAM) استعمال کریں۔ کوڈ میں: Bundle.main.infoDictionary[“PARAM”]۔ پری پروسیسر فلیگ کے لیے، SWIFT_ACTIVE_COMPILATION_CONDITIONS اور #if CONDITION استعمال کریں۔

.xcconfig کیوں لاگو نہیں ہو رہی؟

وجوہات: آپ نے UI Build Settings میں قدر تبدیل کر دی (UI .xcconfig کو زیر کرتا ہے)؛ فائل ترتیب سے منسلک نہیں ہے (Project ← Info ← Configurations چیک کریں)؛ غلط #include راستہ؛ پیرامیٹر کے نام میں ٹائپو۔ تشخیص: xcodebuild -showBuildSettings تمام فعال پیرامیٹرز دکھائے گا۔

کیا SwiftUI پروجیکٹس کے لیے .xcconfig ضروری ہے؟

ہاں، .xcconfig UI فریم ورک پر منحصر نہیں ہے۔ SwiftUI پروجیکٹس کے لیے، .xcconfig اتنا ہی مفید ہے: بنڈل ID، ورژن، ماحول کی ترتیبات، feature flags کے لیے SWIFT_ACTIVE_COMPILATION_CONDITIONS کا انتظام۔ SwiftUI .xcconfig کا کوئی متبادل فراہم نہیں کرتا، اس لیے کسی بھی پروجیکٹ کے ساتھ اس کے استعمال کی سفارش کی جاتی ہے۔

خلاصہ

  • .xcconfig — Xcode میں ورژن قابل Build Settings کے انتظام کے لیے ایک ٹیکسٹ فائل۔
  • وراثت #include کے ذریعے Base سے Production تک ترتیب کا درجہ بندی بنانے کی اجازت دیتی ہے۔
  • نحو میں متغیر $(VAR)، مشروط ہدایات [sdk=ios*] اور تبصرے // اور # شامل ہیں۔
  • جوڑنا ہر Build Configuration کے لیے Project Info ← Configurations میں کیا جاتا ہے۔
  • ماحول Dev/Staging/Production بنڈل ID، سرٹیفکیٹ اور API URL میں مختلف ہوتے ہیں۔
  • Info.plist $(PARAM) کے ذریعے .xcconfig سے قدریں وصول کرتا ہے، انہیں رن ٹائم پر قابل رسائی بناتا ہے۔
  • سفارش: تصادم سے بچنے کے لیے مکمل طور پر .xcconfig پر سوئچ کریں اور UI Build Settings استعمال کرنے سے گریز کریں۔

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

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

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

مزید پڑھیں