ฉันคิดว่าตอนนี้ฉันสามารถแก้ปัญหาทั้งหมดที่พบได้แล้ว
- ดูเหมือนว่าจะเป็นการดีที่สุดที่จะใช้ชื่อองค์ประกอบกลุ่มเพื่อถือใบอนุญาต (นี่คือสิ่งที่ Apple ทำในแอพ iWork) อย่างไรก็ตามมีข้อ จำกัด เกี่ยวกับความยาวของสิ่งเหล่านี้ (และฉันยังไม่ได้ค้นพบว่าขีด จำกัด คืออะไร) ดังนั้นคุณต้องแบ่งไฟล์ลิขสิทธิ์แต่ละไฟล์ออกเป็นหลาย ๆ สตริง
- คุณสามารถสร้างตัวแบ่งบรรทัดภายในสิ่งเหล่านี้ได้โดยรวมการส่งคืนการขนส่งตามตัวอักษร (เช่นหรือเรียกอีกอย่างว่า ^ M, \ r หรือ 0x0A)
- อย่าใส่ข้อความตรงกลางของลิเทอรัลหากคุณทำเช่นนั้นสตริงบางส่วนหรือทั้งหมดในไฟล์จะถูกละเว้นโดยไม่โต้ตอบ
ฉันมีสคริปต์อำนวยความสะดวกที่ใช้เพื่อช่วยสร้างไฟล์. plist และ. string ที่แสดงด้านล่าง
วิธีใช้:
- สร้างไดเรกทอรี 'ใบอนุญาต' ภายใต้โครงการของคุณ
- ใส่สคริปต์ลงในไดเร็กทอรีนั้น
- ใส่แต่ละไลเซนส์ลงในไดเร็กทอรีนั้นหนึ่งรายการต่อไฟล์โดยมีชื่อไฟล์ที่ลงท้ายด้วย. license
- ทำการฟอร์แมตใหม่ที่จำเป็นในใบอนุญาต (เช่นลบช่องว่างเพิ่มเติมที่จุดเริ่มต้นของบรรทัดตรวจสอบให้แน่ใจว่าไม่มีเส้นแบ่งกลางย่อหน้า) ควรมีบรรทัดว่างระหว่างแต่ละย่อหน้า
- เปลี่ยนเป็นไดเร็กทอรีไลเซนส์และรันสคริปต์
- แก้ไขบันเดิลการตั้งค่าของคุณ Root.plist เพื่อรวมส่วนย่อยที่เรียกว่า 'Acknowledgments'
นี่คือสคริปต์:
#!/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
สิ่งที่คุณต้องการได้
เรียกใช้สคริปต์ในเวลาสร้าง
นอกจากนี้หากคุณต้องการให้สคริปต์นี้ทำงานเมื่อใดก็ตามที่คุณสร้างโปรเจ็กต์ของคุณคุณสามารถเพิ่มเฟสการสร้างให้กับเป้าหมายของคุณ:
- ไปที่ไฟล์โครงการของคุณ
- เลือกเป้าหมาย
- คลิกแท็บขั้นตอนการสร้าง
- ที่มุมขวาล่างของบานหน้าต่างนั้นให้คลิกที่ 'Add Build Phase'
- เลือก 'Add Run Script'
- ลากและวางสคริปต์ perl ของคุณลงในส่วนของสคริปต์ของคุณ แก้ไขให้มีลักษณะดังนี้:
cd $SRCROOT/licenses
( $SRCROOT
ชี้ไปที่รากของโครงการของคุณ)
./yourScriptName.pl
หลังจากเสร็จสิ้นคุณสามารถลากRun Script
ระยะการสร้างได้เร็วขึ้นในขั้นตอนการสร้าง คุณจะต้องเลื่อนขึ้นมาก่อนCompile Sources
เพื่อให้การอัปเดตในชุดการตั้งค่าของคุณถูกรวบรวมและคัดลอก
การอัปเดตสำหรับ iOS 7: iOS 7 ดูเหมือนว่าจะจัดการกับคีย์ "Title" แตกต่างออกไปและทำให้ข้อความที่แสดงผลยุ่งเหยิง ในการแก้ไขว่า 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);
}