web-dev-qa-db-fra.com

iOS - Collision CFBundleIdentifier avec la publication de l'application watchOS

Après le téléchargement de l'application, je reçois l'e-mail suivant

Nous avons identifié un ou plusieurs problèmes liés à une livraison récente de votre application, XXX. Veuillez corriger les problèmes suivants, puis télécharger à nouveau.

ITMS-90806: Collision CFBundleIdentifier - Chaque bundle doit avoir un identifiant de bundle unique. L'identifiant de bundle 'org.cocoapods.CocoaLumberjack' est utilisé dans les bundles '[CocoaLumberjack.framework, CocoaLumberjack.framework]'

CocoaLumberjack est une bibliothèque tierce que j'ai déjà utilisée dans le passé beaucoup de fois sans aucun problème, je suis assez confus.

Il n'est pas lié au mot clé .plist du framework CFBundlePackageType tel qu'il est spécifié dans cette question/réponse Framework CFBundleIdentifier Collision . Le type de package de bundle CocoaLumberjack est "Framework" (CFBundlePackageType = FMWK). CocoaLumberjack est une bibliothèque tierce largement utilisée ajoutée à mon projet à l'aide de cocoapods.

Le problème est probablement lié à la cible watchOS dans mon bundle d'application. La bibliothèque CocoaLumberjack est utilisée à la fois dans l'application iOS et dans l'application watchOS et elle est à l'origine du problème de duplication de l'identifiant de bundle.

La collision CFBundleIdentifier est détectée par Apple Connecter le serveur si le cadre de partage entre la cible iOS et l'extension Watch.

target 'App' do
 platform :ios, '9.0'
 # Pods for App
 ...
 pod 'CocoaLumberjack/Swift', '~> 3.5.3'
 ...
end

target 'AppWatch Extension' do
 platform :watchos, '5.0'
 # Pods for Watch Extension
 ...
 pod 'CocoaLumberjack/Swift', '~> 3.5.3'
 ...
end

L'application iOS utilise la bibliothèque et l'extension watchOS utilise la même bibliothèque. Ils utilisent différentes bibliothèques mais CocoaLumberjack est la seule présente dans les deux.

J'ai déjà publié mon application plusieurs fois dans le passé sans aucun problème avec la même configuration de bibliothèques. Je suppose que le Apple a changé certaines contraintes concernant l'identifiant du bundle au cours des derniers jours.

Le même problème est également présent avec Carthage.

12
cristallo

Voici comment j'ai résolu le problème de Carthage.

1) créer un script de construction Carthage qui sépare les différentes phases de construction Carthage

2) lorsque vous effectuez les builds du framework; commencez par créer les frameworks problématiques pour iOS (je n'en avais qu'un), puis modifiez vos fichiers de projet pour changer l'identifiant du bundle, puis créez ces frameworks pour watchOS, puis construisez le reste de vos frameworks

carthage bootstrap --no-checkout
carthage checkout
#undo previous CFBundleIdentifier changes
sed -i '' 's/com.someco.MyFramework.watchOS;/com.someco.MyFramework;/g' Carthage/Checkouts/MyFramework/MyFramework.xcodeproj/project.pbxproj
carthage build --cache-builds --platform iOS
#set a unique CFBundleIdentifier
sed -i '' 's/com.someco.MyFramework;/com.someco.MyFramework.watchOS;/g' Carthage/Checkouts/MyFramework/MyFramework.xcodeproj/project.pbxproj
carthage build --no-use-binaries --platform watchOS --configuration $CONF $VERBOSE MyFramework

0
Daniel

Une option est - vous pouvez ajouter ". Watchos" (abc.asd.alomofire.watchos) à l'identifiant du groupe de montres manuellement.

0
Saurabh Bisht