Mi aplicación acaba de ser rechazada por usar el marco de soporte de anuncios. ¿Qué biblioteca es responsable?


Esto fue simplemente una actualización que no cambió nada relacionado con la razón del rechazo. Aquí está la respuesta del centro de resolución:

Motivos Acuerdo de Licencia del Programa PLA 3.3.12

Encontramos que su aplicación utiliza 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, según lo requieren las Pautas de revisión de la Tienda de Aplicaciones.

Específicamente, sección 3.3.12 del Acuerdo de Licencia del Programa para Desarrolladores de iOS establece:

"Usted y Sus Aplicaciones (y cualquier tercero con el que haya contratado para servir publicidad) pueden usar el Identificador de Publicidad, y cualquier información obtenida a través del uso del Identificador de Publicidad, solo con el propósito de servir publicidad. Si un usuario restablece el Identificador de Publicidad, Usted acepta no combinar, correlacionar, vincular o asociar, ya sea directa o indirectamente, la Publicidad anterior Identificador y cualquier información derivada con el Identificador de reset Advertising."

Compruebe su código, incluidas las bibliotecas de terceros , para eliminar cualquier instancia de:

Class: ASIdentifierManager
selector: Identificador de publicidad
framework: AdSupport.framework

Si planea incorporar anuncios en una versión futura, elimine el Identificador de publicidad de su aplicación hasta que haya incluido el anuncio funcionalidad.

Para ayudar a localizar el Identificador de publicidad, utilice la herramienta "nm". Para obtener información sobre la herramienta "nm", abra una ventana de terminal y escriba "man nm."

Si no tiene acceso al código fuente de las bibliotecas, es posible que pueda buscar el binario compilado utilizando las herramientas de línea de comandos "strings" u "otool". La herramienta" strings "enumera los métodos que la biblioteca llama, y "otool-ov" enumera las estructuras de clase Objective-C y sus métodos definidos. Estas técnicas puede ayudarle a reducir dónde reside el código problemático.

Las bibliotecas de terceros que estoy usando son 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

Author: Bob Gilmore, 2014-02-01

9 answers

En la Terminal:

  1. Vaya a la carpeta raíz de su proyecto
  2. Tipo: 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 Ráfaga)

 112
Author: Adam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-06 06:51:57

Update

Google lanzó Google Analytics Services iOS SDK v3.03c que elimina el AdSupport.dependencia del marco por defecto.

Entrada completa del registro de cambios para la versión 3.03 c (Febrero 19, 2014): https://developers.google.com/analytics/devguides/collection/ios/changelog

Antiguo Awnser

Mi problema fue con Google Analytics y TestFlight.

Para TestFlight solo actualizo 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 la bandera-ObjC. Pero como uso Cocoapods para administrar algunas de las terceras bibliotecas, no pude simplemente eliminarlo. Así que hice lo siguiente:

1 - se ha iniciado la actualización de libGoogleAnalytics.a a la versión 3.03 a (5 de febrero de 2014)

2 - a continuación, un eliminado también el AdSupport.marco

3-añadido " - force_load\ "{{PROJECT_DIR} / Source / Library / GoogleAnalyticsServicesiOS_3. 03a ""under" Target Target> Build Settings Other> Other Linker Flags" (Tenga en cuenta que en mi proyecto la GoogleAnalytics está dentro de/Source/ Library / carpeta, y usted tiene que configurar su propio)

Pero como no podía eliminar la bandera-ObjC busqué cómo usar la bandera-force_load 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é la bandera-ObjC por "-force_load. (TARGET_BUILD_DIR)/libPods.a "también bajo" Destino Target > Configuración de compilación Other > Otras banderas de enlace "

Pero de nuevo, cuando traté de publicar mi aplicación recibí un error que me decía que el compilador no encontró libPods.a, así que fui a "Target Settings > Build Settings Other > Other Linker Flags Release > Release" y cambié esta cadena TARG(TARGET_BUILD_DIR) a ${BUILT_PRODUCTS_DIR}.

Así que mis Otras banderas Enlazadoras se volvieron como la imagen de abajo. Otras Banderas Enlazadoras

Espero ayudar a alguien. Lo siento por mi inglés. =]
 17
Author: Glauco Neves,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-20 01:11:27

Para mí, Flurry Analytics y TestFlight fueron ambos el problema.

Para TestFlight, es tan fácil como actualizarlo. La versión 2.2.1 no causará ningún problema (revisé usando cadenas, como sugiere Apple)

Para Flurry, actualmente no hay solución aparte de eliminar Flurry, y contrariamente a la sugerencia de Lou Weed, incluso si es compatible.framework no está vinculado, su aplicación será rechazada.

Aquí está la respuesta de Flurry support:

"Gracias por llegar 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 el AdSupport.marco 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 eso problema.

 13
Author: Fradow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-08 17:46:20

Resulta que el Testflight v2.2.0 fue el conflicto. Desde entonces lo han arreglado de acuerdo con su lista de cambios: Consolidate both SDK versions into one which removes all access to ASIdentifierManager

 4
Author: user2844801,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-05 23:22:11

Crashlytics era el problema. Tuvimos algunas aplicaciones rechazadas debido a ello. Pero ya hablé 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 utilizan a menos que se llame específicamente. Crashlytics estaba llamando al framework porque tenía que comprobar si la aplicación tenía soporte para anuncios. Y ese cambio se implementó en la versión 2.1.5

Así que si estás usando crashlytics, ese es el 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 lanzar una actualización para esto: ¿puede crear y ejecutar su aplicación de nuevo con la aplicación Mac abierta para que pueda actualizar su SDK? ¡Estarás bien para ir después de eso! Manténgame informado después de volver a enviar :) "

PD: Esto está empezando a suceder porque Apple parece haber cambiado su política para el uso de AdSupport.

 4
Author: gmogames,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-06 23:07:48

Anteriormente había escrito lo siguiente en los comentarios, dirigiendo a las personas a los comandos de terminal "strings" u "otool". Sin embargo, me gusta mucho la respuesta sugerida de usar grep. Así que 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, entonces intente (como se publicó anteriormente):

grep -r advertisingIdentifier . 

Lo que sigue es lo que había escrito anteriormente en un comentario anterior, como un how-to para los comandos de terminal:

Puedes buscar los archivos de su proyecto en Xcode o puede intentar eliminar el marco de AdSupport para ver qué falla en el tiempo de compilación / ejecución.

Para usar el terminal, haga clic en Spotlight (buscar) y escriba Terminal. Espere a que aparezca como una aplicación en los resultados de búsqueda.

Una vez en Terminal, escriba "cd" seguido de un espacio, luego arrastre y suelte su carpeta de compilación Xcode desde Finder en Terminal. Esto debería escribir automáticamente el nombre de la carpeta. Presione Enter, y cambiará los directorios (cd) a eso carpeta.

Desde allí, escriba strings luego un espacio, luego el nombre de archivo para su biblioteca o otool, un espacio y el nombre de archivo para la biblioteca. Debería ser capaz de presionar TAB para completar automáticamente los nombres de archivo.

 3
Author: Louis St-Amour,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-18 17:11:29

Mi aplicación también fue rechazada con el mismo error! He encontrado una ocurrencia de advertisingIdentifier en el último SDK de Facebook (3.12). Tal vez usted puede comprobar su biblioteca de una ocurrencia con el método a continuación:

Abrí el FacebookSDK.framework como una biblioteca en el terminal y escribió el siguiente comando

Otool-v-s _ _ TEXT _ _ objc _ methname FacebookSDK / grep advertisingIdentifier

Pero no se que hacer. ¿Fue rechazada mi aplicación debido a esta referencia? En caso afirmativo ¿qué hacer si quiero usar las funcionalidades de Facebook en mi aplicación?

 1
Author: bolonn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-04 15:05:40

Esto es un poco más complicado de lo que parece en la superficie. Después de un poco de experimentación, descubrí que el marco de AdSupport está vinculado, incluso si solo accede directamente a las clases a las que se hace referencia en el Marco de AdSupport. Irónicamente, [AsIdentifierManager class], que se usa en muchas bibliotecas de terceros para verificar si el Marco de AdSupport se ha vinculado o no, en realidad hará que el marco de AdSupport se vincule. Ofuscando la clase usando NSClassFromString(@"AsIdentfierManager") no causará el AdSupport marco que se vinculará 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á pasando.

Construí un proyecto de ejemplo en GitHub que ilustra este comportamiento usando Segment.io ' s framework. https://github.com/distefam/AdSupportDemo

 1
Author: Michael DiStefano,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-06 20:33:56

Flurry Analytics también utiliza esta API.
Salida de 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 enviar de nuevo.

 0
Author: Lou Weed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-06 22:29:46