Как я могу пропустить подписание кода для сборок разработки в Xcode?

Всякий раз, когда я создаю свой проект Xcode, после компиляции всего моего кода требуется вечность, чтобы завершить "подписание продукта". (Я полагаю, это связано с тем, что проект включает около 200 МБ ресурсов, требующих подписи.) Я хотел бы пропустить подписывание кода во время разработки, чтобы сборка могла завершиться быстрее. Как я могу это сделать?


person tbodt    schedule 25.06.2015    source источник
comment
в настройках сборки выберите не знак кода. Поможет ли это?   -  person Wingzero    schedule 25.06.2015
comment
Почему-то не помогает. Это было проблемой до того, как у меня появился действующий сертификат подписи кода.   -  person tbodt    schedule 25.06.2015
comment
Это для iOS или Mac?   -  person Joshua Nozzi    schedule 12.08.2015
comment
Можете ли вы проверить этот stackoverflow.com/q/26822962/767329   -  person Mihriban Minaz    schedule 12.08.2015
comment
@JoshuaNozzi Mac, но это не имеет значения   -  person tbodt    schedule 12.08.2015
comment
Это важно, потому что, как указывали другие, для запуска кода на вашем устройстве iOS требуется подпись кода. На Mac вы можете запускать неподписанный код (и на самом деле я делаю это для государственного работодателя).   -  person Joshua Nozzi    schedule 12.08.2015


Ответы (5)


Чтобы отключить подпись кода, перейдите в свой проект и выберите «Настройки сборки», найдите «Идентификатор подписи кода», измените его значение на «Не подписывать код» в обоих из них.

Чтобы сделать это эффективным, вам нужно изменить это значение в Проекте и во всех Целях по отдельности.

person Abcd Efg    schedule 13.08.2015
comment
Хм... Я не знаю, пробовал ли я изменить его во всех целях и проекте. - person tbodt; 13.08.2015
comment
Я пробовал разные методы, но это был единственный способ заставить его пропустить подпись кода. Я надеюсь, что это помогает. - person Abcd Efg; 13.08.2015
comment
Работал отлично! Спасибо. - person tbodt; 14.08.2015
comment
Я не могу говорить о более старых версиях XCode, но в 9.2+ в разделе «Настройки сборки» вы должны проверить вкладку «Все», чтобы увидеть параметр «Идентификация подписи кода». - person lukecampbell; 25.03.2018
comment
Это решение устарело. Нет опции «Не подписывать код», и есть только один идентификатор подписи кода (ответ предлагает два, когда он говорит оба). Я использую Xcode 10. - person Jason; 25.11.2018
comment
Xcode 10 теперь предлагает только Sign to Run Locally (Ad Hoc Code Sign), что высосало последнюю часть удовольствия (быстрые сборки) из программирования Mac. - person Rhythmic Fistman; 17.12.2018
comment
В Xcode 10 вы можете выбрать «Другое…» и установить пустой текст, чтобы отключить подпись кода. См. этот ответ. - person rob mayoff; 21.01.2019
comment
Ответ от @robmayoff намного понятнее, а также работает для современных (на момент написания этой статьи...) Xcodes (11.3). Так что это должен быть принятый ответ в наши дни. - person thoni56; 12.12.2019

Начиная с Xcode 10, вот как отключить подписывание кода для приложения macOS:

  1. Выберите свой проект в навигаторе проектов.
  2. Выберите свое приложение в списке целей.
  3. Нажмите «Настройки сборки».
  4. Нажмите «Все».
  5. Нажмите «Уровни».
  6. Введите «личность» в поле поиска.

первые шесть шагов

  1. Нажмите на строку Code Signing Identity под столбцом для вашего целевого приложения (в моем примере оно помечено как «test»). Эта ячейка таблицы может оказаться пустой.

куда нажать для шага 7

  1. В появившемся всплывающем меню выберите «Другое…».

всплывающее меню

  1. В появившемся всплывающем текстовом поле удалите весь текст, чтобы поле стало пустым.

пустое всплывающее окно

  1. Нажмите клавишу возврата, чтобы закрыть всплывающее окно.

С этим параметром Xcode не будет подписывать цель вашего приложения.

person rob mayoff    schedule 21.01.2019
comment
Кажется, это не работает для создания моего приложения для iOS. Есть ли что-то особенное в сборке macOS, что делает эту работу по сравнению с iOS? - person Jeremy Kelleher; 24.01.2019
comment
iOS разрешает только подписанные приложения. macOS поддерживает как подписанные, так и неподписанные приложения. Обратите внимание, что вопрос помечен тегом macos. - person rob mayoff; 24.01.2019
comment
Следуя приведенным выше инструкциям, мне пришлось закрыть и снова открыть проект для успешной сборки XCode. - person Tony Rietwyk; 09.12.2019
comment
Это лучшее!!! Люблю картинки со стрелочками - спасибо! - person Ultrasaurus; 28.01.2020
comment
это похоже на волшебство, теперь я могу создать свое приложение без ошибок при настройке профиля - person aditsud; 18.04.2020
comment
В чем именно разница уровней по сравнению с комбинированными? - person Honey; 30.05.2020
comment
«Уровни» показывают по одному столбцу для каждого возможного источника значения параметра в дополнение к столбцу для действующего значения. «Комбинированный» показывает только колонку эффективных значений. Я сказал нажать «Уровни», потому что это сделает ваш экран похожим на мои снимки экрана. - person rob mayoff; 30.05.2020
comment
Я получаю сообщение об ошибке An empty identity is not valid when signing a binary for the product type 'Application', какие-либо обновления? - person Top-Master; 10.10.2020

Если кто-то использует CMake (для многоплатформенных проектов) для отключения подписи кода для конкретной цели, я использовал это:

    set_target_properties(MyAppTarget PROPERTIES
        XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
        OUTPUT_NAME "My nice application name"
        MACOSX_BUNDLE TRUE
        MACOSX_BUNDLE_BUNDLE_NAME "My nice application name"
        MACOSX_BUNDLE_INFO_PLIST path/to/Info.plist
        MACOSX_BUNDLE_BUNDLE_VERSION ${MY_APP_VERSION}
        MACOSX_BUNDLE_LONG_VERSION_STRING "My nice application name v${MY_APP_VERSION}"
        MACOSX_BUNDLE_SHORT_VERSION_STRING "${MY_APP_VERSION}"
        MACOSX_BUNDLE_GUI_IDENTIFIER "com.my.app"
        MACOSX_BUNDLE_COPYRIGHT "(C) 2019 My Company"
        MACOSX_RPATH TRUE
        MACOSX_FRAMEWORK_IDENTIFIER com.myapp.bundle.id
        XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@loader_path/Libraries"
        RESOURCE "${RESOURCE_FILES}"
        XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME TRUE
        XCODE_ATTRIBUTE_EXECUTABLE_NAME "exec_name"
    )
person Marek R    schedule 18.10.2019
comment
Спасибо! Насколько я понимаю, единственная обязательная вещь здесь для отключения подписи здесь - это присвоение пустой строки XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY - person Andrii Zymohliad; 13.12.2019
comment
Я все еще вижу команду /usr/bin/codesign --force --sign - --timestamp=none <ProjectName> в правилах пост-сборки CMake. Есть идеи? - person Royi; 05.06.2020
comment
@Royi также добавьте XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "NO" - person kerrytazi; 07.04.2021

Вы можете попробовать переместить свои ресурсы в отдельную цель пакета, а затем добавить продукт .bundle этой цели в фазу сборки вашего приложения «копировать ресурсы пакета» — в идеале сборка приложения должна иметь возможность использовать подпись пакета (для чего потребуется только для повторного создания при изменении содержимого пакета) вместо того, чтобы повторно подписывать ресурсы по отдельности.

person Noah Witherspoon    schedule 12.08.2015
comment
Означает ли это, что в моей папке ресурсов будет .bundle, внутри которого будут все мои вещи? - person tbodt; 13.08.2015
comment
Что ж, простое создание папки с расширением .bundle не приведет к тому, что она будет подписана. Вам нужно создать фактическую цель пакета вместе с целью вашего приложения. Выберите свой проект на левой панели, затем нажмите кнопку + в нижней части списка «ПРОЕКТ» / «ЦЕЛИ»; Целевой тип Bundle находится в разделе «Framework & Library» результирующего окна. Оттуда выберите вкладку «Фазы сборки» целевого объекта пакета, добавьте все свои ресурсы в раздел «Копировать ресурсы пакета», а затем удалите их все из целевого приложения. - person Noah Witherspoon; 13.08.2015
comment
Я должен буду попробовать это. - person tbodt; 13.08.2015

Сборки FWIW для iOS, которые вы встраиваете в свой симулятор, не требуют подписи кода. Следовательно, не нужно пропускать его.

Вам нужно только подписание кода/профиль подготовки на физических устройствах. Я не знаю, как их можно пропустить.

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

person Honey    schedule 10.01.2021