Универсальная пользовательская инфраструктура iOS с использованием Xcode 6.4

Я создал пользовательскую инфраструктуру iOS, используя Xcode 6. И я попробовал много сценариев для создания универсальной рамки (для симулятора и устройства). Но ни один из них не работал у меня. Пожалуйста, предложите мне способ создания универсальной универсальной структуры для iOS в Xcode 6.

Ответ 1

Чтобы объединить два двоичных файла в универсальный двоичный код через терминал:

Сначала скомпилируйте двоичный код устройства, затем скомпилируйте бинарный файл симулятора отдельно.

Найдите оба двоичных файла. Если вы хотите проверить, какие архитектуры скомпилированы в каждую, вы можете запустить эту команду в терминале:

lipo -info /path/to/binary

Пример вывода:

Архитектуры в жирном файле:/path/to/binary: armv7 arm64

Теперь вы можете объединить оба двоичных файла в один:

lipo -create /path/to/simulator/binary /path/to/device/binary -output /path/to/output/binary

Выходной двоичный файл будет иметь как симулятор, так и архитектуры устройств.

Ответ 2

Чтобы создавать и распространять фреймворки:

В рамках проекта:

  • Задайте настройку сборки для цели (и для проекта, просто для того, чтобы быть в безопасности) "Только для создания активных архитектур" - НЕТ. Мы хотим построить все архитектуры таким образом, чтобы двоичный файл можно было использовать во всех поддерживаемых устройствах, а не только для того, с чем мы строим. В зависимости от цели развертывания (и, как следствие, поддерживаемых вами устройств) вам может потребоваться добавить архитектуру ARMv7s
  • Создайте для симулятора и создайте для устройства, это приведет к созданию двух фреймворков в папке с производными данными.

В терминале:

  1. Найдите производный путь данных для проекта. Найдите папку 'Build- > Продукты'. Внутри это должны быть "-iphoneos" и "-iphonesimulator". Внутри каждой находится папка .framework. копия один из них в какую-нибудь красивую папку. Из каждой из этих .frawework папок скопируйте двоичный файл, который находится там, в одну папку.
  2. В терминале запускается команда 'lipo -create -output <outputName> <binaryFromiphoneos> < & binaryFromiphonesimulator GT;". Это создаст толстую двоичную систему со всеми архитектурами как для симулятора, так и для устройств. Замените его в скопированном каталоге .framework с новым сгенерированный.

Использовать фреймворк в другом приложении:

  • Выберите проект в Навигаторе проектов, выберите цель и выберите вкладку "Общие".
  • перетащите папку .framework туда, где она говорит: "Добавьте туда встроенные двоичные файлы".
  • В настройках сборки цели добавьте путь к папке .framework в "Пути поиска в Framework".
  • Импортировать файлы в исходный код с помощью #import < frameworkName/frameworkName.h >

Ответ 3

в соответствии с вашим вопросом, чтобы создать пользовательскую универсальную структуру, вам необходимо выполнить следующие шаги или посетить " http://www.raywenderlich.com/65964/create-a-framework-for-ios", как это сделали рамки raywenderlich.

1.) Создайте проект.

2.) Добавьте новую цель в свой проект, выбрав Cocoa Touch Static Library. (Подробнее см. http://www.raywenderlich.com/65964/create-a-framework-for-ios)

3.) Теперь вам нужно настроить статическую библиотеку как активную схему. Убедитесь, что вы добавили "arm64" в "Настройки сборки" в библиотеке блогов.

4.) Выберите устройство iOS и выполните сборку. Но для этого вам нужно добавить script ниже, чтобы сделать его универсальным для всех устройств.

Script:

# define output folder environment variable
UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal
UNIVERSAL_OUTPUTFOLDERx64=${BUILD_DIR}/${CONFIGURATION}-universalx64

# Step 1. Build Device and Simulator versions
xcodebuild -target DKHelperLib ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
xcodebuild -target DKHelperLib -configuration ${CONFIGURATION} -sdk iphonesimulator -arch i386 BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
xcodebuild -target DKHelperLib -configuration ${CONFIGURATION} -sdk iphonesimulator -arch x86_64 BUILD_DIR="${UNIVERSAL_OUTPUTFOLDERx64}" BUILD_ROOT="${BUILD_ROOT}"

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

# Step 2. Create universal binary file using lipo
lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a" "${UNIVERSAL_OUTPUTFOLDERx64}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a"

# Last touch. copy the header files. Just for convenience
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/include" "${UNIVERSAL_OUTPUTFOLDER}/"