Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: ecspertiza от Февраль 14, 2014, 12:38



Название: Публикация приложения в Apple Store [РЕШЕНО]
Отправлено: ecspertiza от Февраль 14, 2014, 12:38
Добрый день. Прошу отписаться тех кто сталкивался с подобной задачей. Удалось дойти до последнего шага публикации приложения (отправка), после отправки приложения приходит ошибка в которой говорится о том, что софт нужно подписать Apple sandbox. Ну раз просят значит сделать нужно, но тут возникают следующие проблемы:

После сборки приложения зависимости (Qt) подтягиваются из папки /usr/local/..... ..... , понятное дело что у пользователй этой папки не будет и библиотеки нужно положить рядом с приложением + для самого приложения указать откуда подгружать библиотеки ( install_name_tool ) Так вот теперь в чем заключается проблема, сразу после сборки, приложение подписывает Apple sandbox и если после этого проделать какие либо махинации в том числе и install_name_tool то приложение перестанет запускаться с ошибкой

Killed:9

Возникает вопрос, как указать верный адресс для библиотек да еще и подписать приложение ?
кому удалось побороть ?

P.S.

ссылка на пост где описано решение публикации (http://zalip.org/post/382/)


Название: Re: Публикация приложения в Apple Store
Отправлено: kambala от Февраль 14, 2014, 12:49
macdeployqt же вроде разруливает библиотечные зависимости. а подписать можно ручками (пишу по памяти): /usr/bin/codesign ляляля

для примера, ад-хок сборки для иос приложения (на выходе .ipa) через командную строку делаются так, вдруг пригодится:
Код
Bash
# Create .ipa
xcrun -sdk "${TARGET_SDK}" PackageApplication -v "${APP_PATH_ABSOLUTE}" -o "${IPA_PATH_ABSOLUTE}" --sign "${DEVELOPER_NAME}" --embed "${PROVISIONING_PROFILE}"


Название: Re: Публикация приложения в Apple Store
Отправлено: ecspertiza от Февраль 14, 2014, 13:26
macdeployqt - разруливает, но он по сути просто копирует файлы и выполняет тот же install_name_tool .

codesign - подписывает просто сертификатом разработчика, а sandbox насколько понял выставляет правила, что делает софт, куда ломится (Интернет, файлы и т.д.)


Название: Re: Публикация приложения в Apple Store
Отправлено: ecspertiza от Февраль 17, 2014, 13:05
Каждый раз как пишу на этот форум ответ находится сам собой, видимо карма :) Удалось опубликовать приложение, полный ход публикации для Qt приложенек описал тут (http://zalip.org/post/382/) . Жалобы, пожелания и вопросы приветствуются :)


Название: Re: Публикация приложения в Apple Store
Отправлено: kambala от Февраль 17, 2014, 14:55
Каждый раз как пишу на этот форум ответ находится сам собой, видимо карма :)
так уж мозг устроен: решение находится быстрее если проблему начать обсуждать :)

предлагаю засунуть ссылку на статью в первый пост и дописать в название темы [РЕШЕНО]. также можно добавить скрипт, чтобы действия не приходилось выполнять руками.

P.S. «это делается тремя командами в консолеи»


Название: Re: Публикация приложения в Apple Store [РЕШЕНО]
Отправлено: ecspertiza от Февраль 17, 2014, 15:00
спасибо за отзыв, правки сделал, скрипт постараюсь написать.


Название: Re: Публикация приложения в Apple Store [РЕШЕНО]
Отправлено: Igors от Февраль 17, 2014, 15:34
...и библиотеки нужно положить рядом с приложением + для самого приложения указать откуда подгружать библиотеки ( install_name_tool )
Я все оттягиваю разбирательство с этим (пока линкую статычно).

Позиция 1: просто "положить рядом с exe-шником" не катит в OSX. Хоть внутри бандла - хоть снаружи. Нужно каким-то образом записать путь в само приложение (как и сказал ТС)

Позиция 2: посмотрев неск солидных Qt приложений на OSX вижу что все они используют одну технику: линкуют динамически, но все dylib (дин либы) помещают внутрь бандла. Ясно это лучше всего: для пользователя приложение - одна бубочка, install = скопировал ее и все. Ничего ставить не надо, а хоть и поставил, приложение все равно юзает свои. Но как добиться чтобы оно так "собиралось" (какое мерзкое слово :'() в Xcode - хз. Нашел инструкцию/указания, делал по ней - не выходит. Провозился пару дней и плюнул.

ecspertiza, Ваша инструкция может и хороша (не мне судить), но что мне делать в Xcode? Куда тулить @executable_path (или еще кого) чтобы dylib'ы ложились в bandle?

Спасибо


Название: Re: Публикация приложения в Apple Store [РЕШЕНО]
Отправлено: kambala от Февраль 17, 2014, 16:14
можно почитать исходники macdeployqt и посмотреть как он прописывает @executable_path :)


Название: Re: Публикация приложения в Apple Store [РЕШЕНО]
Отправлено: ecspertiza от Февраль 17, 2014, 16:43
Во первых, да, можно просто почитать исходники macdeployqt. Но насколько я понял для себя, он просто копирует библиотеки куда нужно, а затем как раз для каждой скопированной библиотеки выполняет install_name_tool так же выполняет его и для бинарника.

Теперь, допустим вы хотите что бы у вас приложение сразу собиралось со всеми библиотеками, у вас есть два пути:

1. Для Apple store, тут скорее всего без костылей не выйдет и придется писать свои какие то мудреные скрипты.
2. В Xcode для каждого этапа есть возможность задать выполнение скриптов, "Edit scheme", там можно выбрать этап "Build" и создать пост скрипт, который в свою очередь может просто вызвать macdeployqt или же любые команды которые вам захочется.

Например для того, что бы собрать бандл сразу с библиотеками можно в пост скрипт для сборки дописать вот такую команду(пример для моей сборки)

Код:
macdeployqt ${PROJECT_DIR}/bin/myapp.app



Я сейчас пробую написать скрипт для автоматического копирования библиотек и подписи приложения, как закончу, поделюсь шедевром  :)