Невозможно удаленно собрать проект xcode - PullRequest
0 голосов
/ 11 октября 2018

У меня есть сервер jenkins, подключающийся к удаленному Mac mini через ssh для выполнения сценария оболочки, который должен создать IPA из проекта Unity.

Когда сценарий оболочки выполняется локально на Mac Mini, всеидет нормально.Но когда сценарий оболочки запускается из jenkins (с тем же параметром и тем же пользователем), он не может кодировать подпись архива.

Я поделюсь с вами запутанным сценарием оболочки и журналом сборки.

Заранее благодарю за помощь.

Сценарий оболочки:

#!/bin/bash

# Consider directory paths initialized in parameter here
#
#
# Consider git cleaning / fetching commit here
#
#
# Consider environment / version and build name controls here
#
#
# Start Unity Build :

/Applications/Unity2017.4.10f1/Unity.app/Contents/MacOS/Unity -batchmode -quit -projectPath "$SOURCE_PATH" -executeMethod "BuildManager.BuildPlayer" -logFile "$BUILD_LOG_FILE" -buildEnvironment "$ENVIRONMENT" -buildPlatform "IOS" -buildPath "$TARGET_BUILD_DIR" -overrideVersion "$OVERRIDE_VERSION"

if [ ! -d "${TARGET_BUILD_DIR}/Unity-iPhone.xcodeproj" ]
then
    echo "[ERR]Exporting unity project to Xcode failed."
    exit 1
else
    echo "Build successfull"
fi
#
#
# Consider initializing a param for the provisioning profile file path
#
#
# Consider initializing a param for the plist file path

cd $TARGET_BUILD_DIR

# archive generated xcode project    
xcodebuild -scheme "Unity-iPhone" -archivePath "${DEPLOY_DIR_ROOT}/${BUILD_NAME}_${FILE_FORMAT_VERSION}/archive.xcarchive" -sdk iphoneos -configuration Release PROVISIONING_PROFILE="${PROVISIONING_PROFILE_PATH}" archive

if [ $? != 0 ]; then
    echo "FAILED ARCHIVING XCODE PROJECT"
    exit 1
fi

# export ipa from archive
xcodebuild -exportArchive -archivePath "${DEPLOY_DIR_ROOT}/${BUILD_NAME}_${FILE_FORMAT_VERSION}/archive.xcarchive" -exportOptionsPlist "${PLIST_PATH}" -exportPath "${DEPLOY_DIR_ROOT}/${BUILD_NAME}_${FILE_FORMAT_VERSION}"

if [ $? != 0 ]; then
    echo "FAILED EXPORTING IPA FROM ARCHIVE"
    exit 1
fi
#
# Section reserved for uploading the ipa to relevant remote storage
#
exit 0

Так что все работает как чудо (даже сборка может быть установлена ​​на устройстве), когдаСкрипт оболочки запускается локально из терминала на Mac mini.

Когда он запускает скрипт оболочки удаленно через ssh, он не может кодировать архив.Пользователь, используемый через ssh, тот же, что и пользователь, используемый локально для запуска сценария.

Вот ошибка:

CodeSign / ####### / Library /Разработчик / Xcode / DerivedData / Unity-iPhone - ######### / Build / Intermediates.noindex / ArchiveIntermediates / Unity-iPhone / InstallationBuildProductsLocation / Applications / #########. App (в целевом приложении): Unity-iPhone) cd / ######### / xcodeProjPath export CODESIGN_ALLOCATE = / Applications / Xcode.app / Содержание / Разработчик / Наборы инструментов / XcodeDefault.xctoolchain / usr / bin / codesign_allocate

ПодписаниеИдентификационные данные: "#########" Профиль обеспечения: "Профиль обеспечения группы iOS: #########" (#########)

/usr / bin / codesign --force --sign ######### --entitlements / ######### / Библиотека / Разработчик / Xcode / DerivedData / Unity-iPhone - ######### / Build / Intermediates.noindex / ArchiveIntermediates / Unity-iPhone / IntermediateBuildFilesPath / Unity-iPhone.build / Release-iphoneos / Unity-iPhone.build / #########. App.xcent --timestamp = нет / ######### / Библиотека / Разработчик / Xcode / DerivedData / Unity-iPhone - ######### / Build / Intermediates.noindex / ArchiveIntermediates / Unity-iPhone / InstallationBuildProductsLocation / Applications / #########. app / ######### / Library / Developer / Xcode / DerivedData / Unity-iPhone - ######### / сборки / Intermediates.noindex / ArchiveIntermediates / Unity-iPhone / InstallationBuildProductsLocation / Применения / ######### .app: errSecInternalComponent

Сбой команды CodeSign с ненулевым кодом выхода

** СБОЙ АРХИВА **

Я застрял сейчас, так как все моипопытки не сработали совсем ... Заранее спасибо за помощь.

РЕДАКТИРОВАТЬ:

mac mini на macOS High Sierra Версия 10.13.6 (17G65)

Xcode Version 10.0 (10A255)

1 Ответ

0 голосов
/ 11 октября 2018

Хорошо, так что для всех вас, ребята, борющихся за эту хитрую тему (совершенно невидимую, если мы не знаем достаточно о macOS), существует своего рода система безопасности, которая все еще делает разницу между локальным пользователем и удаленным доступом к пользователю..

Таким образом, цепочка для ключей, обрабатывающая ваши ключи и сертификаты (используемая кодовым знаком для подписи вашей сборки), не может использоваться удаленно для удаленного пользователя.Сначала его нужно разблокировать !!!

Чтобы узнать о доступных цепочках ключей в вашей системе, просто наберите на своем терминале:

список безопасности цепочек ключей

Вы должны увидеть что-то вроде:

"/Users/'YOURUSER'/Library/Keychains/login.keychain-db"
"/Library/Keychains/System.keychain"

И вы уже догадались, вам нужно разблокировать брелок вашего пользователя!Juste запустите это:

ключ разблокировки безопасности -p 'USER_PASSWORD' 'PATH_TO_USER_KEYCHAIN'

И все.

NB: Пожалуйста, дайте мне знатьесли я понял что-то не так во всем этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...