Apple Frameworks
Cheat Sheet'lar
Apple Frameworks Cheat Sheet
iOS ekotizimidagi eng muhim mahalliy (native) imkoniyatlar: UserNotifications, LocalAuthentication (Face ID), CoreLocation, PhotosUI, StoreKit 2 va Haptics bo'yicha tezkor qo'llanma.
1. UserNotifications (Bildirishnomalar)
import UserNotifications
final class NotificationManager {
static let shared = NotificationManager()
// 1. Ruxsat so'rash
func requestPermission() async -> Bool {
do {
return try await UNUserNotificationCenter.current().requestAuthorization(
options: [.alert, .badge, .sound]
)
} catch {
return false
}
}
// 2. Mahalliy bildirishnoma rejalashtirish
func scheduleReminder(title: String, body: String, delaySeconds: TimeInterval) {
let content = UNMutableNotificationContent()
content.title = title
content.body = body
content.sound = .default
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: delaySeconds, repeats: false)
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request)
}
}
2. LocalAuthentication (Face ID / Touch ID)
import LocalAuthentication
final class BiometricAuthManager {
static func authenticateUser() async -> (success: Bool, error: String?) {
let context = LAContext()
var error: NSError?
guard context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) else {
return (false, "Biometriya qo'llab-quvvatlanmaydi yoki o'rnatilmagan")
}
let reason = "Ilovaga kirish uchun shaxsingizni tasdiqlang"
do {
let success = try await context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: reason)
return (success, nil)
} catch {
return (false, error.localizedDescription)
}
}
}
3. CoreLocation (Geolokatsiya)
import CoreLocation
final class LocationService: NSObject, CLLocationManagerDelegate {
private let manager = CLLocationManager()
var onLocationUpdate: ((CLLocation) -> Void)?
override init() {
super.init()
manager.delegate = self
manager.desiredAccuracy = kCLLocationAccuracyBest
}
func requestLocationPermission() {
manager.requestWhenInUseAuthorization()
}
func startTracking() {
manager.startUpdatingLocation()
}
// Delegate metodlari
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let location = locations.last else { return }
onLocationUpdate?(location)
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("Geolokatsiya xatosi:", error.localizedDescription)
}
}
4. PhotosUI: Zamonaviy Rasm Tanlash (PhotosPicker)
SwiftUI (iOS 16+):
import SwiftUI
import PhotosUI
struct AvatarPickerView: View {
@State private var selectedItem: PhotosPickerItem?
@State private var selectedImage: Image?
var body: some View {
PhotosPicker(selection: $selectedItem, matching: .images) {
if let selectedImage {
selectedImage.resizable().scaledToFit().frame(width: 100, height: 100)
} else {
Label("Rasm tanlash", systemImage: "photo")
}
}
.onChange(of: selectedItem) { _, newItem in
Task {
if let data = try? await newItem?.loadTransferable(type: Data.self),
let uiImage = UIImage(data: data) {
selectedImage = Image(uiImage: uiImage)
}
}
}
}
}
5. StoreKit 2 (In-App Purchases & Obunalar)
Apple'ning zamonaviy async/await asosidagi to'lov tizimi.
import StoreKit
@MainActor
final class StoreManager: ObservableObject {
@Published var products: [Product] = []
func loadProducts() async {
do {
products = try await Product.products(for: ["uz.azimjondev.pro_monthly", "uz.azimjondev.lifetime"])
} catch {
print("Mahsulotlarni yuklashda xato:", error)
}
}
func purchase(product: Product) async throws -> Bool {
let result = try await product.purchase()
switch result {
case .success(let verification):
switch verification {
case .verified(let transaction):
// To'lov muvaffaqiyatli o'tdi, transaction.finish() qilish shart
await transaction.finish()
return true
case .unverified:
return false
}
case .userCancelled:
return false
case .pending:
return false
@unknown default:
return false
}
}
}
6. Haptic Feedback (Vibratsiya va Qaytma Aloqa)
Foydalanuvchi tugmalarni bosganda yoki biror amal muvaffaqiyatli bo'lganda taktil sezgi hosil qilish:
import UIKit
enum Haptics {
// Ta'sir (Impact): .light, .medium, .heavy, .rigid, .soft
static func impact(_ style: UIImpactFeedbackGenerator.FeedbackStyle = .medium) {
let generator = UIImpactFeedbackGenerator(style: style)
generator.prepare()
generator.impactOccurred()
}
// Xabarnoma (Notification): .success, .warning, .error
static func notification(_ type: UINotificationFeedbackGenerator.FeedbackType) {
let generator = UINotificationFeedbackGenerator()
generator.prepare()
generator.notificationOccurred(type)
}
// Tanlov o'zgarganda (Selection)
static func selection() {
let generator = UISelectionFeedbackGenerator()
generator.prepare()
generator.selectionChanged()
}
}
// Ishlatish:
Haptics.impact(.medium)
Haptics.notification(.success)