xcodebuild -exportArchive falla con un error La localización de los activos de firma ha fallado

Estoy usando la herramienta de línea de command xcodebuild para exportar files .ipa desde files Xcode. Estaba funcionando bien hasta Xcode 8.3.3. La misma configuration dejó de funcionar con Xcode 9 beta. Ahora falla con este error:

IDEDistribution: Step failed: <IDEDistributionSigningAssetsStep: 0x7fc309310550>: Error Domain=IDEDistributionSigningAssetStepErrorDomain Code=0 "Locating signing assets failed." 

Parece que Xcode 9 no puede ubicar los perfiles de aprovisionamiento, pero ¿por qué?

Estaba ejecutando este command:

 xcodebuild -exportArchive -archivePath archive.xcarchive -exportPath /my/export/path -exportOptionsPlist options.plist 

Mi proyecto usa la firma manual. Resulta que Xcode 9 necesita los nombres de perfil de aprovisionamiento o UUID especificados en options.plist para firmar el file .ipa exportado. Agregué esta input a mis opciones. Plist:

 <key>provisioningProfiles</key> <dict> <key>com.myapp.bundle.id</key> <string>My AdHoc Provisioning Profile Name</string> </dict> 

Y el error "Ubicación de los activos de firma falló" se había ido. Sin embargo, hubo otro error:

 IDEDistribution: Step failed: <IDEDistributionPackagingStep: 0x7f9dfd8e5930>: Error Domain=IDEFoundationErrorDomain Code=1 "ipatool failed with an exception: #<CmdSpec::NonZeroExcitException: CmdSpec::NonZeroExcitException> 

Xcode 9 recomstack la aplicación de bitcode de forma pnetworkingeterminada. Recibí este error desactivando BitCode agregando otra input a mis opciones. Plist:

 <key>compileBitcode</key> <false/> 

Ahora finalmente puedo build mi aplicación con Xcode 9 y exportar files ipa con xcodebuild sin errores.

En mi caso, el problema se resolvió con los siguientes campos en el -exportOptionsPlist -exportOptionsPlist:

 <dict> <key>compileBitcode</key> <false/> <key>method</key> <string>ad-hoc</string> <key>provisioningProfiles</key> <dict> <key>com.my.bundle.id</key> <string>AD_HOC_PROVISIONING_PROFILE_NAME</string> </dict> <key>signingCertificate</key> <string>CERTIFICATE_HASH</string> <key>signingStyle</key> <string>manual</string> <key>teamID</key> <string>TEAM_ID</string> </dict> 

Entonces, aparentemente tuve que establecer: compileBitcode , method , provisioningProfiles , signingCertificate , signingStyle y teamID .

En su caso, el set de campos puede ser diferente. He descubierto mi set archivando y exportando .ipa través de Xcode 9. XCode exportará su exportOptionsPlist con el ipa y mostrará qué campos usó.

Más información sobre el descubrimiento de campos: https://blog.bitrise.io/new-export-options-plist-in-xcode-9