Saya rasa sekarang saya telah berhasil menyelesaikan semua masalah yang saya hadapi.
- Tampaknya lebih baik menggunakan judul elemen grup untuk memegang lisensi (inilah yang dilakukan Apple di aplikasi iWork). Namun ada batasan panjangnya (dan saya belum menemukan dengan tepat apa batasnya), jadi Anda perlu memecah setiap file lisensi menjadi beberapa string.
- Anda dapat membuat pemisah baris di dalamnya dengan menyertakan carriage return literal (misalnya, dikenal sebagai ^ M, \ r atau 0x0A)
- Pastikan untuk tidak menyertakan teks tengah literal. Jika Anda melakukannya, beberapa atau semua string dalam file akan diabaikan secara diam-diam.
Saya memiliki skrip praktis yang saya gunakan untuk membantu menghasilkan file .plist dan .strings, yang ditunjukkan di bawah ini.
Untuk menggunakannya:
- Buat direktori 'lisensi' di bawah proyek Anda
- Masukkan skrip ke direktori itu
- Letakkan setiap lisensi ke dalam direktori itu, satu per file, dengan nama file yang berakhiran .license
- Lakukan format ulang yang diperlukan pada lisensi. (mis. hapus spasi ekstra di awal baris, pastikan tidak ada jeda baris di tengah paragraf). Harus ada baris kosong di antara setiap paragraf
- Ubah ke direktori lisensi & jalankan skrip
- Edit paket pengaturan Anda Root.plist untuk menyertakan bagian anak yang disebut 'Ucapan Terima Kasih'
Berikut skripnya:
#!/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);
Menyiapkan Settings.bundle Anda
Jika Anda belum membuat Settings.bundle, buka File -> New -> New File ...
Di bawah bagian Resource, temukan Settings Bundle. Gunakan nama default dan simpan ke root proyek Anda.
Luaskan Settings.bundle
grup dan pilih Root.plist
. Anda perlu menambahkan bagian baru di mana kuncinya akan Preference Items
bertipe Array
. Tambahkan informasi berikut:
The Filename
poin kunci untuk plist yang telah dibuat oleh script ini. Anda dapat mengubah title
apa pun yang Anda inginkan.
Jalankan Skrip Pada Waktu Pembuatan
Selain itu, jika Anda ingin skrip ini berjalan setiap kali Anda membangun proyek, Anda dapat menambahkan fase pembangunan ke target Anda:
- Buka file proyek Anda
- Pilih target
- Klik tab Build Phases
- Di sudut kanan bawah panel itu, klik 'Tambahkan Fase Bangun'
- Pilih 'Add Run Script'
- Seret dan lepas skrip perl Anda ke bagian skrip Anda. Ubah agar terlihat seperti ini:
cd $SRCROOT/licenses
( $SRCROOT
menunjuk ke akar proyek Anda)
./yourScriptName.pl
Setelah Anda menyelesaikannya, Anda dapat menarik Run Script
fase build lebih cepat dalam proses build. Anda ingin memindahkannya sebelumnya Compile Sources
sehingga pembaruan pada Bundel Pengaturan Anda dapat dikompilasi dan disalin.
Pembaruan untuk iOS 7: iOS 7 tampaknya menangani kunci "Judul" yang berbeda dan mengacaukan teks yang dirender. Untuk memperbaiki bahwa Acknowledgements.plist yang dihasilkan perlu menggunakan kunci "FooterText", bukan "Title". Ini cara mengubah skrip:
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);
}
Berikut solusi yang sama yang disediakan @JosephH (tanpa terjemahan), tetapi dilakukan dengan Python untuk siapa saja yang lebih suka python daripada perl
sumber
<3
Perl. ;)current_file = codecs.open(filename, 'r', 'utf-8')
untuk lisensi unicode.Sebagai alternatif, bagi mereka yang menggunakan CocoaPods, ini akan menghasilkan daftar 'Ucapan Terima Kasih' untuk setiap target yang ditentukan dalam Podfile Anda yang berisi detail Lisensi untuk setiap Pod yang digunakan dalam target tersebut (dengan asumsi detail telah ditentukan dalam spesifikasi Pod). File daftar properti yang dapat ditambahkan ke bundel pengaturan iOS.
Ada juga proyek yang sedang berjalan untuk memungkinkan data ini dikonversi dan ditampilkan dalam aplikasi sebagai gantinya:
https://github.com/CocoaPods/cocoapods-install-metadata
https://github.com/cocoapods/CPDAcknowledgements
sumber
Saya pikir saya akan melemparkan iterasi saya pada kode python mengagumkan Sean dalam campuran. Perbedaan utamanya adalah ia mengambil direktori input dan kemudian mencarinya secara rekursif untuk file LICENSE. Ini mendapatkan nilai judul dari direktori induk dari file LISENSI, sehingga dapat diputar dengan baik dengan cocoapods.
Motivasinya adalah untuk membuat skrip build agar bagian hukum aplikasi saya tetap terbarui secara otomatis saat saya menambah atau menghapus pod. Itu juga melakukan beberapa hal lain seperti menghapus baris baru yang dipaksakan dari lisensi sehingga paragraf terlihat sedikit lebih baik di perangkat.
https://github.com/carloe/LicenseGenerator-iOS
sumber
Saya membuat skrip di Ruby yang terinspirasi oleh skrip @JosephH. Versi ini, menurut pendapat saya, akan lebih mewakili proyek sumber terbuka individu.
Wisit iOS-AcknowledgementGenerator untuk mendownload script dan contoh proyek.
Seperti inilah tampilan ucapan terima kasih di Aplikasi Anda:
sumber
Ini adalah tambahan dari jawaban JosephH. (Saya tidak memiliki perwakilan untuk berkomentar)
Saya harus pindah
<key>StringsTable</key> <string>Acknowledgements</string>
ke atas yang terakhir</dict>
di script Perl.Sebelum modifikasi ini, Bagian Ucapan Terima Kasih di Aplikasi kosong dan XCode tidak dapat membaca Acknowledgements.plist yang dihasilkan. ("Data tidak dapat dibaca karena tidak dalam format yang benar.")
(XCode 6.3.2 iOS 8.3)
sumber
Skrip Python dari Sean di utas ini berfungsi. Tetapi ada beberapa hal dasar yang perlu diketahui.
sumber
Ack Ack: Acknowledgement Plist Generator
Beberapa waktu yang lalu saya telah membuat skrip Python yang memindai file lisensi dan membuat daftar Ucapan Terima Kasih yang dapat Anda gunakan di Settings.plist Anda. Itu banyak membantu Anda.
https://github.com/Building42/AckAck
fitur
--help
untuk detailnya)Install
Lari
Screenshot
Jika Anda memiliki saran untuk perbaikan, silakan posting masalah atau tarik permintaan di GitHub!
sumber