Та же команда xcodebuild выполняется в конвейере Azure, и локальная машина заканчивается небольшим различием — и не может быть запущена

#xcode #azure-pipelines #xcodebuild

#xcode #azure-конвейеры #xcodebuild

Вопрос:

итак, создаем MainFramework.framework, который встраивает еще 4 фреймворка, так что структура MainFramework.framework выглядит следующим образом

  • MainFramework.framework
    • FrameworkA.framework (встроенный, связанный)
    • FrameworkB.framework (встроенный, связанный)
    • FrameworkC.framework (встроенный, связанный)
    • FrameworkD.framework (встроенный, связанный)
    • lib.a (связанный)

Теперь я запускаю ту же команду на своем локальном компьютере и в azure pipeline

xcodebuild clean build -scheme SDK -workspace SDK-App.xcworkspace -configuration Release -sdk iphoneos -derivedDataPath derived_data ARCHS=arm64 ONLY_ACTIVE_ARCH=NO CODE_SIGNING_ALLOWED=NO

Сборка завершается успешно в обеих средах, однако, если я начну сравнивать выходные данные из обеих, в каждом исполняемом файле всегда будет разница в размере 2 КБ,

Теперь, если я хочу использовать этот MainFramework.framework (который исходит из /derived_data/Build/Products/Release-iphoneos/MainFramework.framework обеих сред, работает только тот, который — неудивительно — из локальной сборки

Итак, я начал экспериментировать, я начал использовать фреймворк, который поставляется из Azure build — тот, который не может быть разрешен в целевом приложении — что целевое приложение не смогло его разрешить, и в итоге требуемый модуль «FrameworkA», «FrameworkB», … не найден

Теперь, если я скопирую / заменю только ОДИН файл — MainFramework.framework/ Modules/MainFramework.swiftmodule/arm64.swiftmodule — сделайте копию из локального MainFramework.framework в Azure MainFramework.framework — все работает. Модули разрешаются в целевом приложении, и я могу запустить пример приложения, использующего функциональность MainFramework.framework

Мой вопрос — что я делаю не так? Я потратил пару часов и не смог найти решение.

Обновление: добавлена суть https://gist.github.com/ivanpagac/d1aedb833629e6f4ab2ca249c167ce81

Комментарии:

1. Привет @Ivan, не могли бы вы установить для переменной system.debug значение true, а затем поделиться определением конвейера и подробным журналом здесь? Спасибо. Кроме того, вы копируете локальную форму MainFramework.framework в Azure MainFramework.framework, файл arm64.swiftmodule, верно?

2. Привет @VitoLiu-MSFT, спасибо за ответ. Я загружаю артефакт сборки Azure (фреймворк) и заменяю arm64.swiftmodule из локальной сборки. Прикрепите суть из azure. Но это выглядит так же, за исключением того, что я строю параллель на локальной машине, но в остальном выглядит хорошо.

3. Привет @lvan, похоже, что журнал, которым вы поделились, является журналом успеха, не могли бы вы проверить его еще раз?

4. Привет @VitoLiu-MSFT, суть взята из конвейера Azure, сборка выполнена успешно, как указано в вопросе. однако я не могу использовать артефакт, созданный в моем целевом приложении. Конвейер — это просто сборка и копирование / публикация xcode, не более и не менее. Проблема в том, что я не могу использовать артефакт из конвейера azure в TargetApp.

5. Привет @lvan, Извините за мое недопонимание, не могли бы вы подробнее описать сценарий? Вы не можете использовать артефакт из конвейера Azure в TargetApp, вы публикуете артефакт в конвейере сборки, а затем не можете использовать артефакт в конвейере выпуска Azure DevOps, верно? Если да, не могли бы вы поделиться журналом ошибок здесь?