Après 4 mois de développement de ma première application iOS, il est temps de la soumettre au App Store
. J'ai créé l'application dans iTunes Connect
, rempli tous les détails, mis en place le Bundle ID
correct dans Connect
et Xcode
. Cependant, je me suis battu ces 3 derniers jours pour tenter de résoudre ce problème étrange. Il semble que xcode essaie de télécharger des frameworks Cocoapods
, pas mon application principale.
Après l'archivage, je suis allé à Window > Organizer > Validate...
. Je vois l'écran suivant:
L'erreur:
(Pour les utilisateurs: aucun enregistrement d'application approprié n'a été trouvé. Vérifiez que l'identifiant de l'ensemble "org.cocoapods.Alamofire
" est correct).
Le message d'erreur indique qu'il tente de faire correspondre un Bundle ID
en fonction du nom d'un framework, et non de mon propre bundle (par exemple com.organization.AppName
). Je ne peux trouver de réponses nulle part. J'ai essayé de faire ce qui suit dans ma Podfile
(qui a use_frameworks!), Ainsi que mes différentes combinaisons de conf, mais sans succès.
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['EXPANDED_CODE_SIGN_IDENTITY'] = ""
config.build_settings['CODE_SIGNING_REQUIRED'] = "NO"
config.build_settings['CODE_SIGNING_ALLOWED'] = "NO"
end
end
end
Des questions:
Xcode
essaie-t-il de faire correspondre un framework's bundle id
au lieu de mon application principale?EDIT 1: J'ai réussi à surmonter ce problème, mais cela a posé un autre problème plus tard. Je n'ai toujours pas de solution. Fondamentalement, Alamofire Pod (de Cocoapods) a un identifiant de paquetage com.xxx.Alamofire
. Je l'ai changé en com.xxx.myAppName
. Avec cela, j'ai pu l'envoyer à l'App Store, mais je ne peux pas installer l'application sur mon iPhone à partir de TestFlight en raison de l'erreur suivante:
4/22/16, 12:50:29 AM itunesstored[124]: [ApplicationWorkspace]: Failed to install application: com.xxx.myAppName; /var/mobile/Media/Downloads/5927832272594571027/-6969961974973998640; Error Domain=LaunchServicesError Code=0 "(null)" UserInfo={Error=DuplicateIdentifier, ErrorDescription=The parent bundle has the same identifier (com.xxx.myAppName) as sub-bundle at /private/var/installd/Library/Caches/com.Apple.mobile.installd.staging/temp.IVHCuO/extracted/Payload/MyApp.app/Frameworks/Alamofire.framework}
Après avoir passé pas mal de temps avec ça, j'ai réussi à le faire fonctionner. Au fond, seul Alamofire présentait ce problème. Voici ce que j'ai fait:
com.company.appName
, écrivez com.company.appName.Alamofire
dedans.J'ai essayé com.company.appName
pour le framework, com.company.Alamofire
, rien n'a fonctionné.
Je viens de rencontrer ce problème avec l’erreur suivante qui s’est affichée lors d’une tentative de téléchargement sur l’App Store.
L'opération iTunes Store a échoué.
Aucun enregistrement d'application approprié n'a été trouvé. Vérifiez que l'identifiant de votre paquet 'org. cocoapods . Alamofire' est correct.
Nous avons rencontré ce problème lorsque nous avons tenté de télécharger (tout en utilisant des Cocoapods) et que nous n’avons pas trouvé de solution, nous avons pris l’action radicale de supprimer complètement les Cocoapods de notre projet et ajouté manuellement chaque module en tant que cadre.
Et ...... le téléchargement sur l'App Store a toujours échoué avec essentiellement la même erreur! ????
L'opération iTunes Store a échoué.
Aucun enregistrement d'application approprié n'a été trouvé. Vérifiez que l'identifiant de votre paquet 'org. alamofire . Alamofire' est correct
Cela ressemble donc probablement à une erreur liée à l'utilisation de la structure au sein même de Xcode.
Constatant que cela n’était pas nécessairement causé par les Cocoapods, nous avons décidé de continuer à utiliser des Cocoapods et avons proposé les étapes suivantes pour résoudre ce problème.
Le correctif:
Notre projet contient 2 cibles (ignorer les cibles de tests unitaires, etc.). 1 pour l'application (appelons-le MyApp) et une autre qui contient la couche réseau et d'autres fonctionnalités non spécifiques à l'application (appelons ceci MyAppKit).
CFBundlePackageType
(également appelé Bundle OS Type code
) au Info.plist
de MyApp et définissez-le sur APPL
.Always Embed Swift Standard Libraires
à Yes
.Always Embed Swift Standard Libraires
à No
.Nous cherchons toujours à savoir exactement ce qui se passe ici, mais nous pensons que cela pourrait être utile à quiconque en fait actuellement l'expérience.
Je recevais cette erreur en essayant de soumettre l'application à iTunes Connect: "Aucun enregistrement d'application approprié n'a été trouvé. Vérifiez que l'identificateur de l'ensemble" org.cocoapods.Alamofire "est correct".
Je l'ai finalement résolu en changeant le code de type Bundle OS en APPL.
Cela fonctionne parfaitement pour moi. Je viens de localiser Info.plist en cliquant avec le bouton droit de la souris sur open en tant que "code source" et j'ai changé <key>CFBundlePackageType</key>
en chaîne APPL
<key>CFBundlePackageType</key>
<string>APPL</string>
Récemment, j’avais également le même problème lorsque je publiais l’application à l’aide de cocoapodes . C’était un projet Objective-C et elle intégrait des modules en tant que cadres dynamiques.
C'est déjà bug rapporté .
Je recommande donc de suivre 2 alternatives pour contourner ce problème:
Utilisez la bibliothèque statique au lieu du cadre dynamique . Pour cela, vous pouvez commenter # use_frameworks! ligne dans votre fichier pod.
Si vous avez besoin d'utiliser framework, vous pouvez essayer les étapes ci-dessous:
Ajoutez votre framework en tant que binaire incorporé dans la cible Xcode.
Dans les phases de construction de votre cible, ajoutez un script d’exécution:
Exemple de script:
# Stripping framework only for archive
if [ "$ACTION" = "install" ]; then
FRAMEWORK_NAME="Framework name"
SCRIPT_FILE_NAME="strip-framework.sh"
# Set working directory to product’s embedded frameworks
cd "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/${FRAMEWORK_NAME}.framework"
# Get architectures for current file
ARCHS="$(lipo -info "${FRAMEWORK_NAME}" | rev | cut -d ':' -f1 | rev)"
for Arch in $ARCHS; do
if ! [[ "${VALID_ARCHS}" == *"$Arch"* ]]; then
# Strip non-valid architectures in-place
lipo -remove "$Arch" -output "$FRAMEWORK_NAME" "$FRAMEWORK_NAME" || exit 1
fi
done
echo "Framework was successfully stripped with unsupported architectures"
fi
# Removing script from framework folder
if [ -f ${SCRIPT_FILE_NAME} ]; then
rm -rf "${SCRIPT_FILE_NAME}"
fi
Remarque: veuillez remplacer votre nom de structure dans ce script !, vous devez vous assurer que ce fichier de script s'appelle "strip-framework.sh" au niveau supérieur du répertoire de la structure.
Les frameworks tiers jamais signés par les fournisseurs et son devoir de consommateur ..__ Ainsi, lorsque vous archivez, il signe vos frameworks avec votre bundle d'applications. Mais après cela, Application Loader considère votre identifiant de bundle comme un framework. Sa chose étrange pour le moment.
Après 2 jours de travail, je pouvais enfin publier mon application.
Même si vous pouviez soumettre en faisant cela, il ne sera jamais installé sur les appareils.
Enfin, j'ai eu une solution parfaite et découvert la raison. C'est ce qui se passe parce que vos frameworks tiers ont quelques problèmes . Par exemple, dans mon cas, le framework Quickblox n'a jamais supporté bitcode encore. J'ai donc dû désactiver le bitcode dans les paramètres de construction pour le cible principale et cadres totalement. Cela corrigera votre problème à coup sûr.
S'il vous plaît examiner cette capture d'écran: J'espère que cela va vous aider les gars . Salut!
Si votre apptitle comporte une barre oblique "/" habituelle, xcode n'a pas réussi à la signer et pense que je télécharge le premier framework org.cocoapods. ***
Ce que j'ai fait - changé de barre oblique en symbole similaire
(première barre oblique, suivante - autre symbole Unicode: ∕/)