Info.plist — iOS va macOS ilovalarining XML konfiguratsiya fayli bo'lib, metama'lumotlar, ruxsatlar va ishga tushirish sozlamalarini o'z ichiga oladi. U ilova kodi ishga tushirilishidan oldin tizim tomonidan qayta ishlanadi. Apple Developer, 2025 ma'lumotlariga ko'ra, to'g'ri sozlangan Info.plistsiz ilova App Store ko'rib chiqishidan o'tmaydi. Info.plist paket identifikatorini, qurilish versiyasini, so'ralgan ruxsatlarni va qo'llab-quvvatlanadigan ekran yo'nalishlarini belgilaydi.
Asosiy ma'lumotlar
Info.plist — bu property list ko'rinishidagi kalit-qiymat juftliklarini o'z ichiga olgan XML formatidagi dict ildiz elementi bilan fayl. U ilova paketi ichida joylashgan va har bir ishga tushirishda kod bajarilishidan oldin tizim tomonidan o'qiladi. Plist formati satrlar, raqamlar, massivlar, lug'atlar, sanalar va mantiqiy qiymatlarni qo'llab-quvvatlaydi, bu murakkab konfiguratsiyalarni tavsiflash imkonini beradi.
Apple Info.plist'dan ilovaning identifikatorini, imkoniyatlari va talablarini aniqlash uchun foydalanadi. Ba'zi kalitlarni o'zgartirish paketni qayta qurishni talab qiladi, chunki ular qurilma yuklanayotganda App Store tomonidan tekshiriladigan metama'lumotlarga ta'sir qiladi. Masalan, nashrdan keyin CFBundleVersion yoki CFBundleIdentifier ni o'zgartirish ilova yangilash jarayonini buzishi mumkin, chunki App Store Connect versiyalarni aniqlash uchun ushbu qiymatlardan foydalanadi.
Asosiy kalitlar Xcode'da loyiha yaratilganda avtomatik ravishda yaratiladi, ammo aksariyat sozlamalar ilova funksionalligi rivojlanishi bilan qo'lda qo'shiladi. Xcode standart kalitlar uchun ochiladigan ro'yxatlar bilan Info.plist grafik muharririni taqdim etadi, bu xato yozish xavfini kamaytiradi. Biroq, Scene Manifest yoki Background Modes kabi murakkab konfiguratsiyalar uchun manba XMLni to'g'ridan-to'g'ri tahrirlash tavsiya etiladi.
Ba'zi Info.plist kalitlari App Store'da nashr qilish uchun majburiydir. Ularning yo'qligi tekshirish bosqichida qurilmani rad etishga olib keladi. Apple Xcode Organizer yoki Transporter orqali arxiv yuklanayotganda ushbu kalitlarni avtomatik ravishda tekshiradi. Dasturchi ko'rib chiqishga yuborishdan oldin barcha majburiy maydonlar to'g'ri to'ldirilganligiga ishonch hosil qilishi kerak.
CFBundleIdentifier kaliti ilovaning noyob identifikatorini teskari domen yozuvida (com.kompaniya.ilova) belgilaydi. U kod imzolash, Push bildirishnomalari, CloudKit, App Groups va boshqa ko'plab Apple xizmatlari uchun ishlatiladi. Nashrdan keyin identifikatorni o'zgartirish App Store tomonidan yangi ilova sifatida qabul qilinadi va mavjud foydalanuvchilar yangilanishni olmaydi. Shuning uchun identifikator ilovaning butun hayot aylanishi davomida o'zgarmas bo'lishi kerak.
<key>CFBundleIdentifier</key>
<string>com.itsectr.myapp</string>
CFBundleShortVersionString (ko'rsatiladigan versiya) va CFBundleVersion (qurilish raqami) kalitlari App Store Connect va tizim tomonidan yangilanishlarni boshqarish uchun ishlatiladi. Versiya major.minor.patch formatida ko'rsatiladi. Qurilish raqami App Store Connect'ga yuklangan har bir qurilma bilan oshishi kerak, hatto ilova versiyasi o'zgarmasa ham. Apple CFBundleVersion'dan qurilmaning yangi yoki avval yuklanganning dublikati ekanligini aniqlash uchun foydalanadi. Qurilish raqami avval yuklangan bilan mos kelsa, ITMS-90161 xatosi beriladi.
<key>CFBundleShortVersionString</key>
<string>1.2.0</string>
<key>CFBundleVersion</key>
<string>42</string>
UISupportedInterfaceOrientations kalitlari iPhone uchun qo'llab-quvvatlanadigan ekran yo'nalishlarini belgilaydi. iPad uchun qurilma suffiksi bilan alohida UISupportedInterfaceOrientations~ipad kaliti ishlatiladi. Har bir yo'nalish satr bilan belgilanadi: UIInterfaceOrientationPortrait, UIInterfaceOrientationLandscapeLeft, UIInterfaceOrientationLandscapeRight, UIInterfaceOrientationPortraitUpsideDown. Agar ilova faqat portret yo'nalishini qo'llab-quvvatlasa, App Store qurilmani rad etadi, agar u faqat iPhone uchun bo'lmasa va iPad uchun faqat portret ko'rsatilgan bo'lsa.
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
</array>
iOS 10 dan boshlab, Apple har bir so'ralgan ruxsatning tavsifini NS (NeXTStep) prefiksli kalitlar orqali talab qiladi. Tavsif shaxsiy API'larga birinchi kirish so'rovida foydalanuvchiga tizim dialogida ko'rsatiladi. Ruxsat talab qiladigan API'ni chaqirishda tegishli NS kalitining yo'qligi ilovaning darhol xato bilan tugatilishiga olib keladi, bu faqat crash loglarida qayd etiladi.
| Kalit | Maqsad |
|---|---|
| NSCameraUsageDescription | Rasm va video uchun kameraga kirish |
| NSPhotoLibraryUsageDescription | Foto kutubxonasiga kirish |
| NSLocationWhenInUseUsageDescription | Faol foydalanish vaqtida geolokatsiya |
| NSMicrophoneUsageDescription | Ovoz yozish uchun mikrofonga kirish |
| NSContactsUsageDescription | Qurilma kontaktlariga kirish |
Har bir maxfiylik kaliti so'rov sababining foydalanuvchi uchun tushunarli tavsifini o'z ichiga olishi kerak. Bo'sh yoki shablon matnlar, masalan “Ilova ishlashi uchun” yoki “Kirish talab qilinadi”, App Store tomonidan rad etilishiga olib keladi. Tavsif aniq funksionallikni tushuntirishi kerak: “Kameraga kirish QR kodlarini skanerlash va profil rasmlarini yaratish uchun kerak”. Har bir qo'llab-quvvatlanadigan til uchun InfoPlist.strings fayllari orqali tavsiflarning lokalizatsiya qilingan versiyalaridan foydalanish tavsiya etiladi.
Shaxsiy ma'lumotlarga kirish bilan API'ni chaqirishda kerakli NS kalitining yo'qligi ilovaning qulashiga olib keladi. Tizim jarayonni xato bilan tugatadi, bu faqat Xcode yoki Firebase Crashlytics'dan crash hisobotlari loglarida ko'rinadi. Foydalanuvchi hech qanday tushuntirishsiz faqat ilovaning to'satdan yopilishini ko'radi. Shuning uchun kameradan, mikrofondan yoki geolokatsiyadan foydalanadigan yangi funksionallikni qo'shishdan oldin avval Info.plist'da tegishli maxfiylik kalitini qo'shish, keyin API chaqiruvini amalga oshirish kerak.
CFBundleURLTypes kaliti ilovada chuqur havolalar uchun maxsus URL sxemalarini ro'yxatdan o'tkazadi. Bu ilovani brauzerdan, elektron pochtadan yoki boshqa ilovalardan myapp://profile/123 ko'rinishidagi havolalar orqali ochish imkonini beradi. Har bir sxema ilovani noyob tarzda identifikatsiya qiladi: agar ikkita ilova bir xil sxemani ro'yxatdan o'tkazsa, tizim foydalanuvchiga qaysi birini ishlatishni tanlash dialogini ko'rsatadi.
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>com.itsectr.myapp</string>
<key>CFBundleURLSchemes</key>
<array>
<string>myapp</string>
</array>
</dict>
</array>
Universal Links ni qo'llab-quvvatlash uchun Entitlements faylida com.apple.developer.associated-domains kaliti talab qilinadi, Info.plist'da emas. Universal Links faqat serverda domenni ilova bilan bog'laydigan apple-app-site-association fayli sozlangan bo'lsa ishlaydi. Maxsus URL sxemalaridan farqli o'laroq, Universal Links tasdiqlash dialogini ko'rsatmaydi va boshqa ilovalar bilan ziddiyatga kelmaydi, chunki maxsus sxemalar emas, balki HTTPS havolalari ishlatiladi. Biroq, ular haqiqiy SSL sertifikatiga ega domenni talab qiladi.
Maxsus sxemalar iOS standart sxemalari bilan ziddiyatga kelishi mumkin. Boshqa ilovalar bilan to'qnashuvlarni minimallashtirish uchun kamida 4 ta belgidan iborat sxemalardan foydalanish tavsiya etiladi. Masalan, „fb” sxemasi juda qisqa va ziddiyatga olib kelishi mumkin. Teskari yozuvdan foydalanish yaxshiroq: myapp:// o'rniga app://. Shuni ham yodda tutish kerakki, agar ilova o'chirilgan bo'lsa, lekin boshqa ilova bir xil sxemani ro'yxatdan o'tkazgan bo'lsa, foydalanuvchi havolaga o'tishda kutilmagan xatti-harakatga duch kelishi mumkin.
UIBackgroundModes kaliti ilovaning fon imkoniyatlarini e'lon qiladi. Har bir rejim Info.plist'da tegishli tavsif va Xcode loyihasining capabilities bo'limida tasdiqlashni talab qiladi. Rejim ko'rsatilmagan bo'lsa, tizim fon vazifasini 30 soniyadan keyin yoki resurslar etishmasligida majburiy tugatishi mumkin.
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>remote-notification</string>
<string>location</string>
<string>processing</string>
</array>
UIApplicationSupportsMultipleScenes kaliti iPad va Mac Catalyst'da ko'p vazifalilikni qo'llab-quvvatlashni yoqadi. Ushbu kalitsiz ilova bir nechta oynalarni boshqarish uchun SwiftUI ScenePhase yoki UIKit UISceneDelegate dan foydalana olmaydi. iPadOS'da foydalanuvchilar bitta ilovaning bir nechta oynalarini ochishi, ular orasida kontentni sudrab olib o'tishi va Split View'dan foydalanishi mumkin. Agar ilova ko'p oynali rejimni qo'llab-quvvatlamasa, ushbu kalitni false qilib o'rnatish tegishli funksionallikni o'chiradi.
LSRequiresIPhoneOS kaliti ilovani iPad'ga o'rnatishni taqiqlaydi. iPad interfeysini qo'llab-quvvatlamaydigan yoki katta ekranga moslashtirilmagan faqat iPhone uchun ilovalarda ishlatiladi. Biroq, Apple ushbu kalitdan zarurat holda foydalanishni tavsiya etmaydi, chunki foydalanuvchilar ilovalar iOS va iPadOS bilan barcha qurilmalarda ishlashini kutishadi. Agar ilova baribir iPhone bilan cheklangan bo'lsa, bu talabning texnik jihatdan asoslanganligiga va App Store tavsifida ko'rsatilganligiga ishonch hosil qiling.
UIViewControllerBasedStatusBarAppearance kaliti holat satri uslubini boshqaradi. Agar NO ga o'rnatilgan bo'lsa, holat satri uslubi Info.plist'dagi UIStatusBarStyle kaliti orqali global ravishda o'rnatiladi. Agar YES (iOS 7 dan boshlab standart) bo'lsa, har bir ViewController preferredStatusBarStyle'ni bekor qilish orqali o'z holat satrini boshqarishi mumkin. Zamonaviy ilovalar uchun YES qoldirish tavsiya etiladi, shunda turli ekranlarda har xil holat satri bo'ladi, masalan qorong'i fonda ochiq va ochiq fonda qorong'i.
UIApplicationExitsOnSuspend kaliti ilovani fon rejimiga o'tishda to'xtatib turish o'rniga to'liq yopishga majbur qiladi. Kamdan-kam ishlatiladi, faqat yuqori xavfsizlik talablari bo'lgan ilovalar uchun: bank ilovalari yoki maxfiy ma'lumotlar bilan ishlaydigan ilovalar. Bunday holda, foydalanuvchi ilovaga tez qaytish imkoniyatini yo'qotadi va har bir ishga tushirish toza holatdan amalga oshiriladi. App Store ko'rib chiqish vaqtida ushbu kalitdan foydalanishning asoslanishini talab qilishi mumkin.
NSAppTransportSecurity kaliti ilovaning tarmoq ulanishlarini boshqaradi. iOS 9 dan boshlab, App Transport Security (ATS) HTTPS talab qilgan holda barcha HTTP ulanishlarini standart sifatida bloklaydi. Muayyan domenlarga vaqtincha HTTP so'rovlariga ruxsat berish uchun NSAppTransportSecurity ichidagi NSExceptionDomains lug'ati ishlatiladi. Rivojlantirish uchun ATSni NSAllowsArbitraryLoads = true orqali to'liq o'chirish mumkin, ammo Apple asoslashni talab qiladi va bunday qurilmalarni jiddiy sababsiz o'tkazmaydi. Ishlab chiqarish qurilmasida ATS foydalanuvchi ma'lumotlari bilan ishlaydigan barcha domenlar uchun yoqilgan bo'lishi kerak.
Tez-tez beriladigan savollar
Info.plist fayli ilova nomi bilan mos keladigan loyiha papkasida joylashgan. Xcode'da u Supporting Files guruhi ichidagi loyiha navigatorida ko'k kitob belgisi bilan ko'rsatiladi. Shuningdek, uni loyiha bo'ylab Spotlight qidiruvi orqali topish mumkin.
Ha, Info.plistni istalgan matn muharririda yoki Xcode grafik interfeysi orqali tahrirlash mumkin. Qo'lda tahrirlash mazmun ustidan to'liq nazorat beradi, ammo XML sintaksisiga ehtiyotkorlikni talab qiladi: har bir ochiladigan <key> direktivi tegishli </key> bilan yopilishi va ma'lumot turlari Apple kutganiga mos kelishi kerak.
SwiftUI loyihalarida Info.plist UIKit loyihalari bilan bir xil ishlaydi. Qo'shimcha ravishda, loyiha sahnalarni boshqarish uchun App protokolidan foydalanmasa, Scene Configuration ni sozlash uchun UIApplicationSceneManifest kaliti talab qilinishi mumkin. SwiftUI App protocol avtomatik ravishda sahna konfiguratsiyasini yaratadi, ammo moslashtirish uchun kalitlarni qo'lda qo'shish talab qilinadi.
Info.plistni Xcode'da oching, ortiqcha belgisini bosing va kalit nomini kiriting. Maxsus kalitlar uchun Apple tizim kalitlari bilan to'qnashuvlarning oldini olish uchun kompaniya prefiksidan foydalaning, masalan CustomKey o'rniga ITSCustomKey. Qiymat turi (String, Number, Array, Dictionary) kutilayotgan ma'lumot formatiga qarab tanlanadi.
Oddiy sabablar: so'ralgan ruxsatlar uchun maxfiylik kalitlarining yo'qligi, noto'g'ri CFBundleIdentifier, Info.plist va App Store Connect'dagi versiyalarning mos kelmasligi, NS kalitlarining bo'sh qiymatlari. Ishlatiladigan API'lar uchun barcha NS kalitlarini tekshiring va har bir tavsif ilova lokalizatsiya tilida mazmunli tushuntirishni o'z ichiga olganligiga ishonch hosil qiling.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.