Создание 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 directory
cp -R "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework" "${PROJECT_DIR}"

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

У меня есть над оболочкой script для создания фреймворка для устройства и универсального из вариантов сборки Xcode.

Возможно ли создать/сгенерировать iOS Framework из командного терминала с помощью выше оболочки script с настройкой ниже.

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

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

Ответ 1

Просто добавьте аргумент в свой 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

Ответ 2

В опубликованной оболочке script замените код под # 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

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