سؤال

عناوين بديلة (لمساعدة عمليات البحث)

ضغط PNGs

تقليل حجم أرشيف iPhone (.IPA)

إضافة قاعدة بناء لضغط الصور في Xcode


لا يمكن تنزيل تطبيقات iOS إلا عبر 3G إذا كانت أقل من 100 ميجابايت. ما هي أفضل الاستراتيجيات لتقليل حجم التطبيق؟

المجالات التي أرغب في التركيز عليها هي:

  • الصور
  • قواعد بيانات
  • شفرة
  • مكتبات ثابتة

NB: يمكن الاطلاع على السؤال الأصلي في مراجعات هذا السؤال

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

المحلول

PNG هو في الحقيقة أفضل خيار لضغط الصور بدون فقدان. يمكنك تحسين PNGs الخاصة بك للحجم باستخدام pngout, ، لكن هل يمكنني الاستفسار عن الملفات التي تشغل مساحة كبيرة على وجه التحديد؟ كيف تقارن بإصدار غير Debug؟

تحرير: إذا كنت ترغب في نساء مجاني من pngout ، ألق نظرة على pnggauntlet.

نصائح أخرى

إضافة قاعدة بناء Xcode لضغط PNGs

يمكن أن تشكل الصور في تطبيق iOS حجمها. هذا صحيح بشكل خاص إذا كان تطبيقًا عالميًا يتطلب منه أن يكون له كل الصورة في ثلاث نسخ (معيار iPhone ، iPhone Retina iPad).

أفضل نوع من الصور لاستخدامه في تطبيق iOS هو PNG. عندما أنشأ المصمم هذه الصور في Photoshop ، يتم حفظها مع الكثير من بيانات التعريف التي يمكن تجاهلها.

ومع ذلك ، فأنت لا تريد أن تفقد كل هذه البيانات تمامًا لأنه من المفيد للمصممين إذا كانوا بحاجة إلى تغيير الصورة.

PNGOUT تحسين

هناك العديد من الأدوات لتحسين ملفات PNG ، ولكن pngout يبدو أن الخيار الأفضل.

  1. قم بتنزيل إصدار Mac من PNGOUT.
  2. انسخ تطبيق سطر الأوامر الثنائي pngout إلى دليل مع مشروعك. إن إضافة ثنائي إلى دليل المشروع يتأكد من أنه متاح لأي شخص يقوم ببناء المشروع على أي نظام.

إنشاء قاعدة بناء (Xcode 4)

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

  1. إضافة تصحيح وحدات الماكرو لتكوينات البناء الخاصة بك. يعد تحسين PNGs مكثفًا تمامًا ، وبالتالي فأنت تريد فقط القيام بذلك في بنيات التوزيع. Pre-processor macrosكما ترون من بين آخرين أضفت DEBUG_BUILD=1 و DISTRIBUTION_BUILD=1.

  2. إضافة قاعدة بناء لملفات PNG. تقوم قاعدة البناء ببساطة بمعالجة نوع ملف محدد (و/أو) أثناء عملية الإنشاء. قوة هذا هو القواعد يمكن ربطها معًا. قاعدة البناء - Xcode 4 http://tinypic.com/images/404.gif

  3. انقر فوق الزر "إضافة قاعدة" ؛

    • قم بتعيين العملية على "مصدر الملفات بأسماء مطابقة" وقيمتها *.png.
    • تعيين باستخدام "البرنامج النصي المخصص"

الصق هذا الرمز في مربع البرنامج النصي

echo "----------------------------------------------------------------" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
echo "${INPUT_FILE_PATH}" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
echo "${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
echo ${GCC_PREPROCESSOR_DEFINITIONS} >> "${DERIVED_FILES_DIR}/pngout-log.txt"

BUILD=`echo ${GCC_PREPROCESSOR_DEFINITIONS} | grep -o DISTRIBUTION_BUILD`

echo $BUILD >> "${DERIVED_FILES_DIR}/pngout-log.txt"

if [ "${BUILD}" == "DISTRIBUTION_BUILD" ]; then
echo "COMPRESS" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
"${PROJECT_DIR}/build-process/pngout" -y -q -force "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}"
else
echo "COPY" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
cp -f "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}"
fi

echo "...done." >> "${DERIVED_FILES_DIR}/pngout-log.txt"

هناك العديد من متغيرات البيئة التي ملاحظة:

  • ${INPUT_FILE_PATH} - المسار الكامل إلى ملف الصورة
  • ${INPUT_FILE_NAME} - اسم ملف الصورة (مع التمديد)
  • ${DERIVED_FILES_DIR} - حيث يقوم Xcode Stell ببناء الملفات وما إلى ذلك
  • ${GCC_PREPROCESSOR_DEFINITIONS} - وحدات الماكرو التي حددتها أعلاه

يتم العمل على هذا الخط:

    "${PROJECT_DIR}/build-process/pngout" -y -q -force "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}"

${PROJECT_DIR} هو الطريق الكامل لمشروعك ، -y الكتابة فوق الملفات الحالية ، -q حدود pngoutS الإخراج و -force يمنع pngout من الخروج مع حالة 2 عندما لا يمكن تحسين ملف وتسبب في أخطاء بناء تقرير XCODE.

هذا البرنامج النصي يختبر ببساطة ${GCC_PREPROCESSOR_DEFINITIONS} لمعرفة ما إذا كان أ DISTRIBUTION_BUILD إذا كان الأمر كذلك فهو يستخدم pngout لتحسين الملف ، وإلا فإنه ينسخه إلى ${DERIVED_FILES_DIR} لذلك يمكن لـ Xcode الاستمرار في معالجته.

أخيراً, ، لا تنسى أن تضيف ${DERIVED_FILES_DIR}/${INPUT_FILE_NAME} إلى قائمة "ملفات الإخراج" هذه هي الطريقة التي يعرف بها XCode كيفية العثور على الملفات التي قمت بمعالجتها.

عادة ما يكون بناء التصحيح أكبر بكثير من بناء الإصدار. حاول البناء في وضع الإصدار.

هناك بعض خيارات البرمجيات التي قد تساعد أيضًا. لست متأكدًا من ما هو افتراضي لوضع إصدار iPhone. سوف تتحسن من أجل ثنائي أصغر. هناك أيضًا خيار لتجريد التعليمات البرمجية الميتة من شأنه إزالة أي رمز لا يمكن تشغيله أبدًا. كما قد تحاول تجريد الثنائي .. لست متأكدًا مما إذا كان ذلك يعمل مع ثنائيات iPhone.

هذا يفترض أن مشكلتك ترجع إلى حجم ثنائي قابل للتنفيذ وليس موارد الصورة.

انا إستعملت ImageOptim و Imagealpha لتقليل حجم التطبيق. إلقاء نظرة على هذا casestudy لمزيد من المعلومات. TweetBot لـ iPad

RJStelling لديه إجابة لطيفة حقًا ، ولم أستطع البدء في قول ذلك بشكل أفضل ، ولكن هناك مشكلة صغيرة واحدة في ذلك. لن يعمل مع الصور المترجمة. هذه ليست سوى مشكلة إذا قمت بتضمين نص في الصور ، وهذا شيء أوصي به بشدة أبدًا إذا كنت تستطيع تجنب ذلك. ومع ذلك ، إذا كان عليك استخدام الصور المترجمة ، فاتبع جميع خطوات Rjstelling باستثناء بدلاً من استخدام:

if [ "${BUILD}" == "DISTRIBUTION_BUILD" ]; then
echo "COMPRESS" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
"${PROJECT_DIR}/build-process/pngout" -y -q -force "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}"
else
echo "COPY" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
cp -f "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}"
fi

استخدم الرمز أدناه:

if [ "${BUILD}" == "DISTRIBUTION_BUILD" ]; then
echo "COMPRESS" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
"${PROJECT_DIR}/build-process/pngout" -y -q -force "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_REGION_PATH_COMPONENT}${INPUT_FILE_NAME}"
else
echo "COPY" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
cp -f "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_REGION_PATH_COMPONENT}${INPUT_FILE_NAME}"
fi

لاحظ أن التغيير الوحيد هو مسار ملف التصدير. عليك أن تستعد INPUT_FILE_REGION_PATH_COMPONENT إلى مسار التصدير للحصول على توطين الصورة للعمل بشكل صحيح. INPUT_FILE_REGION_PATH_COMPONENT فارغ عادة ما لم يكن هناك مجلد محلي للملف المحدد. ولما كان الأمر كذلك ، فإنه يوفر اسم المجلد وعمق شرطة مائلة ، لذلك ليس عليك ذلك.

يجب عليك أيضًا تغيير Output Files الإعداد ل ${DERIVED_FILES_DIR}/${INPUT_FILE_REGION_PATH_COMPONENT}${INPUT_FILE_NAME} لكي يعمل هذا.

لست متأكدًا مما إذا كنت الشخص الوحيد الذي واجهت هذه المشكلة على الإطلاق ، ولكن نأمل أن يساعد شخص ما.

لقد خفضت تطبيق iOS من 90 ميغابايت إلى 50 ميجابايت في الأشهر القليلة الماضية. فيما يلي بعض النصائح والأدوات:

إلى ملف تعريف حجم تطبيق iOS

  1. قم بفك ضغط IPA الخاص بك للتحقق من الموارد مثل ملفات الفيديو والخط والخط.

  2. ملف تعريف الملف الثنائي الخاص بك عن طريق المكتبة وملفات الكائنات (الفئات) باستخدام ملف LinkMap و Xcode LinkMap Parser.

لتقليل ملفات الصور

لتقليل الملف الثنائي

  • رموز تصحيح الشريط
  • العثور على واردات غير مستخدمة باستخدام فوي

فحص ملف .IPA

ما عليك سوى تغيير امتداد ملف .IPA إلى .zip ، ثم افتحه باستخدام Finder لإلغاء ضغطه. انقر بزر الماوس الأيمن على حزمة .APP غير المصدفة واختر "إظهار محتويات الحزمة" لرؤية الموارد في الداخل. هذا يمكن أن يعطيك فكرة عما يستخدم مساحة أكبر.

يمكنك فحص الحجم المضغوط لكل عنصر في .IPA الخاص بك عن طريق فتح المحطة وتنفيذ الأمر التالي:

unsip -lv/path/to/your/app.ipa

يحتوي عمود الحجم على حجم مضغوط لكل ملف داخل ملف .IPA الخاص بك. يجب عليك تقييم هذا الحجم أثناء عملك لتقليل حجم الموارد في تطبيقك. يمكنك تقليل حجم المورد كثيرًا ، ولكن بعد إنتاج ملف .IPA ، قد تكتشف أن الحجم المضغوط لهذا المورد لم يتغير بشكل كبير. تقنية أكثر فاعلية لتقليل حجم ملف .IPA هي إزالة الموارد غير الضرورية.

للوصول إلى المقال الكامل ، راجع حلقة الوصل من موقع Apple Developer.

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