Creo que ahora me las arreglé para resolver todos los problemas que tenía.
- Parece ser mejor utilizar títulos de elementos de grupo para mantener las licencias (esto es lo que hace Apple en las aplicaciones de iWork). Sin embargo, existe un límite en la longitud de estos (y aún no he descubierto exactamente cuál es el límite), por lo que debe dividir cada archivo de licencia en varias cadenas.
- Puede crear un salto de línea dentro de estos incluyendo un retorno de carro literal (es decir, también conocido como ^ M, \ r o 0x0A)
- Asegúrese de no incluir ningún texto a mitad de texto literal. Si lo hace, algunas o todas las cadenas del archivo se ignorarán silenciosamente.
Tengo un script de conveniencia que utilizo para ayudar a generar el archivo .plist y .strings, que se muestra a continuación.
Para usarlo:
- Cree un directorio de 'licencias' en su proyecto
- Ponga el script en ese directorio
- Coloque cada licencia en ese directorio, una por archivo, con nombres de archivo que terminen .license
- Realice cualquier reformateo necesario en las licencias. (por ejemplo, elimine los espacios adicionales al comienzo de las líneas, asegúrese de que no haya saltos de línea en la mitad del párrafo). Debe haber una línea en blanco entre cada párrafo
- Cambie al directorio de licencias y ejecute el script
- Edite su paquete de configuración Root.plist para incluir una sección secundaria llamada 'Agradecimientos'
Aquí está el guión:
#!/usr/bin/perl -w
use strict;
my $out = "../Settings.bundle/en.lproj/Acknowledgements.strings";
my $plistout = "../Settings.bundle/Acknowledgements.plist";
unlink $out;
open(my $outfh, '>', $out) or die $!;
open(my $plistfh, '>', $plistout) or die $!;
print $plistfh <<'EOD';
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>StringsTable</key>
<string>Acknowledgements</string>
<key>PreferenceSpecifiers</key>
<array>
EOD
for my $i (sort glob("*.license"))
{
my $value=`cat $i`;
$value =~ s/\r//g;
$value =~ s/\n/\r/g;
$value =~ s/[ \t]+\r/\r/g;
$value =~ s/\"/\'/g;
my $key=$i;
$key =~ s/\.license$//;
my $cnt = 1;
my $keynum = $key;
for my $str (split /\r\r/, $value)
{
print $plistfh <<"EOD";
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>Title</key>
<string>$keynum</string>
</dict>
EOD
print $outfh "\"$keynum\" = \"$str\";\n";
$keynum = $key.(++$cnt);
}
}
print $plistfh <<'EOD';
</array>
</dict>
</plist>
EOD
close($outfh);
close($plistfh);
Configurando su Settings.bundle
Si no ha creado un Settings.bundle, vaya a Archivo -> Nuevo -> Nuevo archivo ...
En la sección Recursos, busque el Paquete de configuración. Utilice el nombre predeterminado y guárdelo en la raíz de su proyecto.
Expanda el Settings.bundle
grupo y seleccione Root.plist
. Deberá agregar una nueva sección donde su clave será Preference Items
de tipo Array
. Agregue la siguiente información:
La Filename
clave apunta al plist que fue creado por este script. Puedes cambiar el title
a lo que quieras.
Ejecutar secuencia de comandos en el momento de la compilación
Además, si desea que este script se ejecute cada vez que construya su proyecto, puede agregar una fase de construcción a su objetivo:
- Ve a tu archivo de proyecto
- Seleccione el objetivo
- Haga clic en la pestaña Build Phases
- En la esquina inferior derecha de ese panel, haga clic en 'Agregar fase de construcción'
- Seleccione 'Agregar secuencia de comandos de ejecución'
- Arrastre y suelte su script de Perl en la sección de su script. Modifíquelo para lucir algo como esto:
cd $SRCROOT/licenses
( $SRCROOT
apunta a la raíz de su proyecto)
./yourScriptName.pl
Una vez que haya terminado, puede arrastrar la Run Script
fase de compilación antes en el proceso de compilación. Deberá moverlo hacia arriba antes Compile Sources
para que las actualizaciones de su Paquete de configuración se compilen y se copien.
Actualización para iOS 7: iOS 7 parece manejar la tecla "Título" de manera diferente y está arruinando el texto renderizado. Para arreglar eso, el Acknowledgements.plist generado necesita usar la clave "FooterText" en lugar de "Título". Así es como se cambia el script:
for my $str (split /\r\r/, $value)
{
print $plistfh <<"EOD";
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>FooterText</key> # <= here is the change
<string>$keynum</string>
</dict>
EOD
print $outfh "\"$keynum\" = \"$str\";\n";
$keynum = $key.(++$cnt);
}
Aquí está la misma solución que @JosephH proporcionó (sin traducciones), pero hecha en Python para cualquiera que prefiera Python sobre Perl
fuente
<3
Perl. ;)current_file = codecs.open(filename, 'r', 'utf-8')
para licencias Unicode.Como alternativa, para aquellos que usan CocoaPods, generará una lista de 'Reconocimientos' para cada objetivo especificado en su Podfile que contiene los detalles de la licencia para cada Pod utilizado en ese objetivo (asumiendo que los detalles se han especificado en la especificación del Pod). El archivo de lista de propiedades que se puede agregar al paquete de configuración de iOS.
También hay proyectos en marcha para permitir que estos datos se conviertan y se muestren dentro de la aplicación:
https://github.com/CocoaPods/cocoapods-install-metadata
https://github.com/cocoapods/CPDAcknowledgements
fuente
Pensé en lanzar mi iteración sobre el increíble código de Python de Sean en la mezcla. La principal diferencia es que toma un directorio de entrada y luego lo busca de forma recursiva en busca de archivos de LICENCIA. Deriva el valor del título del directorio principal del archivo LICENSE, por lo que funciona bien con cocoapods.
La motivación fue crear un script de compilación para mantener automáticamente actualizada la sección legal de mi aplicación a medida que agrego o elimino pods. También hace algunas otras cosas como eliminar las nuevas líneas forzadas de las licencias para que los párrafos se vean un poco mejor en los dispositivos.
https://github.com/carloe/LicenseGenerator-iOS
fuente
Hice un guión en Ruby inspirado en el guión de @JosephH. Esta versión, en mi opinión, representará mejor los proyectos individuales de código abierto.
Wisit iOS-AcknowledgementGenerator para descargar el script y el proyecto de muestra.
Así es como se verán los reconocimientos en su aplicación:
fuente
Este es un apéndice a la respuesta de JosephH. (No tengo el representante para comentar)
Tuve que moverme
<key>StringsTable</key> <string>Acknowledgements</string>
por encima del último</dict>
en el script de Perl.Antes de esta modificación, la sección de agradecimientos de la aplicación estaba vacía y XCode no podía leer el archivo Acknowledgements.plist resultante. ("Los datos no se pudieron leer porque no están en el formato correcto").
(XCode 6.3.2 iOS 8.3)
fuente
El script Python de Sean en este hilo funciona. Pero hay un par de cosas básicas que debes saber.
fuente
Ack Ack: Generador de listas de reconocimiento
un tiempo, creé un script de Python que busca archivos de licencia y crea una lista de reconocimientos agradable que puede usar en su Settings.plist. Hace mucho del trabajo por ti.
https://github.com/Building42/AckAck
Caracteristicas
--help
detalles)Instalar en pc
correr
Captura de pantalla
Si tiene sugerencias de mejora, no dude en publicar un problema o solicitar una solicitud en GitHub.
fuente