¿Cuál es la diferencia entre "Arquitecturas" y "Arquitecturas válidas" en Xcode Build Settings?

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

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

Entonces, tal vez solo quieras build tu binary para armv7s, pero el mismo código fuente comstackría bien para armv7 y armv6. Entonces VALID_ARCHS = armv6 armv7 armv7s , pero configura ARCHS = armv7s porque eso es todo lo que realmente quiere build con su código.

O, en Apple-ese:

ARCHS (architectures)

Lista de identificadores separados por espacios. Especifica las architectures (ABI, models de procesador) a las que se dirige el binary. Cuando esta configuration de compilation especifica más de una architecture, el binary generado puede contener código de object para cada una de las architectures especificadas.

y:

VALID_ARCHS (architectures válidas)

Lista de identificadores separados por espacios. Especifica las architectures para las que se puede build el binary. Durante la compilation, esta list se cruza con el valor de la configuration de compilation ARCHS; La list resultante especifica las architectures en las que se puede ejecutar el binary. Si la list de architecture resultante está vacía, el objective no genera binary.

Fuente: Xcode Build Setting Reference

En la práctica, deja VALID_ARCHS solo y no te preocupas por cambiarlo, y simplemente juguetea con ARCHS para configurar las architectures que deseas build. Por lo general, establece una compilation de debugging solo para NATIVE_ARCH , ya que solo desea comstackr la versión de debugging para la máquina en la que lo va a probar o ejecutar, y libera comstackciones para el espectro completo de architectures que planea admitir.

Desde el documento de Apple, sabemos que el Xcode binary buildá la list de Valid Architectures interseccionadas con Architectures .

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

Entonces, tal vez solo quiera comstackr su binary para armv7s, pero el mismo código fuente
comstackr bien para armv7 y armv6. Entonces VALID_ARCHS = armv6 armv7 armv7s , pero configura ARCHS = armv7s porque eso es todo lo que realmente quiere build con su código.

Cuando establece VALID_ARCHS = armv6 armv7 armv7s , y establece ARCHS = armv7s , el resultado del código Xcode binary será armv7s, no podría ser compatible con armv6 / armv7.

Y si desea ser compatible con armv6 / armv7 / armv7s, debe establecer VALID_ARCHS = armv6 armv7 armv7s y ARCHS = armv6 . De esta forma, el resultado del código Xcode binary será armv6, y puede ejecutarse bien tanto en armv6 / armv7 / armv7s como procesador de arm es compatible hacia atrás.