سؤال

أواجه مشكلات مع وحدة تسمى DCIntrospect-ARC والتي يجب أن تعمل فقط في وضع DEBUG.فهو يتحقق من تحديد ماكرو DEBUG قبل التشغيل.ومع ذلك، لم يتم تعريفه في هدف CocoaPods وعلى الرغم من أنني أعمل في وضع التصحيح في Xcode، إلا أنه فشل في التشغيل لأنه لم يتم تعريف ماكرو DEBUG.

يمكنني تحديد ماكرو DEBUG في podspec باستخدام

s.xcconfig = { "GCC_PREPROCESSOR_DEFINITIONS" => '$(inherited) DEBUG=1' }

ولكن هذا يحدد DEBUG لجميع تكوينات البناء وليس فقط تكوين DEBUG.

  1. هل هذه مشكلة CocoaPods؟ألا يجب تحديد ماكرو DEBUG بشكل عام للـ Pods؟
  2. هل يمكنني حل هذه المشكلة في ملف Podspec وإعلان ماكرو DEBUG في تكوين بناء Debug فقط؟
هل كانت مفيدة؟

المحلول

يمكنك استخدام Hook post_install في Podfile.

يتيح لك هذا الخطط إجراء أي تغييرات أخيرة في مشروع Xcode الذي تم إنشاؤه قبل كتابة القرص، أو أي مهام أخرى قد ترغب في تنفيذها. http://guides.cocoapods.org/syntax/podfile.html# post_install

giveacodicetagpre.

نصائح أخرى

بفضل John، أكملت البرنامج النصي المخصص Podfile الخاص بي، مما يغير مستوى التحسين إلى الصفر ويمكننا التأكيدات.

لدي تكوينات تصحيح متعددة (لجنة التنسيق الإدارية وبرز)، لذلك كنت بحاجة إلى تحديث العديد من الخصائص لأغراض تصحيح الأخطاء.

giveacodicetagpre.

الإجابة المقبولة اعتبارا من الآن لا يعمل من أجل القرون السريعة. فيما يلي تغيير سطر واحد إلى تلك الإجابة التي يبدو أنها تعمل لكليهما.

giveacodicetagpre.

أعتقد أن الإجابة المقبولة ليست مناسبة لي. config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', 'DEBUG=1']

||= يستخدم لتعيين متغير فارغ أو لا شيء، ولكن إذا كان config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ليس فارغا ؟

لا يمكن تعديل المصفوفة على الإطلاق.القيمة هي ["POD_CONFIGURATION_PRODUCTION=1", "$(inherited)"] لي.

لذلك أعطيت الجواب الكامل.

post_install do |installer_representation|
    installer_representation.pods_project.build_configurations.each do |config|
        if config.name == 'Release' || config.name == 'Production' || config.name == 'Release-InHouse'
          config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= []
          config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] |= ['$(inherited)', 'NDEBUG=1']
        end
    end
end 

||= [] تأكد من أن المتغير عبارة عن مصفوفة صالحة.و arrayA |= arrayB يعني arrayA + arrayB وتخلص من العنصر المتكرر، ثم ارجع إلى arrayA.

أسهل:فقط تأكد من حصولك على DEBUG=1 الماكرو إلىGC_PREPROCESSOR_DEFINITIONS الخاص بك في مشروعك في xCode لوضع التصحيح ولكن ليس وضع الإصدار.إذا قمت بإضافته على مستوى المشروع (وليس أهدافًا محددة)، فسيتم توريثه بواسطة جميع الأهداف (اختبار التصحيح، والأهداف المخصصة، وما إلى ذلك).يتم تعيين هذا افتراضيًا في المشاريع الجديدة، ومن المتوقع عمومًا أن يكون موجودًا هناك.إذا كنت في عداد المفقودين، يمكن أن يكون لها تأثير واسع النطاق.

إذا كان لا يزال لا يعمل، تأكد من أن لديك أيضًا $(inherited) في جميع أهدافك لـGC_PREPROCESSOR_DEFINITIONS.يعتمد كل من CocoaPods وDEBUG على ذلك.

settings

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