Сейчас заканчиваю свой первый проект под iOS. И неизвестно насколько я смогу потом воспользоваться свежим опытом.
Поэтому хочу набросать здесь небольшую заметку. Для себя, а может и еще кому-то будет интересно.
Надо было на базе существующего приложения сделать SDK. То есть выдрать UI и запаковать ядро во framework.
Но iOS и framework совместимы условно.
Официальная документация предлагает делать статическую библиотеку и не выпендриваться. А многочисленные мануалы из инета описывают свои варианты так называемых "статических" framework.
Вот про них и пойдет речь.
Идея всех мануалов в общем похожа. Единственное отличие - большая часть руководств предлагала отталкиваться от bundle, а другая от static library.
Bundle предлагается делать на основе одноименного project template. Оригинальный проект расчитан под Mac, а не iOS.
В нем исправляется часть настроек, чтобы проект компилировался под iOS. Потом добавляются файлы с исходниками и ресурсы.
Проект строится в двух вариантах для Device и Simulator, а потом "склеивается" lipo в единый framework. На первый взгляд замечательно. Но.
Во-первых, мой код использовал много сторонних библиотек. А bundle хранить весь этот зоопарк не может в принципе.
Во-вторых, с ресурсами не все так хорошо, как описывалось в мануалах. Если добавить ресурс в проект, он успешно скопируется в каталог ресурсов framework.
Но проект, который будет использовать наш framework этот ресурс не видит. (Конечно, можно вручную скопировать ресурс из framework и самостоятельно вставить его, но извращения не наш метод).
Насколько я поняла
отсюда дело в отсутствии private framework для iOS bundle. Т.е. под Mас метод будет работать, а под iOS нет.
Учитывая, что ресурсный файл у меня был 1, а библиотек около 30, я решила пойти вторым путем и сделать framework на базе static library.
В этом случае исходным проектом будет static library для iOS (т.е. не надо лезть с напильником в настройки).
В проект добавляются используемые библиотеки и исходники. Результат компилируется в 2х вариантах, точно так же склеивается lipo и оформляется в виде framrwork.
Получаем единственный iOS framework с прилагаемым ресурсным файлом.
Возражения и дополнения приветствуются :)