¿Cuál es la diferencia entre “Arquitecturas” y “Arquitecturas válidas” en la configuración de comstackción de Xcode?

¿Cuál es el significado de ellos y puedo establecerlos en diferentes valores?

Las architectures son las que desea construir, las architectures válidas son las que podría concebir construir con su código base.

Así que tal vez solo quiera construir su binario para armv7s, pero el mismo código fuente comstackría bien para armv7 y armv6. Entonces VALID_ARCHS = armv6 armv7 armv7s , pero usted establece ARCHS = armv7s porque eso es todo lo que realmente quiere construir con su código.

O, en Apple-ese:

ARCHS (Arquitecturas)

Lista de identificadores separados por espacios. Especifica las architectures (ABI, modelos de procesador) a las que se dirige el binario. Cuando esta configuración de comstackción especifica más de una architecture, el binario generado puede contener código objeto para cada una de las architectures especificadas.

y:

VALID_ARCHS (Arquitecturas válidas)

Lista de identificadores separados por espacios. Especifica las architectures para las cuales se puede construir el binario. Durante la comstackción, esta lista se cruza con el valor de la configuración de comstackción ARCHS; la lista resultante especifica las architectures en las que se puede ejecutar el binario. Si la lista de architecture resultante está vacía, el objective no genera ningún binario.

Fuente: Referencia de configuración de comstackción de Xcode

En la práctica, deja VALID_ARCHS solo y no se preocupa por cambiarlo, y simplemente ARCHS con ARCHS para establecer las architectures que desea construir. Normalmente, establece una comstackción de depuración en solo NATIVE_ARCH , ya que solo desea comstackr la versión de depuración para la máquina en la que lo NATIVE_ARCH / ejecutará, y versiones de lanzamiento para todo el espectro de architectures que planea admitir.

Del documento de Apple, sabemos que el Xcode binario que se construirá es la lista de Valid Architectures intersectadas con Architectures .

Entonces, no creo que la respuesta de Jeremy sea correcta, como él dice:

Así que tal vez solo quieras construir tu binario para armv7s, pero el mismo código fuente
comstack bien para armv7 y armv6. Entonces VALID_ARCHS = armv6 armv7 armv7s , pero usted establece ARCHS = armv7s porque eso es todo lo que realmente quiere construir con su código.

Cuando establece VALID_ARCHS = armv6 armv7 armv7s , y establece ARCHS = armv7s , el resultado de que Xcode binario se comstackrá es armv7s, no podría ser compatible con armv6 / armv7.

Y si quiere ser compatible con armv6 / armv7 / armv7s, debe establecer VALID_ARCHS = armv6 armv7 armv7s y ARCHS = armv6 . De esta forma, el resultado del binario Xcode será armv6, y puede funcionar bien en ambos armv6 / armv7 / armv7s como procesador de arm es compatible con versiones anteriores.