Создание iOS Framework для устройства и универсальной конфигурации с включением бит-кода и отключением бит-кода из терминала командной строки

#!/bin/sh

UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal

# make sure the output directory exists
mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"

# Step 1. Build Device and Simulator versions
xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO \
    -configuration  ${CONFIGURATION} -sdk iphoneos  \
    BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build
xcodebuild -target "${PROJECT_NAME}" -configuration ${CONFIGURATION} \
    -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO BUILD_DIR="${BUILD_DIR}" \
    BUILD_ROOT="${BUILD_ROOT}" clean build

# Step 2. Copy the framework structure (from iphoneos build) to the universal folder
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework" "${UNIVERSAL_OUTPUTFOLDER}/"


# Step 4. Create universal binary file using lipo and place the combined executable in the copied framework directory
lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/${PROJECT_NAME}" \
    "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}" \ 
    "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework/${PROJECT_NAME}"

# Step 5. Convenience step to copy the framework to the project's directory
cp -R "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework" "${PROJECT_DIR}"

# Step 6. Convenience step to open the project's directory in Finder
open "${PROJECT_DIR}"

У меня есть выше сценарий оболочки для создания фреймворка для устройства и универсальный из вариантов сборки XCode.

Возможно ли создать / сгенерировать iOS Framework из командного терминала с вышеуказанным сценарием оболочки с приведенной ниже конфигурацией???

  • 1) Создать основу для отключения устройства с помощью бит-кода
  • 2) Создать основу для включения устройства с битовым кодом
  • 3) Создать фреймворк для отключения универсального биткода
  • 4) Создать фреймворк для включения универсального биткода

Пожалуйста, дайте мне знать, как создать / сгенерировать iOS Framework из командного терминала. Должен ценить за лучшее объяснение

2 ответа

Просто добавьте аргумент к вашему xcodebuild

ENABLE_BITCODE=NO для отключения биткода

ENABLE_BITCODE=YES для включения биткода

Например

xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build ENABLE_BITCODE=NO

В размещенном вами сценарии оболочки замените код # Step 1. Build Device and Simulator versions со следующим соответственно.

1) Создать основу для отключения устройства с помощью бит-кода:

xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO \
-configuration  ${CONFIGURATION} -sdk iphoneos  \
BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build ENABLE_BITCODE=NO
xcodebuild -target "${PROJECT_NAME}" -configuration ${CONFIGURATION} \
-sdk iphonesimulator ONLY_ACTIVE_ARCH=NO BUILD_DIR="${BUILD_DIR}" \
BUILD_ROOT="${BUILD_ROOT}" clean build ENABLE_BITCODE=YES

2) Создать основу для включения устройства с битовым кодом

xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO \
-configuration  ${CONFIGURATION} -sdk iphoneos  \
BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build ENABLE_BITCODE=YES
xcodebuild -target "${PROJECT_NAME}" -configuration ${CONFIGURATION} \
-sdk iphonesimulator ONLY_ACTIVE_ARCH=NO BUILD_DIR="${BUILD_DIR}" \
BUILD_ROOT="${BUILD_ROOT}" clean build ENABLE_BITCODE=YES

3) Создать фреймворк для отключения универсального биткода

xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO \
-configuration  ${CONFIGURATION} -sdk iphoneos  \
BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build ENABLE_BITCODE=NO
xcodebuild -target "${PROJECT_NAME}" -configuration ${CONFIGURATION} \
-sdk iphonesimulator ONLY_ACTIVE_ARCH=NO BUILD_DIR="${BUILD_DIR}" \
BUILD_ROOT="${BUILD_ROOT}" clean build ENABLE_BITCODE=NO

4) Создать фреймворк для включения универсального биткода

 xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO \
-configuration  ${CONFIGURATION} -sdk iphoneos  \
BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build ENABLE_BITCODE=YES
xcodebuild -target "${PROJECT_NAME}" -configuration ${CONFIGURATION} \
-sdk iphonesimulator ONLY_ACTIVE_ARCH=NO BUILD_DIR="${BUILD_DIR}" \
BUILD_ROOT="${BUILD_ROOT}" clean build ENABLE_BITCODE=YES

РЕДАКТИРОВАТЬ:
Чтобы построить фреймворк, вы можете сделать одно из следующих действий:
1. Заменив код для каждой конфигурации, перейдите в терминал и запустите сценарий оболочки, перейдя в папку, содержащую сценарий оболочки, и запустите ./<nameOfTheShellScriptFile>.sh, Но убедитесь, что у вас есть доступные настройки сборки. Это создаст структуру с соответствующей конфигурацией в каталоге ${BUILD_DIR}/${CONFIGURATION}-universal,
2. Добавьте скрипт запуска в Xcode. Откройте свой проект в XCode, щелкните раскрывающийся список схем (рядом с кнопкой "Стоп") и выберите схему вашего фреймворка. Снова откройте выпадающий список и нажмите "Редактировать схему...". Вы видите 6 действий слева. Вы выбираете, к какому действию более целесообразно добавить скрипт (хотите ли вы создать эту универсальную среду для каждого действия Run или только при архивации?). Оставьте это действие и нажмите "Пост-действия". Нажмите кнопку +, чтобы добавить новое действие, и нажмите "Создать действие сценария". Установите "Предоставить параметры сборки из" вашей целевой платформе, чтобы получить соответствующие параметры сборки. Вставьте скрипт в текстовую область и нажмите "Закрыть". Теперь, после того, как вы каждый раз выполняете действие, в которое вы помещаете скрипт, скрипт запускается и снова создает каркас для архитектур устройств и симуляторов и помещает универсальный каркас в каталог вашего проекта. Это займет некоторое время, особенно если ваш проект большой, поэтому терпеливо ждите, пока откроется поисковик, чтобы показать каталог вашего проекта, содержащий фреймворк. Теперь вы можете либо изменить код в скрипте каждый раз, когда вам нужна другая конфигурация (битовый код включен или отключен), либо добавить разные схемы для другой конфигурации и выполнить весь этот шаг для каждой из схем с соответствующим сценарием.

Другие вопросы по тегам