Думаю, теперь мне удалось решить все проблемы, с которыми я столкнулся.
- Кажется, лучше всего использовать заголовки элементов группы для хранения лицензий (это то, что Apple делает в приложениях iWork). Однако существует ограничение на их длину (и я еще не выяснил, какой именно предел), поэтому вам нужно разбить каждый файл лицензии на несколько строк.
- Вы можете создать в них разрыв строки, включив буквальный возврат каретки (т. Е. Иначе известный как ^ M, \ r или 0x0A)
- Убедитесь, что не добавили какой-либо литерал в середине текста. Если вы это сделаете, некоторые или все строки в файле будут игнорироваться.
У меня есть удобный сценарий, который я использую для создания файлов .plist и .strings, показанных ниже.
Чтобы использовать это:
- Создайте каталог лицензий в рамках вашего проекта
- Поместите скрипт в этот каталог
- Поместите каждую лицензию в этот каталог, по одной на файл, с именами файлов, заканчивающимися .license.
- Выполните необходимое переформатирование лицензий. (например, удалите лишние пробелы в начале строк, убедитесь, что в середине абзаца нет разрывов строк). Между каждым абзацем должна быть пустая строка.
- Перейдите в каталог лицензий и запустите скрипт
- Измените свой пакет настроек Root.plist, включив в него дочерний раздел под названием «Благодарности».
Вот сценарий:
#!/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);
Настройка вашего Settings.bundle
Если вы не создали файл Settings.bundle, перейдите в File -> New -> New File ...
В разделе "Ресурсы" найдите "Набор настроек". Используйте имя по умолчанию и сохраните его в корне вашего проекта.
Разверните Settings.bundle
группу и выберите Root.plist
. Вам нужно будет добавить новый раздел, в котором будет Preference Items
тип ключа Array
. Добавьте следующую информацию:
В Filename
ключевые моменты к PLIST , который был создан этот сценарий. Вы можете изменить его title
на то, что захотите.
Выполнить скрипт во время сборки
Кроме того, если вы хотите, чтобы этот сценарий запускался всякий раз, когда вы строите свой проект, вы можете добавить этап сборки к своей цели:
- Перейдите в файл вашего проекта
- Выберите цель
- Щелкните вкладку Build Phases.
- В правом нижнем углу этой панели нажмите «Добавить этап сборки».
- Выберите «Добавить сценарий запуска».
- Перетащите ваш Perl-скрипт в раздел для вашего скрипта. Измените, чтобы выглядеть примерно так:
cd $SRCROOT/licenses
( $SRCROOT
указывает на корень вашего проекта)
./yourScriptName.pl
После того, как вы закончите это, вы можете перетащить Run Script
этап сборки раньше в процессе сборки. Вы захотите переместить его раньше, Compile Sources
чтобы обновления вашего пакета настроек были скомпилированы и скопированы.
Обновление для iOS 7: похоже, что iOS 7 по-другому обрабатывает ключ «Заголовок» и портит отображаемый текст. Чтобы исправить это, сгенерированный Acknowledgements.plist должен использовать ключ «FooterText» вместо «Title». Вот как изменить сценарий:
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);
}
Вот то же решение, которое предоставил @JosephH (без переводов), но выполненное на Python для всех, кто предпочитает python perl
источник
<3
Perl. ;)current_file = codecs.open(filename, 'r', 'utf-8')
для лицензий Unicode.В качестве альтернативы для тех, кто использует CocoaPods, он сгенерирует список «Подтверждений» для каждой цели, указанной в вашем Podfile, который содержит детали лицензии для каждого Pod, используемого в этой цели (при условии, что детали были указаны в спецификации Pod). Файл списка свойств, который можно добавить в пакет настроек iOS.
Также есть проекты, позволяющие преобразовывать эти данные и отображать их в приложении:
https://github.com/CocoaPods/cocoapods-install-metadata
https://github.com/cocoapods/CPDAcknowledgements
источник
Я подумал, что добавлю свою итерацию на потрясающий код Python Шона в микс. Основное отличие состоит в том, что он берет входной каталог и затем рекурсивно ищет в нем файлы LICENSE. Он получает значение заголовка из родительского каталога файла LICENSE, поэтому хорошо работает с cocoapods.
Мотивация заключалась в том, чтобы создать сценарий сборки, чтобы автоматически обновлять юридический раздел моего приложения при добавлении или удалении модулей. Он также выполняет некоторые другие действия, например, удаляет принудительные символы новой строки из лицензий, чтобы абзацы выглядели немного лучше на устройствах.
https://github.com/carloe/LicenseGenerator-iOS
источник
Я написал сценарий на Ruby, вдохновленный сценарием @JosephH. На мой взгляд, эта версия лучше представляет отдельные проекты с открытым исходным кодом.
Посетите iOS-AcknowledgementGenerator, чтобы загрузить сценарий и образец проекта.
Вот как будут выглядеть благодарности в вашем приложении:
источник
Это приложение к ответу Джозефа Х. (У меня нет представителя для комментариев)
Мне пришлось переместиться
<key>StringsTable</key> <string>Acknowledgements</string>
вниз к последнему</dict>
в сценарии Perl.Перед этой модификацией раздел благодарностей в приложении был пуст, и XCode не мог прочитать полученный список подтверждений. («Данные не могут быть прочитаны, потому что они не в правильном формате.»)
(XCode 6.3.2 iOS 8.3)
источник
Скрипт Python от Шона в этой ветке работает. Но есть пара основных вещей, которые нужно знать.
источник
Ack Ack: Генератор списка подтверждений
Некоторое время назад я создал сценарий Python, который сканирует файлы лицензий и создает красивый список подтверждений, который вы можете использовать в своем Settings.plist. Он делает за вас большую часть работы.
https://github.com/Building42/AckAck
Характеристики
--help
подробности см. )устанавливать
Бегать
Скриншот
Если у вас есть предложения по улучшению, не стесняйтесь размещать проблему или запрос на перенос на GitHub!
источник