Nach 4 Monaten der Entwicklung meiner ersten iOS-App ist es an der Zeit, sie an den App Store
zu senden. Ich habe die App in iTunes Connect
erstellt, alle Details ausgefüllt und den korrekten Bundle ID
in Connect
und Xcode
eingerichtet. Ich habe jedoch die letzten 3 Tage versucht, dieses seltsame Problem zu lösen. Es scheint, dass xcode versucht, Cocoapods
-Frameworks hochzuladen, nicht meine Haupt-App.
Nach der Archivierung ging ich zu Window > Organizer > Validate...
. Ich sehe den folgenden Bildschirm:
Der Fehler:
(Für Googler: Es wurden keine geeigneten Anwendungsdatensätze gefunden. Stellen Sie sicher, dass Ihre Bündel-ID 'org.cocoapods.Alamofire
' korrekt ist).
Die Fehlermeldung weist darauf hin, dass versucht wird, einen Bundle ID
anhand des Namen des Frameworks und nicht meines eigenen Bundles (z. B. com.organization.AppName
) abzugleichen. Ich kann nirgendwo Antworten finden. Ich habe versucht, folgendes in meiner Podfile
(die use_frameworks hat!) Zu machen, sowie meine verschiedenen Conf-Kombinationen, hatten aber keinen Erfolg.
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
Fragen:
Xcode
, einen framework's bundle id
anstelle nur meiner Hauptanwendung zu finden? EDIT 1: Ich konnte dieses Problem überwinden, aber das verursachte später ein anderes Problem, so dass ich immer noch keine Lösung habe. Grundsätzlich hat Alamofire Pod (von Cocoapods) eine Bündel-ID com.xxx.Alamofire
. Ich habe es in com.xxx.myAppName
geändert. Damit konnte ich es an den App Store senden, jedoch kann ich die App aufgrund des folgenden Fehlers nicht von TestFlight auf meinem iPhone installieren:
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}
Nachdem ich einige Zeit damit zu kämpfen hatte, konnte ich es funktionieren lassen. Im Grunde präsentierte nur Alamofire diese Ausgabe. Folgendes habe ich getan:
com.company.appName
lautet, geben Sie com.company.appName.Alamofire
ein.Ich habe com.company.appName
für das Framework versucht, com.company.Alamofire
, nichts hat funktioniert.
Dieses Problem ist nur aufgetreten, als beim Versuch, in den App Store hochzuladen, der folgende Fehler angezeigt wird.
Der iTunes Store-Vorgang ist fehlgeschlagen.
Es wurden keine geeigneten Anwendungsdatensätze gefunden. Überprüfen Sie, ob Ihr Bündel-Identifikator 'org. cocoapods . Alamofire' korrekt ist
Dies ist uns beim Versuch des Hochladens (bei Verwendung von Cocoapods) und bei der Suche nach einer Fehlerbehebung aufgefallen. Wir haben die drastische Maßnahme ergriffen, Cocoapods vollständig aus unserem Projekt zu entfernen, und stattdessen jeden Pod manuell als Framework hinzugefügt.
Und ...... der Upload in den App Store schlug immer noch mit dem gleichen Fehler fehl! ????
Der iTunes Store-Vorgang ist fehlgeschlagen.
Es wurden keine geeigneten Anwendungsdatensätze gefunden. Vergewissern Sie sich, dass Ihre Bündel-ID 'org. alamofire . Alamofire' korrekt ist
Es sieht also so aus, als wäre dies möglicherweise ein Fehler in Bezug auf die Verwendung des Frameworks innerhalb von Xcode.
Als wir herausfanden, dass dies nicht unbedingt von Cocoapods verursacht wurde, entschieden wir uns, Cocoapods weiter zu verwenden, und entwickelten die folgenden Schritte, um das Problem zu beheben.
Die Reparatur:
Unser Projekt enthält 2 Ziele (Ignorieren von Unit-Test-Zielen usw.). 1 für die Anwendung (nennen wir es MyApp ) und eine andere, die die Netzwerkschicht und andere nicht App-spezifische Funktionen enthält (nennen wir MyAppKit ).
CFBundlePackageType
(auch bekannt als Bundle OS Type code
) zu MyApps Info.plist
hinzu und setzen Sie ihn auf APPL
.Always Embed Swift Standard Libraires
bis Yes
haben.Always Embed Swift Standard Libraires
bis No
hat.Sehen Sie sich immer noch genau an, was hier vor sich geht, aber ich denke, das könnte für jeden nützlich sein, der dies gerade erlebt.
Beim Versuch, die App an iTunes Connect zu senden, wurde genau diese Fehlermeldung angezeigt: "Es wurden keine geeigneten Anwendungsdatensätze gefunden. Überprüfen Sie, ob die Bündel-ID" org.cocoapods.Alamofire "korrekt ist.".
Ich habe es schließlich behoben, indem ich den Bundle OS Type-Code inAPPLgeändert habe.
Es funktioniert perfekt für mich. Ich habe gerade Info.plist mit der rechten Maustaste als "Quellcode" geöffnet und <key>CFBundlePackageType</key>
in String APPL geändert
<key>CFBundlePackageType</key>
<string>APPL</string>
Vor kurzem hatte ich dasselbe Problem, während ich die App mit Cocoapods veröffentlichte. Es war ein Objective-C-Projekt und hat Pods als dynamische Frameworks integriert.
Dies ist bereits gemeldeter Fehler .
Daher empfehle ich die folgenden zwei Alternativen, um dieses Problem zu umgehen:
Verwenden Sie statt eines dynamischen Frameworks eine statische Bibliothek. Dazu können Sie # use_frameworks kommentieren! Zeile in Ihrer Pod-Datei.
Wenn Sie ein Framework verwenden müssen, können Sie die folgenden Schritte ausführen:
Fügen Sie Ihr Framework als eingebettete Binärdatei in Xcode-Ziel hinzu.
Fügen Sie in den Erstellungsphasen Ihres Ziels ein Ausführungsskript hinzu:
Beispielskript:
# 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
Hinweis: Bitte ersetzen Sie Ihren Framework-Namen in diesem Skript! Sie müssen diese Skriptdatei mit dem Namen "strip-framework.sh" in die oberste Ebene des Framework-Verzeichnisses einfügen.
Frameworks von Drittanbietern, die niemals von Providern und ihrer Verbraucherpflicht unterzeichnet wurden. Wenn Sie also archivieren, werden Ihre Frameworks zusammen mit Ihrem App-Paket signiert. Danach betrachtet Application Loader Ihre Bundle-ID als Framework. Es ist schon seltsam.
Nach zwei Tagen konnte ich meine App endlich veröffentlichen.
Selbst wenn Sie dies auf knifflige Weise einreichen könnten, wird es niemals auf den Geräten installiert.
Schließlich habe ich eine perfekte Lösung gefunden und den Grund herausgefunden. Dies geschieht , Weil Ihre Frameworks von Drittanbietern Probleme aufweisen. In meinem Fall hat das Quickblox-Framework zum Beispiel Bitcode noch nie unterstützt. Also musste ich den Bitcode in den Build-Einstellungen für das Hauptziel und die Frameworks total deaktivieren. Dies wird Ihr Problem mit Sicherheit beheben.
Bitte überprüfen Sie diesen Screenshot: Ich hoffe das hilft euch Jungs. Prost!
Wenn Ihr Apptitle den üblichen Schrägstrich "/" hat, konnte es von xcode nicht signiert werden, und meint, dass ich das erste Framework org.cocoapods hochlade.
Was ich getan habe - änderte den Schrägstrich in ein ähnliches Symbol ∕
(erster Schrägstrich, nächster - anderes Unicode-Symbol: ∕/)
In meinem Fall musste ich die Provisioning-Profileinstellung aus dem Pods-Unterprojekt entfernen.