webentwicklung-frage-antwort-db.com.de

Meine App wurde gerade aufgrund der Verwendung des Ad Support Frameworks abgelehnt. Welche Bibliothek ist zuständig?

Dies war lediglich ein Update, das nichts an dem Ablehnungsgrund geändert hat. Hier ist die Antwort vom Auflösungszentrum:

Gründe Programmlizenzvertrag PLA 3.3.12

Wir haben festgestellt, dass Ihre App den iOS Advertising Identifier verwendet, jedoch keine Anzeigenfunktionen enthält. Dies entspricht nicht den Bestimmungen der Lizenzvereinbarung für das iOS-Entwicklerprogramm, die in den Überprüfungsrichtlinien für den App Store festgelegt ist.

Im Einzelnen heißt es in Abschnitt 3.3.12 der Lizenzvereinbarung für das iOS-Entwicklerprogramm:

"Sie und Ihre Anwendungen (und alle Dritten, mit denen Sie die Schaltung von Werbung beauftragt 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 Werbekennung, dann stimmen Sie zu, 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. "

Überprüfen Sie Ihren Code - einschließlich der Bibliotheken von Drittanbietern -, um Folgendes zu entfernen:

klasse: ASIdentifierManager
Selektor: advertisingIdentifier
Framework: AdSupport.framework

Wenn Sie planen, Anzeigen in eine zukünftige Version aufzunehmen, entfernen Sie die Werbekennung aus Ihrer App, bis Sie die Anzeigenfunktionalität integriert haben.

Verwenden Sie das Tool „nm“, um die Werbekennung leichter zu finden. Um Informationen zum Werkzeug "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 neuesten Versionen 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

81
user2844801

Im Terminal:

  1. Wechseln Sie in den Stammordner Ihres Projekts
  2. Art: grep -r advertisingIdentifier .(der Punkt am Ende ist kritisch)

Dies überprüft rekursiv jede Datei und gibt Ihnen den Namen der betreffenden Bibliothek.

(in meinem Fall war es Flurry)

112
Adam

Update

Google hat das iOS SDK v3.03c für Google Analytics Services veröffentlicht, mit dem die AdSupport.framework-Abhängigkeit standardmäßig entfernt wird.

Vollständiger Eintrag im Änderungsprotokoll für Version 3.03c (19. Februar 2014): https://developers.google.com/analytics/devguides/collection/ios/changelog

Old 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/ ).

Aber um Google Analytics zu aktualisieren, musste ich das -ObjC-Flag entfernen. Da ich Cocoapods für die Verwaltung einiger dritter Bibliotheken verwende, konnte ich es nicht einfach entfernen. Also habe ich folgendes gemacht:

1 - Aktualisierung von libGoogleAnalytics.a auf Version 3.03a gestartet (5. Februar 2014)

2 - dann wird auch das AdSupport.framework entfernt

3 - "-force_load \" $ {PROJECT_DIR} /Source/Library/GoogleAnalyticsServicesiOS_3.03a "" unter "Target -> Build Settings -> Other Linker Flags" hinzugefügt (Beachten Sie, dass sich in meinem Projekt GoogleAnalytics in/Source/befindet.) Bibliothek/Ordner, und Sie müssen Ihre eigene konfigurieren)

Da ich aber das -ObjC-Flag nicht entfernen konnte, habe ich gesucht, wie das -force_load-Flag mit Cocoapods verwendet werden kann. Dann habe ich zwei nützliche Links gefunden:

1 - https://github.com/CocoaPods/CocoaPods/issues/712

2 - http://www.deanmao.com/2012/12/31/linker-error-using-cocoapods/

Zusammenfassend habe ich das -ObjC-Flag für "-force_load $ (TARGET_BUILD_DIR) /libPods.a" auch unter "Target -> Build Settings -> Other Linker Flags" geändert.

Aber als ich versuchte, meine App zu veröffentlichen, bekam ich eine Fehlermeldung, dass der Compiler libPods.a nicht gefunden hatte. Also 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-Flags wie im Bild unten dargestellt. Other Linker Flags

Hoffe jemandem zu helfen.

Entschuldigung für mein Englisch. =]

17
Glauco Neves

Für mich waren Flurry Analytics und TestFlight das Problem.

Für TestFlight ist es so einfach wie das Aktualisieren. Die Version 2.2.1 wird kein Problem verursachen (ich habe es mit Strings überprüft, wie Apple vorschlagen)

Für Flurry gibt es derzeit keinen Fix 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 von Flurry:

"Vielen Dank, dass Sie sich an Flurry gewandt haben. Wir haben kürzlich erfahren, dass Apple) einige Apps abgelehnt hat, von denen angenommen wird, dass sie den IDFA (Identifier for Advertising) ohne Anzeigenfunktionalität verwenden. Bitte beachten Sie, dass Flurry dies nicht tut Sammeln Sie die IDFA, es sei denn, eine App enthält das AdSupport.framework für Anzeigenfunktionen. 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 speziell auf dieses Problem eingeht.

13
Fradow

Crashlytics war das Problem. Wir hatten ein paar 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 haben das AdSupport.framework, verwenden es jedoch nur, wenn es ausdrücklich aufgerufen wird. Crashlytics rief das Framework auf, weil es prüfen musste, ob die App Werbung 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 Ihre App einfach erneut, damit Crashlytics die neue Version mit diesem Fix verwenden kann.

Antwort des Crashlytics-Teams: "Wir haben gerade ein Update für dieses veröffentlicht. Können Sie Ihre App mit geöffneter Mac-App erstellen und erneut ausführen, damit Ihr SDK aktualisiert werden kann? Danach kann es losgehen! Halten Sie mich auf dem Laufenden Du übermittelst es erneut :) "

PS: Dies fängt an zu passieren, weil Apple scheint seine Richtlinie für die Verwendung von ADSupport geändert zu haben.

4
gmogames

Es stellte sich heraus, dass Testflight v2.2.0 der Konflikt war. Sie haben es seitdem gemäß ihrem Changelog behoben: Consolidate both SDK versions into one which removes all access to ASIdentifierManager

4
user2844801

Ich hatte zuvor in Kommentaren Folgendes geschrieben, um die Benutzer zu den Terminalbefehlen "strings" oder "otool" zu führen. Die vorgeschlagene Antwort mit grep gefällt mir jedoch sehr gut. Also kannst du es zuerst versuchen. Mein Vorschlag ist, diesem Befehl "git" voranzustellen, weil es so viel schneller ist:

git grep advertisingIdentifier

Wenn das nicht funktioniert, versuchen Sie (wie oben beschrieben):

grep -r advertisingIdentifier . 

Was folgt, ist das, was ich zuvor in einem Kommentar oben als Anleitung für Terminalbefehle geschrieben habe:

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.

Sobald Sie sich im Terminal befinden, geben Sie "cd" gefolgt von einem Leerzeichen ein und ziehen Sie Ihren Xcode-Erstellungsordner aus dem Finder in das Terminal. Dies sollte automatisch den Ordnernamen eingeben. Drücken Sie die Eingabetaste, um die Verzeichnisse (CD) in diesen Ordner zu ändern.

Geben Sie von dort aus strings ein, dann ein Leerzeichen, dann den Dateinamen für Ihre Bibliothek oder otool, ein Leerzeichen und den Dateinamen für die Bibliothek. Sie sollten in der Lage sein, TAB zu drücken, um Dateinamen automatisch zu vervollständigen.

3
Louis St-Amour

Meine App wurde ebenfalls mit dem gleichen Fehler abgelehnt! Ich habe ein Vorkommen von advertisingIdentifier im neuesten Facebook SDK (3.12) gefunden. Vielleicht können Sie Ihre Bibliothek mit der folgenden Methode auf ein Vorkommen überprüfen:

Ich habe 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 dieses Hinweises abgelehnt? Wenn ja, was ist zu tun, wenn ich Facebook-Funktionen in meiner App nutzen möchte?

1
bolonn

Das ist etwas komplizierter, als es auf den ersten Blick 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 wird [AsIdentifierManager class], Das in vielen Bibliotheken von Drittanbietern verwendet wird, um zu überprüfen, ob das AdSupport Framework verknüpft wurde, tatsächlich cause das AdSupport Framework verknüpfen . Durch die Verschleierung der Klasse mit NSClassFromString(@"AsIdentfierManager") 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.

Auf GitHub habe ich ein Beispielprojekt erstellt, das dieses Verhalten mithilfe des Frameworks von Segment.io veranschaulicht. https://github.com/distefam/AdSupportDemo

1

Flurry Analytics verwendet diese API ebenfalls.
Terminalausgang:

Binary file ./Lib/Flurry/libFlurry_4.3.0.a matches

Laut Flurry wird der Selektor nicht aufgerufen, wenn das AdSupport-Framework nicht verknüpft ist.
Also entfernte ich das Framework und versuchte es erneut.

0
Nir Golan