Dies war einfach ein Update, das nichts mit dem Ablehnungsgrund zu tun hatte. Hier ist die Antwort vom Auflösungszentrum:
Gründe Programm Lizenzvereinbarung PLA 3.3.12
Wir haben festgestellt, dass Ihre App den iOS Advertising Identifier verwendet, jedoch keine Anzeigenfunktionalität enthält. Dies entspricht nicht den Bestimmungen der Lizenzvereinbarung für das iOS-Entwicklerprogramm, wie sie in den Überprüfungsrichtlinien für den App Store vorgeschrieben sind.
In Abschnitt 3.3.12 der Lizenzvereinbarung für das iOS-Entwicklerprogramm heißt es insbesondere:
"Sie und Ihre Anwendungen (und alle Dritten, mit denen Sie einen Vertrag über die Schaltung von Werbung abgeschlossen haben) dürfen die Werbekennung und alle durch die Verwendung der Werbekennung erhaltenen Informationen nur zum Zwecke der Schaltung von Werbung verwenden. Wenn ein Benutzer die zurücksetzt Dann erklären Sie sich damit einverstanden, die vorherige Werbekennung und abgeleitete Informationen weder direkt noch indirekt mit der zurückgesetzten Werbekennung zu kombinieren, zu korrelieren, zu verknüpfen oder auf andere Weise zu verknüpfen. "
Bitte überprüfen Sie Ihren Code - einschließlich aller Bibliotheken von Drittanbietern -, um alle Instanzen von:
Klasse: ASIdentifierManager
Selektor: AdvertisingIdentifier
Framework: AdSupport.frameworkWenn Sie planen, Anzeigen in eine zukünftige Version aufzunehmen, entfernen Sie bitte die Werbekennung aus Ihrer App, bis Sie Anzeigenfunktionen hinzugefügt haben.
Verwenden Sie das Tool "nm", um die Werbekennung zu finden. Um Informationen zum Tool "nm" zu erhalten, öffnen Sie ein Terminalfenster und geben Sie "man nm" ein.
Wenn Sie keinen Zugriff auf die Bibliotheksquelle haben, können Sie die kompilierte Binärdatei möglicherweise mit den Befehlszeilentools "strings" oder "otool" durchsuchen. Das Tool "Strings" listet die Methoden auf, die die Bibliothek aufruft, und "otool -ov" listet die Objective-C-Klassenstrukturen und ihre definierten Methoden auf. Mithilfe dieser Techniken können Sie eingrenzen, wo sich der problematische Code befindet.
Die von mir verwendeten Bibliotheken von Drittanbietern sind die neueste Version von parse.com sdk, latest version of flurry analytics, and version 2.2 of test flight
. Weiß jemand, um welche Bibliothek es sich handelt? Vielen Dank
quelle
Antworten:
Im Terminal:
grep -r advertisingIdentifier .
(der Punkt am Ende ist kritisch)Dadurch wird jede Datei rekursiv überprüft und Sie erhalten den Namen der fehlerhaften Bibliothek.
(In meinem Fall war es Flurry)
quelle
Aktualisieren
Google hat das iOS SDK v3.03c von Google Analytics Services veröffentlicht, mit dem die Abhängigkeit von AdSupport.framework standardmäßig entfernt wird.
Vollständiger Änderungsprotokolleintrag für Release Version 3.03c (19. Februar 2014): https://developers.google.com/analytics/devguides/collection/ios/changelog
Alter Awnser
Mein Problem war mit Google Analytics und TestFlight.
Für TestFlight aktualisiere ich einfach die Bibliothek auf die Version 2.2.1 ( https://www.testflightapp.com/sdk/ios/release_notes/2.2.1/ ).
Für die Aktualisierung von Google Analytics musste ich jedoch das Flag -ObjC entfernen. Da ich jedoch Cocoapods zum Verwalten einiger dritter Bibliotheken verwende, konnte ich sie nicht einfach entfernen. Also habe ich folgendes gemacht:
1 - Aktualisierung von libGoogleAnalytics.a auf Version 3.03a (5. Februar 2014)
2 - dann wurde auch das AdSupport.framework entfernt
3 - "-force_load \" $ {PROJECT_DIR} /Source/Library/GoogleAnalyticsServicesiOS_3.03a "" unter "Ziel -> Build-Einstellungen -> Andere Linker-Flags" hinzugefügt (Beachten Sie, dass sich GoogleAnalytics in meinem Projekt in / Source / befindet) Bibliothek / Ordner, und Sie müssen Ihre eigenen konfigurieren)
Da ich das Flag -ObjC nicht entfernen konnte, suchte ich nach der Verwendung des Flags -force_load mit Cocoapods und fand zwei nützliche Links:
1 - https://github.com/CocoaPods/CocoaPods/issues/712
2 - http://www.deanmao.com/2012/12/31/linker-error-using-cocoapods/
Zusammenfassend habe ich das Flag -ObjC für "-force_load $ (TARGET_BUILD_DIR) /libPods.a" auch unter "Ziel -> Build-Einstellungen -> Andere Linker-Flags" geändert.
Als ich jedoch versuchte, meine App zu veröffentlichen, wurde eine Fehlermeldung angezeigt, dass der Compiler libPods.a nicht gefunden hat. Daher ging ich zu "Ziel -> Build-Einstellungen -> Andere Linker-Flags -> Release" und Ändern Sie diese Zeichenfolge $ (TARGET_BUILD_DIR) in $ {BUILT_PRODUCTS_DIR}.
So wurden meine anderen Linker-Flaggen wie im Bild unten.
Ich hoffe, jemandem zu helfen.
Entschuldigung für mein Englisch. =]
quelle
OTHER_LDFLAGS
direkt manuell bearbeiten .Für mich waren Flurry Analytics und TestFlight beide das Problem.
Für TestFlight ist es so einfach wie das Aktualisieren. Die Version 2.2.1 verursacht keine Probleme (ich habe die Verwendung von Zeichenfolgen überprüft, wie Apple vorschlägt).
Für Flurry gibt es derzeit keine Lösung außer dem Entfernen von Flurry. Entgegen dem Vorschlag von Lou Weed wird Ihre App abgelehnt, auch wenn AdSupport.framework nicht verlinkt ist.Hier ist die Antwort des Flurry-Supports:
"Vielen Dank, dass Sie sich an Flurry gewandt haben. Wir haben kürzlich erfahren, dass Apple einige Apps abgelehnt hat, von denen es glaubt, dass sie den IDFA (Identifier for Advertising) ohne Anzeigenfunktion verwenden. Bitte beachten Sie, dass Flurry die IDFA nur erfasst, wenn eine App den AdSupport enthält .framework für Anzeigenfunktionalität. Wir bemühen uns um Klärung mit Apple und werden unsere betroffenen Kunden aktualisieren, sobald wir in den nächsten Tagen mehr erfahren. "Flurry hat gerade die Version 4.3.2 seines SDK veröffentlicht, die sich speziell mit diesem Problem befasst.
quelle
Es stellte sich heraus, dass Testflight v2.2.0 der Konflikt war. Sie haben es seitdem gemäß ihrem Änderungsprotokoll behoben:
Consolidate both SDK versions into one which removes all access to ASIdentifierManager
quelle
Crashlytics war das Problem. Wir hatten einige Apps deswegen abgelehnt. Aber ich habe bereits mit Crashlytics gesprochen und sie haben heute ein neues Update (Version 2.1.6) veröffentlicht, das dieses Problem behebt.
Einige Bibliotheken verfügen über das AdSupport.framework, verwenden es jedoch nur, wenn es ausdrücklich aufgerufen wird. Crashlytics rief das Framework auf, weil überprüft werden musste, ob die App Anzeigen unterstützt. Und diese Änderung wurde in Version 2.1.5 implementiert
Wenn Sie also Crashlytics verwenden, ist dies der wahrscheinlichste Grund. Um dies zu beheben, archivieren Sie einfach Ihre App erneut, damit Crashlytics die neue Version mit diesem Fix verwenden kann.
Antwort des Crashlytics-Teams: "Wir haben gerade ein Update dafür veröffentlicht. Können Sie Ihre App bei geöffneter Mac-App erstellen und erneut ausführen, damit Ihr SDK aktualisiert werden kann? Danach können Sie loslegen! Halten Sie mich danach auf dem Laufenden." Sie reichen erneut ein :) "
PS: Dies beginnt, weil Apple anscheinend seine Richtlinien für die Verwendung von ADSupport geändert hat.
quelle
Ich hatte zuvor Folgendes in Kommentaren geschrieben und die Leute zu den Terminalbefehlen "strings" oder "otool" geleitet. Die vorgeschlagene Antwort auf die Verwendung von grep gefällt mir jedoch sehr gut. Sie können es also zuerst versuchen. Mein Vorschlag ist, diesem Befehl "git" voranzustellen, weil er so viel schneller ist:
Wenn das nicht funktioniert, versuchen Sie es (wie bereits erwähnt):
Was folgt, ist das, was ich zuvor in einem Kommentar oben als Anleitung für Terminalbefehle geschrieben hatte:
Sie können die Dateien Ihres Projekts in Xcode durchsuchen oder versuchen, das AdSupport-Framework zu entfernen, um festzustellen, was zur Erstellungs- / Laufzeit fehlschlägt.
Um das Terminal zu verwenden, klicken Sie auf Spotlight (Suche) und geben Sie Terminal ein. Warten Sie, bis es als Anwendung in den Suchergebnissen angezeigt wird.
Geben Sie im Terminal "cd" gefolgt von einem Leerzeichen ein und ziehen Sie Ihren Xcode-Build-Ordner aus dem Finder in das Terminal. Dies sollte automatisch diesen Ordnernamen eingeben. Drücken Sie die Eingabetaste, und die Verzeichnisse (CD) werden in diesen Ordner geändert.
Geben Sie von dort aus
strings
ein Leerzeichen, dann den Dateinamen für Ihre Bibliothek oderotool
ein Leerzeichen und den Dateinamen für die Bibliothek ein. Sie sollten in der Lage sein, die Tabulatortaste zu drücken, um Dateinamen automatisch zu vervollständigen.quelle
Meine App wurde ebenfalls mit dem gleichen Fehler abgelehnt! Ich habe im neuesten Facebook SDK (3.12) ein Vorkommen von AdvertisingIdentifier gefunden. Vielleicht können Sie Ihre Bibliothek mit der folgenden Methode auf ein Vorkommen überprüfen:
Ich habe das FacebookSDK.framework als Bibliothek im Terminal geöffnet und den folgenden Befehl eingegeben
otool -v -s __TEXT __objc_methname FacebookSDK | Grep AdvertisingIdentifier
Aber ich weiß nicht was ich tun soll. Wurde meine App aufgrund dieser Referenz abgelehnt? Wenn ja, was tun, wenn ich Facebook-Funktionen in meiner App verwenden möchte?
quelle
Dies ist etwas komplizierter als es an der Oberfläche scheint. Nach einigen Experimenten stellte ich fest, dass das AdSupport Framework verknüpft ist, auch wenn nur direkt auf Klassen zugegriffen wird, auf die im AdSupport Framework verwiesen wird. Ironischerweise
[AsIdentifierManager class]
wird dies tatsächlich der Fall sein, der in vielen Bibliotheken von Drittanbietern verwendet wird, um zu überprüfen, ob das AdSupport Framework verknüpft wurde oder nicht dazu führen , der AdSupport Rahmen verknüpft werden. DurchNSClassFromString(@"AsIdentfierManager")
die Verschleierung der Klasse mithilfe von wird das AdSupport-Framework nicht automatisch verknüpft. Natürlich befindet sich dieser Code die meiste Zeit in Bibliotheken von Drittanbietern, sodass Sie nicht viel Kontrolle darüber haben. Dies ist jedoch der Fall.Ich habe auf GitHub ein Beispielprojekt erstellt, das dieses Verhalten mithilfe des Segment.io-Frameworks veranschaulicht. https://github.com/distefam/AdSupportDemo
quelle
Flurry Analytics verwendet diese API ebenfalls.
Terminalausgang:
Laut Flurry wird der Selektor nicht aufgerufen, wenn das AdSupport-Framework nicht verknüpft ist.
Also habe ich das Framework entfernt und erneut versucht, es einzureichen.
quelle