Подтвердить что ты не робот

Как создать фреймворк iPhone и использовать его в других приложениях iPhone

Я хотел бы создать фреймворк для некоторого многоразового кода, который хотел бы включить в другие приложения для iPhone. Каков наилучший способ сделать это? В идеале я бы хотел, чтобы он работал так же, как встроенные фреймворки, и приложение использовало его, не обмахивая файлами сборки.

4b9b3361

Ответ 1

Apple предотвращает использование пользовательских фреймворков на iPhone. Но вы можете использовать старые старые статические библиотеки. В 3.0 GM SDK есть даже шаблон проекта для этого, но вы также можете просто настроить статическую библиотечную цель самостоятельно.

Ответ 2

Я создал шаблоны для Xcode 4, которые позволяют создавать универсальные рамки iOS (которые работают как на устройстве, так и на симуляторе).

После установки шаблонов вы просто выбираете "Статический iOS Framework" при создании нового проекта, и все остальное. Он также работает с модульными тестами.

https://github.com/kstenerud/iOS-Universal-Framework

Ответ 3

Я думал об одном и том же. Пока все, что мне удалось сделать, это сделать один проект именно так, как я его хочу, и скопировать в другую папку, чтобы начать новый проект. Затем я переименую файл .xcodeproj и откройте это. Затем я настраиваю основы (значки, default.png, цель, исполняемый файл) перед созданием нового приложения.

Это неудобно, и НЕ должно использоваться повторное использование кода. Я уверен, что есть лучшие решения. Может быть, какое-то умное использование управления исходным кодом/контроля версий? Может быть, что-то встроенное в XCode? Другие идеи? Я с нетерпением ждем новых сообщений здесь.

Ответ 4

@Nikolai Ruhe - где именно Apple запрещает использование пользовательских фреймворков на iPhone? Я прочитал как лицензионное соглашение для разработчиков программного обеспечения iOS, так и Руководство по обзору App Store, и, похоже, не может найти упоминания о таком запрете.

Я не понимаю, почему Apple разрешает использование пользовательских статических библиотек и запрещает использование настраиваемых фреймворков. Возможно, мне не хватает какого-либо другого юридического документа?

Ответ 5

см. эту ссылку. Вы можете абсолютно создать фреймворк и использовать его. Почему Apple отклонит ваше приложение, если вы структурируете свою программу. посмотреть эту ссылку

Структура - это не что иное, как структурная организация вашего кода. Прямого подхода к этому нет. но вы можете достичь этого, используя пучок и атакующую цель. Добавьте новый Bundle в свой проект и выполните следующий базовый SDK: последний iOS (iOS X.X) (в X.X появится номер последнего SDK iOS, установленного на вашем компьютере). Архитектуры: $(ARCHS_STANDARD_32_BIT) armv6 (это очень важно, чтобы быть именно этим значением, включая пробел до "armv6" ). Этот параметр действителен для Xcode 4.2, если вы используете старую версию, используйте опцию "Стандартный (armv6 armv7)". (значения для этого свойства зависят от значения элемента ниже, поэтому установите его первым). Строить только активную архитектуру: НЕТ (иначе мы не можем скомпилировать armv6 и armv7 одновременно). Действительная архитектура: $(ARCHS_STANDARD_32_BIT) (это очень важно, чтобы быть именно этим значением). Если ваш Xcode показывает две строки с armv6 и armv7, удалите их и вставьте это значение в одну строку. Снятие дескриптора кода: нет. Ссылка со стандартными библиотеками: НЕТ. Тип Mach-O: Перемещаемый файл объекта. Это самое важное изменение. Здесь мы поручаем компилятору рассматривать Bundle как перемещаемый файл, делая это, мы можем превратить его в структуру с настройкой обертки. Другие флаги компоновщика: этот параметр не является обязательным, но если вы планируете использовать какой-либо код на С++ (.cpp или .mm) в этой структуре, Крис Мур (по комментариям) советует использовать опцию "-lstdС++". В этом случае также неплохо было бы использовать "-ObjC", чтобы избежать конфликтов в старых компиляторах. Расширение Wrapper: каркас. Здесь мы меняем Bundle на Framework. Для Xcode фреймворки - это всего лишь папка с расширением .framework, которая содержит внутри одного или нескольких скомпилированных двоичных источников, ресурсов и некоторых папок, папка, обычно называемая заголовками, содержит все публичные заголовки. Генерировать символы отладки: НЕТ (это очень важный параметр, иначе инфраструктура не будет работать на других компьютерах/профилях). Заголовок предварительного префикса: NO.

создать атакующую цель и скопировать

# Sets the target folders and the final framework product.
FMK_NAME=FI
FMK_VERSION=A

# Install dir will be the final output to the framework.
# The following line create it in the root folder of the current project.
INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework

# Working dir will be deleted after the framework creation.
WRK_DIR=build
DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework
SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework

# Building both architectures.
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator

# Cleaning the oldest.
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi

# Creates and renews the final product folder.
mkdir -p "${INSTALL_DIR}"
mkdir -p "${INSTALL_DIR}/Versions"
mkdir -p "${INSTALL_DIR}/Versions/${FMK_VERSION}"
mkdir -p "${INSTALL_DIR}/Versions/${FMK_VERSION}/Resources"
mkdir -p "${INSTALL_DIR}/Versions/${FMK_VERSION}/Headers"

# Creates the internal links.
# It MUST uses relative path, otherwise will not work when the folder is copied/moved.
ln -s "${FMK_VERSION}" "${INSTALL_DIR}/Versions/Current"
ln -s "Versions/Current/Headers" "${INSTALL_DIR}/Headers"
ln -s "Versions/Current/Resources" "${INSTALL_DIR}/Resources"
ln -s "Versions/Current/${FMK_NAME}" "${INSTALL_DIR}/${FMK_NAME}"

# Copies the headers and resources files to the final product folder.
cp -R "${DEVICE_DIR}/Headers/" "${INSTALL_DIR}/Versions/${FMK_VERSION}/Headers/"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/Versions/${FMK_VERSION}/Resources/"

# Removes the binary and header from the resources folder.
rm -r "${INSTALL_DIR}/Versions/${FMK_VERSION}/Resources/Headers" "${INSTALL_DIR}/Versions/${FMK_VERSION}/Resources/${FMK_NAME}"

# Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.
lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}"

rm -r "${WRK_DIR}"

это в run script и запустить цель aggrigate, чтобы получить фреймворк