Проблема подписи кода для проекта с несколькими целевыми объектами
Я пытаюсь получить мое приложение, которое не отображается в Dock, чтобы иметь возможность запускать при входе в систему. Это сложно, и включает в себя создание второго вспомогательного приложения, которое вы добавляете в качестве элемента запуска. Это вспомогательное приложение отвечает только за запуск основного приложения, а затем выход из него.
Я выполнил инструкции здесь и здесь и это работает как шарм - проблема, конечно, в подписи кода. У меня две цели; цель вспомогательного приложения копируется в подкаталог Contents/Library/LoginItems
основного пакета во время компиляции. Каждый пакет имеет свой собственный идентификатор пакета и собственный профиль обеспечения развертывания, но когда я проверяю свой архив для хранилища приложений, я получаю следующую ошибку:
Invalid provisioning profile. The provisioning profile included in the bundle BUNDLE NAME [BUNDLE NAME.app] is invalid. For more information, visit the Mac OS Developer Portal.
Если я удалю хелперный пакет из моей основной цели, проблем нет. Похоже, что наличие другого профиля обеспечения задает ошибку.
Как я могу включить два подписанных пакета и передать проверку?
Ответы
Ответ 1
Наконец-то я смог решить эту проблему, используя codesign
на компьютере колледжа (должно быть, что-то не так с моей Keychain) и удалив файл embedded.provisionprofile
из вспомогательного приложения, добавив следующий запуск script
if [ -f "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/Contents/embedded.provisionprofile" ];
then
rm "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/Contents/embedded.provisionprofile"
echo "Removed embedded provisioning profile."
else
echo "No profile found"
fi
Ответ 2
Вы должны использовать тот же сертификат производства Mac App Store, чтобы подписывать как вспомогательное приложение, так и основное приложение. Я не пробовал это в Xcode - у нас есть вспомогательное приложение, которое связано с ресурсом пакета, но наша подпись кода - это командная строка script. У нас не было проблем с системой хранения приложений.
Я не уверен, почему у вас заканчивается профиль подготовки в встроенном продукте, и я не думаю, что это требуется для представления магазина приложений. Вы можете использовать codesign
вручную:
codesign -f -s "3rd Party Mac Developer Application: My Company" \
-i "com.mycompany.loginitem" \
--entitlements path/to/loginitem.entitlements" \
path/to/appname.app/Contents/Library/LoginItems/loginitem.app
codesign -f -s "3rd Party Mac Developer Application: My Company" \
-i "com.mycompany.appname" \
--entitlements path/to/app.entitlements" \
path/to/appname.app
Ответ 3
У меня была та же проблема. Вместо удаления embedded.provisionprofile из вспомогательного приложения я просто отключил выделение (профиль Provision: None), оставив идентификацию и права на подписание кода. Представлено мое приложение для просмотра без каких-либо проблем.