إنشاء تطبيق OS X متوافق مع الإصدارات السابقة، عند وجود واجهة برمجة تطبيقات جديدة؟

StackOverflow https://stackoverflow.com/questions/1406645

سؤال

أحاول ترقية أحد التطبيقات (كلارك) لتوفير التوافق 10.6.

خطتي هي استخدام مسارين مختلفين للتعليمات البرمجية اعتمادًا على إصدار OSX المستخدم.

في الإصدار 10.5، سيتم استخدام وحدة تحكم واحدة، والتي تتكون من تعليمات برمجية مخصصة تمامًا لا تعتمد على أي واجهة برمجة تطبيقات Cocoa محددة.في الإصدار 10.6، سيستخدم وحدة تحكم أخرى، والتي تغلف واجهة برمجة تطبيقات CoreLocation الجديدة في واجهة مماثلة، بناءً على نفس الفئة المجردة.في وقت التشغيل، سيقوم التطبيق بالتبديل بين وحدات التحكم عن طريق الكشف عن إصدار نظام التشغيل.

يعمل هذا بشكل جيد على الإصدار 10.6 المصمم لـ 10.6 SDK، ولكن نفس الإصدار ينفجر على الإصدار 10.5 مع:

10/09/2009 18:30:50 [0x0-0x12f12f].uk.co.tomtaylor.Clarke[4575] dyld: unknown required load command 0x80000022 
10/09/2009 18:30:51 com.apple.launchd[403] ([0x0-0x12f12f].uk.co.tomtaylor.Clarke[4575]) Exited abnormally: Trace/BPT trap 

إذا قمت بإنشاء 10.5 SDK، فمن الواضح أنه لا يمكنه تجميع عناصر CoreLocation.

كنت أتمنى أن أتمكن من توفير ثنائي واحد لهذا التطبيق.هل هناك طريقة "لإخفاء" CoreLocation API من الإصدار 10.5؟

هل كانت مفيدة؟

المحلول

يجب أن تكون قادرًا على حل هذه المشكلة عن طريق تغيير إعدادات البناء لهدفك:

  1. قم بتعيين Base SDK على 10.6
  2. اضبط Deployment SDK على 10.5

نصائح أخرى

والحيلة SDK نشر يعمل فقط عندما يكون لديك نفس الإطار على كل المنابر ولكن دعوات جديدة في أحدث واحد. لCoreLocation، والإطار بأكمله مفقود على 10.5، لذلك ستفشل التطبيق الخاص بك لتحميل لأنه لا يمكن ربط حيوي إلى الإطار.

ما عليك القيام به ما سبق، بالإضافة إلى إضافة CoreLocation كإطار ضعيفة. تحديد أطر وصلة وثنائيات بناء المرحلة، والعثور على CoreLocation في عرض التفاصيل، وفي تغيير العمود الأوسط "مطلوب" إلى "ضعيف".

وعند إنشاء التطبيق الخاص بك، سوف كسكودي تمرير -weak_framework CoreLocation إلى رابط، وسوف تحميل التطبيق على جميع أنظمة 10.5 و 10.6 بغض النظر عما إذا CoreLocation موجود. والامر متروك لكم للتأكد من عدم استدعاء أي أساليب CoreLocation إلا إذا كنت تقوم بتشغيل في الواقع على 10.6، بالرغم من ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top