Myślę, że teraz udało mi się rozwiązać wszystkie napotkane problemy.
- Wydaje się, że najlepiej jest używać tytułów elementów grupowych do przechowywania licencji (tak robi Apple w aplikacjach iWork). Istnieje jednak ograniczenie ich długości (a jeszcze nie odkryłem dokładnie, jaki to limit), więc musisz podzielić każdy plik licencji na wiele ciągów.
- Możesz w nich utworzyć podział wiersza, dołączając literalny znak powrotu karetki (np. Znany jako ^ M, \ r lub 0x0A)
- Upewnij się, że nie zawiera żadnego tekstu pośredniego dosłownego. Jeśli to zrobisz, niektóre lub wszystkie ciągi w pliku zostaną po cichu zignorowane.
Mam wygodny skrypt, którego używam do generowania plików .plist i .strings, pokazanych poniżej.
Aby z niego skorzystać:
- Utwórz katalog „Licencje” w swoim projekcie
- Umieść skrypt w tym katalogu
- Umieść każdą licencję w tym katalogu, po jednej na plik, z nazwami plików kończącymi się na .license
- Przeprowadź niezbędne ponowne formatowanie licencji. (np. usuń dodatkowe spacje na początku wierszy, upewnij się, że w środku akapitu nie ma podziałów). Pomiędzy każdym akapitem powinna znajdować się pusta linia
- Przejdź do katalogu licencji i uruchom skrypt
- Edytuj pakiet ustawień Root.plist, aby uwzględnić sekcję podrzędną o nazwie „Podziękowania”
Oto scenariusz:
#!/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);
Konfigurowanie pakietu Settings.bundle
Jeśli nie utworzyłeś pakietu ustawień, przejdź do Plik -> Nowy -> Nowy plik ...
W sekcji Zasoby znajdź pakiet ustawień. Użyj domyślnej nazwy i zapisz ją w katalogu głównym projektu.
Rozwiń Settings.bundle
grupę i wybierz Root.plist
. Będziesz musiał dodać nową sekcję, w której jej klucz będzie Preference Items
typu Array
. Dodaj następujące informacje:
Do Filename
kluczowych punktów do plist, który został utworzony przez ten skrypt. Możesz zmienić title
to, co chcesz.
Wykonaj skrypt w czasie kompilacji
Ponadto, jeśli chcesz, aby ten skrypt był uruchamiany za każdym razem, gdy tworzysz projekt, możesz dodać fazę kompilacji do celu:
- Przejdź do pliku projektu
- Wybierz cel
- Kliknij kartę Fazy budowy
- W prawym dolnym rogu tego panelu kliknij „Dodaj fazę budowy”
- Wybierz „Dodaj skrypt uruchamiania”
- Przeciągnij i upuść skrypt perla do sekcji skryptu. Zmodyfikuj, aby wyglądać mniej więcej tak:
cd $SRCROOT/licenses
( $SRCROOT
wskazuje na katalog główny twojego projektu)
./yourScriptName.pl
Po zakończeniu możesz wcześniej przeciągnąć Run Script
fazę kompilacji w procesie kompilacji. Będziesz chciał go wcześniej przenieść, Compile Sources
aby aktualizacje pakietu ustawień zostały skompilowane i skopiowane.
Aktualizacja dla iOS 7: iOS 7 wydaje się obsługiwać klawisz „Tytuł” inaczej i psuje renderowany tekst. Aby naprawić, że wygenerowana lista Acknowledgements.plist musi używać klucza „FooterText” zamiast „Title”. Oto jak zmienić skrypt:
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);
}
Oto to samo rozwiązanie, które dostarczył @JosephH (bez tłumaczeń), ale zrobione w Pythonie dla każdego, kto woli Pythona od Perla
źródło
<3
Perla. ;)current_file = codecs.open(filename, 'r', 'utf-8')
dla licencji Unicode.Alternatywnie, dla tych, którzy używają CocoaPods, wygeneruje listę „Acknowledgments” dla każdego celu określonego w pliku Podfile, która zawiera szczegóły licencji dla każdego Poda używanego w tym celu (zakładając, że szczegóły zostały określone w specyfikacji Poda). Plik listy właściwości, który można dodać do pakietu ustawień systemu iOS.
Trwają również prace nad projektami umożliwiającymi konwersję tych danych i wyświetlanie ich w aplikacji:
https://github.com/CocoaPods/cocoapods-install-metadata
https://github.com/cocoapods/CPDAcknowledgements
źródło
Pomyślałem, że rzucę moją iterację na niesamowity kod Pythona Seana w miksie. Główną różnicą jest to, że pobiera katalog wejściowy, a następnie rekurencyjnie przeszukuje go w poszukiwaniu plików LICENCJI. Wyprowadza wartość tytułu z katalogu nadrzędnego pliku LICENSE, więc dobrze współgra z cocoapods.
Motywacją było stworzenie skryptu kompilacji, który automatycznie aktualizowałby sekcję prawną mojej aplikacji podczas dodawania lub usuwania podów. Robi również inne rzeczy, takie jak usuwanie wymuszonych nowych linii z licencji, dzięki czemu akapity wyglądają trochę lepiej na urządzeniach.
https://github.com/carloe/LicenseGenerator-iOS
źródło
Zrobiłem skrypt w Rubim zainspirowany skryptem @JosephH. Moim zdaniem ta wersja będzie lepiej reprezentować poszczególne projekty open source.
Wisit iOS-AcknowledgementGenerator, aby pobrać skrypt i przykładowy projekt.
Tak będą wyglądać podziękowania w Twojej aplikacji:
źródło
To jest dodatek do odpowiedzi Józefa. (Nie mam przedstawiciela do komentowania)
Musiałem
<key>StringsTable</key> <string>Acknowledgements</string>
zejść powyżej ostatniego</dict>
w skrypcie Perla.Przed tą modyfikacją sekcja Acknowledgements w aplikacji była pusta, a XCode nie mógł odczytać wynikowego Acknowledgements.plist. („Nie można odczytać danych, ponieważ mają one nieprawidłowy format”).
(XCode 6.3.2 iOS 8.3)
źródło
Skrypt w Pythonie od Seana w tym wątku działa. Ale jest kilka podstawowych rzeczy, które należy wiedzieć.
źródło
Ack Ack: Acknowledgement Plist Generator
Jakiś czas temu stworzyłem skrypt w Pythonie, który skanuje pliki licencji i tworzy ładną listę Acknowledgments, której możesz użyć w swoim Settings.plist. Wykonuje dużo pracy za Ciebie.
https://github.com/Building42/AckAck
cechy
--help
szczegóły)zainstalować
Biegać
Zrzut ekranu
Jeśli masz sugestie dotyczące ulepszeń, napisz problem lub prośbę o pobranie na GitHub!
źródło