Xcode с iOS-создание библиотеки таким образом, чтобы ее было легко запускать в режиме отладки, распространять, повторять
Это для Xcode 4.5.х armv7s архитектуры ARMv7 и iOS с SIM-картой и specifcially о проекте Xcode установки / проект установки сборки:
У меня есть проект "A", который является приложением в app store. У меня есть проект "B", который является библиотекой, которая будет использоваться в A как зависимость, но также распространяется как сторонняя библиотека другим компаниям для использования в своих приложениях. (сторонние приложения других компаний представлены в этом случае как "Y").
здесь требования:
- должен иметь возможность запускать " A "в режиме отладки и, конечно, отлаживать вложенный проект" B " одновременно, в той же сборке/сеансе.
- из "A "я могу CMD+нажать на подпись метода из" B " и перейти прямо в этот файл src, где я могу редактировать, а затем перекомпилировать, как если бы это было из того же проекта.
- разработчик "X" в какой-то другой компании должен иметь возможность легко перетащить нашу библиотеку "B" в свой проект "Y", где" B " - статическая библиотека с доступны только необходимые файлы заголовков. "Y", конечно, вызывает методы из подмножества фактических заголовочных файлов "B". Только файлы из этого подмножества должны быть включены в дистрибутив для Dev "X".
- Dev " X "не должен ничего изменять в своем проекте Xcode, просто перетащите папку" B "(которая содержит статический lib и подмножество заголовочных файлов) в свой проект и нажмите"Копировать ресурсы, создавать ссылки и т. д.".
- мне нужно иметь возможность генерировать статические сборка библиотеки "B "легко, на основе тех же файлов, которые я редактировал все это время, когда я повторяю и отлаживаю этот проект" B "внутри его зависимого проекта"A".
- "B" не имеет никаких ресурсов, кроме исходного кода-нет никаких активов изображений, xibs или чего-либо подобного.
- из "B", я нажимаю "архив" и пуф! существует статический lib (должен быть fat binary, под этим я подразумеваю, что он работает на симулятор + armv7 + armv7s, пожалуйста!!) основным заголовка файлы готовы к распространению.
- все это должно быть App store утверждение-фрэндли
- также это должно быть надежным. Это нехорошо, если я должен продолжать возвращаться, чтобы сделать много изменений конфигурации каждый раз, когда я добавляю один файл.
обновление:
* САМОЕ ГЛАВНОЕ: это должно быть РЕПО, которое я могу проверить, это полный сквозной шаблон того, что я ищу, и мне нужно быть возможность открыть Xcode 4.5.2+ и нажмите play и посмотреть эту вещь, без боли.
500 очков любому, кто может предоставить мне проект шаблона, который демонстрирует все, что я описал выше, "A", "B" и "Y" (со статическим lib "B", используемым в качестве dep). Все, что мне нужно, это набор скелетных проектов ("A", "B" (вложенных внутри "A") и "Y"), который показывает, как это можно сделать. Пожалуйста, не сдерживайте ответ, пока не будет объявлена награда. Если он встречает мой требования, я прослежу, чтобы вы получили мои баллы.
Я несколько обеспокоен тем, что с ограничениями Xcode это даже невозможно таким образом, что это не является полной проблемой. Пожалуйста, докажи, что я ошибаюсь.
UPDATE: я решил, что меня больше не волнует armv6. Прощай, ARMv6 нет.
дополнительный кредит, если вы можете получить armv6 в выход dist вместе с armv7, armv7s, i386 / simulator.
P. S. Я обещаю, что я буду разумной награждения точка. Я не собираюсь скрывать их из-за формальностей. Если вы сделаете свою жизнь значительно менее болезненным в этой области, я с удовольствием начислим вам баллы.
3 ответов
Это будет невозможно только в Xcode. Вам понадобятся некоторые скрипты сборки (которые вы можете вызвать из Xcode, конечно) из-за целевого переключателя компиляции (симулятор, устройство и т. д.).
Я думаю, вам придется добавить дополнительные заголовки дистрибутива к шагу сборки "копировать файлы", по крайней мере. Но другие модификации не должны быть необходимы, если вы что-то меняете.
Я сделал что-то подобное для libturbojpeg см. https://github.com/dunkelstern/libturbojpeg-ios Для справки. В настоящее время он помещает жирную библиотеку в "lib", если вы называете "build.sh" файл из терминала, но пропускает заголовки дистрибутива. В случае libturbojpeg мне понадобилось 2 файла проекта, потому что каждая цель компилирует в библиотеку другое подмножество файлов ассемблера (лучше не смотреть на материал makefile ассемблера). Для компиляции вам понадобится последняя версия NASM, поскольку версия apple ships является древней (получите ее с варить.) В ближайшее время я опубликую шаблон для такого проекта сборки библиотеки на той же учетной записи. (Буду редактировать или комментировать, если сделано здесь с соответствующими ссылками)
в основном это работает так:
- создайте скрипт сборки, который вызывает
xcodebuild
для каждой необходимой платформы target - проект библиотеки Xcode должен содержать скрипт для удаления встроенных библиотек в каталог, который скрипт сборки может найти
- дополнительные заголовки должны быть скопированы "Копировать файлы" целевое действие
- скрипт сборки должен объединить все сборки библиотеки с
lipo
- добавьте скрипт сборки в качестве цели "Run Script" в свою сборку, но имейте в виду, что вы не создаете бесконечный цикл (или просто вызываете его из терминала для создания сборки выпуска)
- в главном проекте добавьте подпроект библиотеки
затем вы можете распространять выходной каталог с скопированными файлами заголовков и lipo
объединенная универсальная библиотека и обычно используйте библиотеку как подпроект в своей рабочей области, как обычно (она строит и связывает только необходимые библиотеки, а не универсальную lib, но это не должно быть проблемой)
это фактически не решает проблему создания файлов DSYM для библиотеки. Но обычно символы отладки должны находиться в самой библиотеке при построении отладочной сборки. Он удалит символы отладки на выпуск и DSYM потом.
ссылка на пример проект:https://github.com/dunkelstern/StaticLibraryTemplate
я использую https://github.com/jverkoey/iOS-Framework достигнуть что-то довольно подобное к вашим потребностям. Отдай ему должное, я просто подытожу, как я это делаю.
создайте статическую библиотеку, как обычно, плюс эти настройки:
- добавьте фазу копировать файлы, чтобы скопировать заголовки. Я не использую правильную фазу "копировать заголовки", потому что я где-то читал, что это не рекомендуется для статических библиотек iOS.
- Назначение: Продукты Каталог
- Subpath:
${PROJECT_NAME}/Headers
- изменить несколько параметров:
- "мертвый код зачистки" = > " нет " (для всех параметров)
- "Strip Debug Symbols During Copy" = > нет (для всех настроек)
- "стиль полосы" = > Неглобальные символы (для всех настроек)
- добавить сценарий запуска для подготовки фреймворка с библиотекой:
- использовать скрипт
prepare_framework.sh
.
- использовать скрипт
вы можете использовать проект статической библиотеки в своем приложении: перетащите его в свой проект приложения, добавьте .a
библиотека как зависимость и связь с ней. Вы можете отлаживать библиотеку вместе с приложением,входить в методы, переходить к определениям символов и т. д.
подготовленный фреймворк будет использоваться для распространения двоичной версии:
в том же проекте статической библиотеки добавьте агрегатную цель:
- добавить статическая библиотека как зависимость.
- добавьте этап запуска скрипта для построения отсутствующих архитектур. Используйте скрипт
build_framework.sh
.
скрипт угадайте, что такое другое платформа и использование xcodebuild
скомпилировать его. Тогда используйте lipo
чтобы создать двоичный файл fat со всеми архитектурами. Местом назначения статической библиотеки fat будет дерево фреймворка, которое мы создали ранее. Окончательная платформа копируется в папку products в сборке папка.
при таком подходе вы можете:
- сборка и отладка приложения со статической библиотекой в качестве вложенного проекта.
- построить распространяемых версия библиотеки в шаг с заголовками, встроенными в пакет, подобный фреймворку. Встроенная платформа находится в каталоге продуктов проекта.
- используйте функцию архива Xcode. По какой-то причине окончательные файлы не копируются в расположение архива. Вы можете использовать его для создания разделенной версии фреймворка.
Не стесняйтесь клонировать проект, используя этот метод для упаковки библиотеки:вилка JSON-framework. Я немного изменил скрипты, Проверьте мою вилку iOS-framework.
о armv6
, Я думаю, вам нужно и старый iOS SDK 4.3 и добавить вручную литерал armv6
в список допустимых архитектур и фактических архитектур. Я не есть и старый SDK, чтобы проверить его прямо сейчас.
Cocoapods покрывает ваши потребности. Хотя стандартный способ его использования-представить спецификации pod в центральное РЕПО git. Он поддерживает добавление альтернативных репозиториев для распространения или их ручное создание, см. здесь. Преимущества использования cocoapods заключаются в том, что он отвечает всем вашим требованиям и становится очень стандартным способом распространения библиотек (например, используется такими компаниями, как facebook и stackmob) и открытым исходным кодом (например, afnetworking). Итак, если вы в зависимости от сторонних библиотек сейчас или в будущем, скорее всего, cocoapods поможет вам справиться с этой зависимостью.