Подтвердить что ты не робот

После обновления до xcode 9 приложение кордовы не будет создано, ошибка 70 требует профиля подготовки

Вчера мы обновились от xcode 8.3.2 до версии 9. И теперь наша корпоративная дистрибуция apache cordova ios app отказывается строить.

2017-09-21 07:37:16.787 xcodebuild[70400:217569] [MT] IDEDistribution: -[IDEDistributionLogging _createLoggingBundleAtPath:]: Created bundle at path '/var/folders/wj/yj3cfvh954gbc_btlhcrcx7nk7t4dj/T/App Name_2017-09-21_07-37-16.786.xcdistributionlogs'.
2017-09-21 07:37:16.938 xcodebuild[70400:217569] [MT] IDEDistribution: Step failed: <IDEDistributionSigningAssetsStep: 0x7ff756bbdf70>: Error Domain=IDEDistributionSigningAssetStepErrorDomain Code=0 "Locating signing assets failed." UserInfo={NSLocalizedDescription=Locating signing assets failed., IDEDistributionSigningAssetStepUnderlyingErrors=(
    "Error Domain=IDEProvisioningErrorDomain Code=9 \"\"App Name.app\" requires a provisioning profile.\" UserInfo={NSLocalizedDescription=\"App Name.app\" requires a provisioning profile., NSLocalizedRecoverySuggestion=Add a profile to the \"provisioningProfiles\" dictionary in your Export Options property list.}"
)}
error: exportArchive: "App Name.app" requires a provisioning profile.

Error Domain=IDEProvisioningErrorDomain Code=9 ""App Name.app" requires a provisioning profile." UserInfo={NSLocalizedDescription="App Name.app" requires a provisioning profile., NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.}

** EXPORT FAILED **

Error: Error code 70 for command: xcodebuild with args: -exportArchive,-archivePath,App Name.xcarchive,-exportOptionsPlist,/Users/Shared/Workspace/github/AppName/platforms/ios/exportOptions.plist,-exportPath,/Users/Shared/Workspace/github/AppName/platforms/ios/build/device

(я заменил имя приложения на "Имя приложения" для этого вопроса)

Я проверил, что все профили сертификатов и профилей задаются в xcode. И установлен build.json. Я на самом деле не парень Mac, и я в тупике о том, что делать дальше.

-Edit, понижение xcode до 8.3.3 устранило проблему. Не идеальное решение, но мало того, что я могу сделать.

4b9b3361

Ответ 1

Если вы четко укажете свой профиль подготовки, как я. Как это в вашей Кордове build.json:

"ios": {
    "debug": {
        "codeSignIdentitiy": "iPhone Developer",
        "developmentTeam":"MYTEAMID",
        "packageType": "developer",
        "iCloudContainerEnvironment": "Development"
    },
    "release": {
        "codeSignIdentitiy": "iPhone Distribution",
        "developmentTeam":"MYTEAMID",
        "provisioningProfile": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
        "packageType": "ad-hoc",
        "iCloudContainerEnvironment": "Production"
    }
}

Обратите внимание iCloudContainerEnvironment = Производство/разработка требуется только при использовании push-уведомлений

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

Вот как это должно выглядеть, по крайней мере для меня:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>compileBitcode</key>
  <false/>
  <key>method</key>
  <string>ad-hoc</string>
  <key>iCloudContainerEnvironment</key >
  <string>Production</string>
  <key>provisioningProfiles</key>
  <dict>
    <key>my.bundle.idenifier</key>
    <string>My Provisioning Profile Name</string>
  </dict>
  <key>signingCertificate</key>
  <string>iPhone Distribution</string>
  <key>signingStyle</key>
  <string>manual</string>
  <key>stripSwiftSymbols</key>
  <true/>
  <key>teamID</key>
  <string>YOURTEAMID</string>
  <key>thinning</key>
  <string>&lt;none&gt;</string>
</dict>
</plist>

Файл Cordova генерирует @cordova/app/platform/ios/exportOptions.plist выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>compileBitcode</key>
    <false/>
    <key>method</key>
    <string>development</string>
    <key>teamID</key>
    <string>MYTEAMID</string>
  </dict>
</plist>

заметить, что отсутствуют важные биты, требуемые Xcode 9.

Я сгенерировал правильный файл, выполнив архивирование сборки вручную, а затем экспортировав его, который также создает exportOptions.plist, который я теперь использую в качестве ссылки.

После глубокого углубления я обнаружил, что это невозможно устранить после запуска "Cordova add platform iOS", потому что он генерируется во время фазы сборки динамически. Я решил разблокировать репо Cordova-ios и отправить запрос на тяну. Вы можете напрямую использовать мою вилку или подождать, пока запрос на растяжение не будет объединен.

Запрос Pull https://github.com/apache/cordova-ios/pull/338/commits

вилка https://github.com/jrryhrtn/cordova-ios

Замечания по использованию от запроса pull

См. пример ниже, обратите внимание, что профилем подготовки может быть имя или UUID профиля. Имя предпочтительнее для поддержания, поскольку UUID каждый раз меняет регенерацию профиля.

{
"ios": {
    "debug": {
        "codeSignIdentity": "iPhone Developer",
        "developmentTeam":"YOURTEAMID",
        "provisioningProfile": "provisioning profile name or UUID",
        "packageType": "development"
    },
    "release": {
        "codeSignIdentity": "iPhone Distribution",
        "developmentTeam":"YOURTEAMID",
        "provisioningProfile": "provisioning profile name or UUID",
        "packageType": "ad-hoc"
    }
}
}

Я планирую вручную запланировать до тех пор, пока исправление /a не будет объединено со следующей версией Cordova. Вам придется регенерировать свою платформу iOS после патча через "платформу Кордовы rm iOS", а затем "Платформа Кордова add ~/forks/cordova-ios". ~/forks/cordova-ios мой локальный путь, используйте путь на вашем локальном компьютере, где вы скачали раздвоенный репортер Cordova-ios.

Обновление

cordova-ios 4.5.2 официально выпущен! Обновите, выполнив следующие команды: "кордовая платформа rm ios", а затем "платформа кордовы add [email protected]"

Ура!

Ответ 2

Пока идет помощь, и вы не хотите напрямую использовать Xcode (и я не сужу вас)... вот временное решение, которое отлично срабатывало для меня:

удалить ios

cordova platform rm ios

добавить ios из dev brunch, где эта проблема уже исправлена ​​. (Позже вы сможете использовать ios v4.6.0 или какой-нибудь окончательный # будет)

cordova platform add https://github.com/apache/cordova-ios.git

Я надеюсь, что это тоже поможет! 🙂