Files
intaleq/intaleq_rider/ios/Runner/AppDelegate.swift
T
Hamza-AyedandClaude Opus 5 0aab85c732 refactor: إعادة تسمية التطبيقات الأربعة siro_* → intaleq_*
المجلدات وأسماء حزم dart واستيراداتها:
  siro_rider → intaleq_rider    siro_driver  → intaleq_driver
  siro_admin → intaleq_admin    siro_service → intaleq_service

شمل ذلك `name:` في كل pubspec وكل `package:siro_*` في الاستيرادات
(115 ملفاً في rider وحده)، وإشارات أسماء المجلدات في docs/ وتعليق في
backend/Admin/notifications/broadcast.php. لم تبقَ إشارة واحدة (تحقّقت).

+ ضُمّت حزم get و get_storage داخل intaleq_driver/packages/ وحُوّلت
مساراتها الثلاثة من `../../Intaleq/packages/*` إلى `./packages/*`. كانت
تُحل عرضاً إلى مجلد App/Intaleq القديم المجاور — تبعية خارج المستودع
تنكسر بأول نقل. لم يبقَ في أي تطبيق تبعية مسار خارج الشجرة.

⚠️ لم تُمسّ بعد: هويات المتاجر (applicationId · PRODUCT_BUNDLE_IDENTIFIER ·
shorebird app_id) ولا الألوان ولا النصوص المرئية ولا النطاقات — كل منها
كوميت منفصل، والهويات تحتاج قرار المالك.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 16:10:58 +03:00

111 lines
3.8 KiB
Swift

import UIKit
import Flutter
import FirebaseCore
import native_geofence
@main
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
// --- 1. تسجيل callback الإضافات للخلفية (مطلوب لـ native_geofence) ---
NativeGeofencePlugin.setPluginRegistrantCallback { registry in
GeneratedPluginRegistrant.register(with: registry)
}
// --- 2. تهيئة Firebase ---
FirebaseApp.configure()
// --- 3. فحص الأمان قبل تشغيل الواجهة الرئيسية ---
// ملاحظة: هذا يعتمد على وجود ملفات SecurityChecks في مشروعك
if SecurityChecks.isDeviceCompromised() {
showSecurityAlert()
return false // يمنع إكمال تشغيل التطبيق
}
// --- 4. إعداد قناة الاتصال مع فلاتر ---
setupMethodChannel()
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
// --- دالة إعداد قناة الاتصال مع تعديل الاسم ---
func setupMethodChannel() {
guard let controller = window?.rootViewController as? FlutterViewController else {
return
}
// !! تعديل مهم جداً: تم تغيير اسم القناة ليتوافق مع اسم تطبيقك الجديد
let channel = FlutterMethodChannel(name: "com.siro.intaleq_rider/security",
binaryMessenger: controller.binaryMessenger)
channel.setMethodCallHandler { call, result in
switch call.method {
case "isNativeRooted":
// يتم إرجاع نتيجة فحص الأمان مباشرة
result(SecurityChecks.isDeviceCompromised())
default:
result(FlutterMethodNotImplemented)
}
}
}
// --- كل الدوال المساعدة من الكود القديم تم نسخها كما هي ---
func showSecurityAlert() {
guard let rootVC = UIApplication.shared.keyWindow?.rootViewController else {
exit(0)
}
let alert = UIAlertController(
title: "Security Warning".localized,
message: "Compromised device detected. Exiting.".localized,
preferredStyle: .alert
)
alert.addAction(UIAlertAction(title: "OK".localized, style: .destructive) { _ in
self.obfuscatedExit()
})
// لمنع إغلاق التنبيه
if #available(iOS 15.0, *) {
alert.presentationController?.delegate = self
}
rootVC.present(alert, animated: true, completion: nil)
}
func obfuscatedExit() {
let selector = NSSelectorFromString(String(format: "%@%@", "ex", "it:"))
if responds(to: selector) {
perform(selector, with: 0)
}
}
}
// --- الامتدادات (Extensions) من الكود القديم ---
// لمنع إغلاق نافذة التنبيه
extension AppDelegate: UIAdaptivePresentationControllerDelegate {
func presentationControllerShouldDismiss(_ presentationController: UIPresentationController) -> Bool {
return false
}
func presentationControllerDidAttemptToDismiss(_ presentationController: UIPresentationController) {
// لا تفعل شيئاً عند محاولة الإغلاق
}
}
// لسهولة الترجمة
extension String {
var localized: String {
return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
}
}