Я создал пользовательскую инфраструктуру iOS, используя Xcode 6. И я попробовал много сценариев для создания универсальной рамки (для симулятора и устройства). Но ни один из них не работал у меня. Пожалуйста, предложите мне способ создания универсальной универсальной структуры для iOS в Xcode 6.
Универсальная пользовательская инфраструктура iOS с использованием Xcode 6.4
Ответ 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
- Создайте для симулятора и создайте для устройства, это приведет к созданию двух фреймворков в папке с производными данными.
В терминале:
- Найдите производный путь данных для проекта. Найдите папку 'Build- > Продукты'. Внутри это должны быть "-iphoneos" и "-iphonesimulator". Внутри каждой находится папка .framework. копия один из них в какую-нибудь красивую папку. Из каждой из этих .frawework папок скопируйте двоичный файл, который находится там, в одну папку.
- В терминале запускается команда '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}/"