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 является древней (получите ее с варить.) В ближайшее время я опубликую шаблон для такого проекта сборки библиотеки на той же учетной записи. (Буду редактировать или комментировать, если сделано здесь с соответствующими ссылками)

в основном это работает так:

  1. создайте скрипт сборки, который вызывает xcodebuild для каждой необходимой платформы target
  2. проект библиотеки Xcode должен содержать скрипт для удаления встроенных библиотек в каталог, который скрипт сборки может найти
  3. дополнительные заголовки должны быть скопированы "Копировать файлы" целевое действие
  4. скрипт сборки должен объединить все сборки библиотеки с lipo
  5. добавьте скрипт сборки в качестве цели "Run Script" в свою сборку, но имейте в виду, что вы не создаете бесконечный цикл (или просто вызываете его из терминала для создания сборки выпуска)
  6. в главном проекте добавьте подпроект библиотеки

затем вы можете распространять выходной каталог с скопированными файлами заголовков и 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 поможет вам справиться с этой зависимостью.