मुझे लगता है कि अब मैं उन सभी समस्याओं को हल करने में कामयाब हो गया हूं जो मैं चला रहा था।
- लाइसेंस धारण करने के लिए समूह तत्व शीर्षकों का उपयोग करना सबसे अच्छा लगता है (यह वही है जो Apple iWork ऐप्स में करता है)। हालाँकि, इनकी लंबाई पर एक सीमा होती है (और मुझे अभी तक यह पता नहीं चला है कि सीमा क्या है), इसलिए आपको प्रत्येक लाइसेंस फ़ाइल को कई स्ट्रिंग्स में तोड़ने की आवश्यकता है।
- आप इन के भीतर एक शाब्दिक कैरिज रिटर्न (यानी अन्यथा के रूप में जाना जा सकता है, एम, \ r या 0x0) द्वारा एक लाइन ब्रेक बना सकते हैं।
- सुनिश्चित करें कि किसी भी शाब्दिक मध्य-पाठ को शामिल न करें। यदि आप करते हैं, तो फ़ाइल में कुछ या सभी तारों को चुपचाप अनदेखा कर दिया जाएगा।
मुझे एक सुविधा स्क्रिप्ट मिली है जिसका उपयोग मैं .plist और .strings फ़ाइल बनाने में मदद करने के लिए करता हूं, जो नीचे दिखाई गई है।
इसके प्रयेाग के लिए:
- अपनी परियोजना के तहत एक 'लाइसेंस' निर्देशिका बनाएं
- उस निर्देशिका में स्क्रिप्ट रखो
- प्रत्येक लाइसेंस को उस डायरेक्टरी में रखें, जो फाइल के साथ एक फाइल है
- लाइसेंस पर कोई आवश्यक सुधार करना। (जैसे। लाइनों की शुरुआत में अतिरिक्त रिक्त स्थान हटा दें, यह सुनिश्चित करें कि कोई रेखा नहीं है मध्य-पैरा टूट जाता है)। प्रत्येक पैराग्राफ के बीच में एक रिक्त रेखा होनी चाहिए
- लाइसेंस निर्देशिका में बदलें और स्क्रिप्ट चलाएँ
- अपनी सेटिंग्स को संपादित करें Root.plist को 'Acknowledgements' नामक एक बाल अनुभाग शामिल करने के लिए
यहाँ स्क्रिप्ट है:
#!/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 नहीं बनाया है, तो फ़ाइल -> नई -> नई फ़ाइल पर जाएं ...
संसाधन अनुभाग के तहत, सेटिंग्स बंडल ढूंढें। डिफ़ॉल्ट नाम का उपयोग करें और इसे अपनी परियोजना की जड़ में सहेजें।
Settings.bundle
समूह का विस्तार करें और चुनें Root.plist
। आपको एक नया अनुभाग जोड़ना होगा जहां इसकी कुंजी Preference Items
प्रकार की होगी Array
। निम्नलिखित जानकारी जोड़ें:
Filename
Plist कि इस स्क्रिप्ट द्वारा बनाया गया था करने के लिए महत्वपूर्ण बिंदुओं। आप title
जो चाहते हैं उसे बदल सकते हैं।
बनाएँ समय पर स्क्रिप्ट निष्पादित करें
इसके अलावा, यदि आप चाहते हैं कि जब भी आप अपनी परियोजना का निर्माण करें, तो आप इस स्क्रिप्ट को अपने लक्ष्य में जोड़ सकते हैं:
- अपनी परियोजना फ़ाइल पर जाएँ
- लक्ष्य का चयन करें
- बिल्ड चरण टैब पर क्लिक करें
- उस फलक के निचले दाएं कोने में, 'बिल्ड चरण जोड़ें' पर क्लिक करें
- 'रन स्क्रिप्ट जोड़ें' चुनें
- अपनी स्क्रिप्ट के लिए अपनी पर्ल स्क्रिप्ट को सेक्शन में खींचें और छोड़ें। कुछ इस तरह से देखने के लिए संशोधित करें:
cd $SRCROOT/licenses
( $SRCROOT
आपकी परियोजना की जड़ को इंगित करता है)
./yourScriptName.pl
आपके द्वारा ऐसा करने के बाद, आप Run Script
बिल्ड चरण को बिल्ड प्रक्रिया में जल्द ही खींच सकते हैं । आप इसे पहले स्थानांतरित करना चाहते हैं Compile Sources
ताकि आपके सेटिंग बंडल के अपडेट संकलित और कॉपी किए जा सकें।
IOS 7 के लिए अपडेट: iOS 7 "टाइटल" को अलग-अलग हैंडल करता है और रेंडर किए गए टेक्स्ट को गड़बड़ कर रहा है। यह तय करने के लिए कि उत्पन्न Acknowledgements.plist को "शीर्षक" के बजाय "FooterText" कुंजी का उपयोग करने की आवश्यकता है। यह स्क्रिप्ट कैसे बदलें:
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);
}