Xcode 8 / xcodebuild: как запустить «подписание обновлений» из командной строки?

#xcode #xcodebuild

#xcode #xcodebuild

Вопрос:

Справочная информация: в Xcode 8 появились новые возможности для «автоматического обновления подписи». При отсутствии профилей подготовки на сборном mac Xcode автоматически извлекает необходимые профили с портала разработчиков Apple. rm -rf ~/Library/MobileDevice/Provisioning Profiles Затем можно открыть проект Xcode, и Xcode автоматически извлечет профили, в Xcode появится «Подписание обновлений»:

сообщение о подписании обновления xcode

Как запустить это «подписание обновлений» из командной строки? На странице руководства для xcodebuild об этом не упоминается. Простой запуск «xcodebuild» не запускает этот шаг.

Ответ №1:

Нет способа сделать это с помощью xcodebuild .

Тем не менее, у меня есть обходной путь, который, похоже, выполняет задачу за меня. Я использую AppleScript, чтобы открыть рабочую область в Xcode, подождать соответствующее количество времени (скажем, 10 секунд), а затем выйти из Xcode. Обновление подписи выполняется при открытии рабочей области, а не при попытке сборки, поэтому этого достаточно, чтобы устранить любые проблемы с подписью.

Используемый мной AppleScript выглядит следующим образом (на основе некоторого кода, который я нашел в Интернете):

 tell application "/Applications/Xcode.app"

    open "/Users/gary/MyWorkspace.xcworkspace"
    set workspaceDocument to workspace document "MyWorkspace.xcworkspace"
    -- Wait for the workspace document to load with a 60 second timeout
    repeat 120 times
        if loaded of workspaceDocument is true then
            exit repeat
        end if
        delay 0.5
    end repeat
    if loaded of workspaceDocument is false then
        error "Xcode workspace did not finish loading within timeout."
    end if

    -- Xcode will only update the signing for targets in the active scheme,
    -- so make sure the required scheme is the active one
    set schemeToUse to scheme "SchemeToUse" of workspaceDocument
    set active scheme of workspaceDocument to schemeToUse

    -- The time taken to update signing issues is related to the number of targets.
    -- The number of targets built by a scheme is not exposed through AppleScript,
    -- so count the total number of targets in the workspace 
    set totalTargets to 0
    repeat with theProject in projects in workspaceDocument
        set totalTargets to totalTargets   (count of targets of theProject)
    end repeat

    -- For each target, wait a short amount of time
    repeat totalTargets times
        delay 3.0
    end repeat

    quit

end tell
  

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

Существует много способов запуска AppleScript из командной строки, включая osascript команду, но я делал это из Python.