remote - Mi aplicación fue rechazada por usar el marco de soporte de anuncios. ¿Qué biblioteca es responsable?
nfc iphone 7 como activar (9)
¡Mi aplicación también fue rechazada con el mismo error! Encontré una ocurrencia de advertisingIdentifier en el último SDK de Facebook (3.12). Tal vez pueda verificar la ocurrencia de su biblioteca con el siguiente método:
Abrí el FacebookSDK.framework como una biblioteca en la terminal y escribí el siguiente comando
otool -v -s __TEXT __objc_methname FacebookSDK | grep advertisingIdentifier
Pero no sé qué hacer. ¿Mi aplicación fue rechazada debido a esta referencia? En caso afirmativo, ¿qué hacer si quiero utilizar funcionalidades de Facebook en mi aplicación?
Esto fue simplemente una actualización que no cambió nada que ver con el motivo de rechazo. Aquí está la respuesta del centro de resolución:
Acuerdo de Licencia del Programa Razones PLA 3.3.12
Descubrimos que su aplicación usa el identificador de publicidad de iOS pero no incluye la funcionalidad de anuncios. Esto no cumple con los términos del Acuerdo de licencia del programa para desarrolladores de iOS, tal como lo requieren las Pautas de revisión de la tienda de aplicaciones.
Específicamente, la sección 3.3.12 del Acuerdo de Licencia del Programa de Desarrolladores iOS establece:
"Usted y sus aplicaciones (y cualquier tercero con el que haya contratado para publicar anuncios) pueden usar el identificador publicitario y cualquier información obtenida mediante el uso del identificador publicitario, solo con el fin de publicar publicidad. Identificador publicitario, luego acepta no combinar, correlacionar, vincular ni asociar, ya sea directa o indirectamente, el identificador de publicidad anterior y cualquier información derivada con el identificador de publicidad reiniciada ".
Verifique su código, incluidas las bibliotecas de terceros, para eliminar las instancias de:
clase: ASIdentifierManager
selector: advertisingIdentifier
framework: AdSupport.frameworkSi planea incorporar anuncios en una versión futura, elimine el Identificador de publicidad de su aplicación hasta que haya incluido la funcionalidad de anuncios.
Para ayudar a ubicar el Identificador publicitario, use la herramienta "nm". Para obtener información sobre la herramienta "nm", abra una ventana de terminal e ingrese "man nm".
Si no tiene acceso al origen de las bibliotecas, puede buscar el binario compilado utilizando las herramientas de línea de comandos "cadenas" o "otool". La herramienta "cadenas" enumera los métodos que la biblioteca llama, y "otool -ov" listará las estructuras de la clase Objective-C y sus métodos definidos. Estas técnicas pueden ayudarlo a reducir el lugar donde reside el código problemático.
Las bibliotecas de terceros que estoy usando es la última versión de parse.com sdk, latest version of flurry analytics, and version 2.2 of test flight
la última versión de parse.com sdk, latest version of flurry analytics, and version 2.2 of test flight
. ¿Alguien sabe qué biblioteca es el problema? Gracias
Anteriormente escribí lo siguiente en los comentarios, dirigiendo a las personas a los comandos de la terminal "cuerdas" u "otool". Sin embargo, realmente me gusta la respuesta sugerida de usar grep. Entonces puedes probarlo primero. Mi sugerencia es anteponer "git" a ese comando, porque es mucho más rápido:
git grep advertisingIdentifier
Si eso no funciona, intente (como se publicó anteriormente):
grep -r advertisingIdentifier .
Lo que sigue es lo que había escrito anteriormente en un comentario anterior, como instrucciones para los comandos de terminal:
Puede buscar los archivos de su proyecto en Xcode o puede intentar eliminar el marco de trabajo de AdSupport para ver qué falla durante la compilación / tiempo de ejecución.
Para usar la terminal, haga clic en Spotlight (búsqueda) y escriba Terminal. Espere a que aparezca como una aplicación en los resultados de búsqueda.
Una vez en Terminal, escribe "cd" seguido de un espacio, luego arrastra y suelta tu carpeta de compilación de Xcode desde Finder a Terminal. Esto debería escribir automáticamente el nombre de esa carpeta. Presiona Enter, y cambiará los directorios (cd) a esa carpeta.
A partir de ahí, escriba strings
luego un espacio, luego el nombre del archivo para su biblioteca o otool
, un espacio y el nombre del archivo para la biblioteca. Debería poder presionar TAB para autocompletar los nombres de los archivos.
Crashlytics fue el problema. Tuvimos algunas aplicaciones rechazadas por eso. Pero ya he hablado con Crashlytics y lanzaron una nueva actualización hoy (versión 2.1.6) que soluciona este problema.
Varias bibliotecas tienen el AdSupport.framework pero no lo usan a menos que se les llame específicamente. Crashlytics llamaba al marco porque tenía que verificar si la aplicación tenía soporte para anuncios. Y ese cambio se implementó en la versión 2.1.5
Entonces, si usa crashlytics, esa es la razón más probable. Para solucionarlo, simplemente vuelva a archivar su aplicación para que crashlytics pueda usar la nueva versión con esta solución.
Respuesta del equipo de Crashlytics: "Acabamos de publicar una actualización para esto: ¿puede usted crear y ejecutar su aplicación nuevamente con la aplicación Mac abierta para que pueda actualizar su SDK? ¡Estará bien para continuar con eso! vuelves a enviar :) "
PD: Esto está empezando a suceder porque Apple parece haber cambiado su política para el uso de ADSupport.
En la Terminal:
- Ve a la carpeta raíz de tu proyecto
- Escriba:
grep -r advertisingIdentifier .
(el punto al final es crítico)
Esto revisará recursivamente cada archivo y le dará el nombre de la biblioteca infractora.
(en mi caso, fue Flurry)
Esto es un poco más complicado de lo que parece en la superficie. Después de un poco de experimentación, descubrí que AdSupport Framework está vinculado aunque solo tenga acceso directo a las clases a las que se hace referencia en AdSupport Framework. Irónicamente, [AsIdentifierManager class]
, que se utiliza en muchas bibliotecas de terceros para comprobar si AdSupport Framework se ha vinculado o no, en realidad provocará que se enlace el AdSupport Framework. La ofuscación de la clase mediante el uso de NSClassFromString(@"AsIdentfierManager")
no hará que el marco AdSupport se vincule automáticamente. Por supuesto, la mayoría de las veces este código estará en bibliotecas de terceros, por lo que no tendrá mucho control sobre él, sin embargo, esto es lo que está sucediendo.
Creé un proyecto de ejemplo en GitHub que ilustra este comportamiento utilizando el marco de Segment.io. https://github.com/distefam/AdSupportDemo
Flurry Analytics también usa esta API.
Salida terminal:
Binary file ./Lib/Flurry/libFlurry_4.3.0.a matches
Flurry dice que el selector no se llama si AdSupport framework no está vinculado.
Así que eliminé el marco y traté de enviarlo nuevamente.
Para mí, Flurry Analytics y TestFlight fueron el problema.
Para TestFlight, es tan fácil como actualizarlo. La versión 2.2.1 no causará ningún problema (he comprobado usando cadenas, como sugiere Apple)
Para Flurry, actualmente no existe una solución aparte de la eliminación de Flurry, y contrariamente a la sugerencia de Lou Weed, incluso si AdSupport.framework no está vinculado, su aplicación será rechazada.
Aquí está la respuesta de soporte de Flurry:
"Gracias por contactar a Flurry. Recientemente nos enteramos de que Apple ha rechazado algunas aplicaciones que cree que están utilizando el Identificador para Publicidad (IDFA) sin incluir la funcionalidad de anuncios. Tenga en cuenta que Flurry no recopila el IDFA a menos que una aplicación incluya AdSupport .framework para la funcionalidad de anuncios. Estamos buscando aclaraciones con Apple y actualizaremos a nuestros clientes afectados a medida que aprendamos más en los próximos días ".
Flurry acaba de lanzar la versión 4.3.2 de su SDK, que aborda específicamente ese problema.
Resulta que el Testflight v2.2.0 fue el conflicto. Desde entonces, lo han corregido de acuerdo con su registro de cambios: Consolidate both SDK versions into one which removes all access to ASIdentifierManager
Actualizar
Google lanzó el SDK de iOS de servicios de Google Analytics v3.03c que elimina la dependencia AdSupport.framework de forma predeterminada.
Entrada de registro de cambios completa para la versión de lanzamiento 3.03c (19 de febrero de 2014): https://developers.google.com/analytics/devguides/collection/ios/changelog
Viejo Awnser
Mi problema fue con Google Analytics y TestFlight.
Para TestFlight acabo de actualizar la biblioteca a la versión 2.2.1 ( https://www.testflightapp.com/sdk/ios/release_notes/2.2.1/ ).
Pero para actualizar Google Analytics tuve que eliminar el indicador -ObjC. Pero como uso Cocoapods para administrar algunas de las terceras bibliotecas, no pude simplemente eliminarlo. Entonces hice lo siguiente:
1 - comenzó a actualizar libGoogleAnalytics.a a la versión 3.03a (5 de febrero de 2014)
2 - luego se quitó también el AdSupport.framework
3 - agregó "-force_load /" $ {PROJECT_DIR} /Source/Library/GoogleAnalyticsServicesiOS_3.03a "" en "Target -> Build Settings -> Other Linker Flags" (Tenga en cuenta que en mi proyecto, Google Analytics está dentro de / Source / Biblioteca / carpeta, y usted debe configurar la suya propia)
Pero como no pude quitar -ObjC flag, busqué cómo usar -force_load flag con Cocoapods, entonces encontré dos enlaces útiles:
1 - https://github.com/CocoaPods/CocoaPods/issues/712
2 - http://www.deanmao.com/2012/12/31/linker-error-using-cocoapods/
Para resumir, cambié el indicador -ObjC para "-force_load $ (TARGET_BUILD_DIR) /libPods.a" también en "Target -> Build Settings -> Other Linker Flags"
Pero, una vez más, cuando traté de publicar mi aplicación, recibí un error al decirme que el compilador no había encontrado libPods.a, así que fui a "Destino -> Configuraciones de compilación -> Otras banderas de enlaces -> Versión" y cambie esta cadena $ (TARGET_BUILD_DIR) a $ {BUILT_PRODUCTS_DIR}.
Entonces mis otras banderas del enlazador se convirtieron en la imagen de abajo.
Espero ayudar a alguien
Lo siento por mi ingles. =]