আমি মনে করি আমি এখন যে সমস্ত সমস্যা নিয়ে আসছিলাম সেগুলি সমাধান করতে সক্ষম হয়েছি।
- লাইসেন্সগুলি ধরে রাখতে গ্রুপ এলিমেন্ট শিরোনাম ব্যবহার করা ভাল বলে মনে হয় (আইওয়র্ক অ্যাপসে অ্যাপল এটিই করে)। তবে এর দৈর্ঘ্যের একটি সীমা রয়েছে (এবং আমি এখনও সীমাটি ঠিক কীটি আবিষ্কার করতে পারি নি), সুতরাং আপনাকে প্রতিটি লাইসেন্স ফাইলটি একাধিক স্ট্রিংয়ে বিভক্ত করতে হবে।
- আপনি এগুলির মধ্যে একটি আক্ষরিক ক্যারেজ রিটার্ন অন্তর্ভুক্ত করে লাইন ব্রেক তৈরি করতে পারেন (যেমন or এম, \ আর বা 0x0 এ হিসাবে পরিচিত)
- কোনও আক্ষরিক মাঝের পাঠ্যকে অন্তর্ভুক্ত না করার বিষয়টি নিশ্চিত করুন you আপনি যদি এটি করেন তবে ফাইলের কিছু বা সমস্ত স্ট্রিং নীরবে উপেক্ষা করা হবে।
নীচে দেখানো .plist এবং .strings ফাইল জেনারেট করতে সহায়তা করার জন্য আমি একটি সুবিধাজনক স্ক্রিপ্ট পেয়েছি।
এটি ব্যবহার করতে:
- আপনার প্রকল্পের অধীনে একটি 'লাইসেন্স' ডিরেক্টরি তৈরি করুন
- সেই ডিরেক্টরিতে স্ক্রিপ্ট রাখুন
- প্রতিটি লাইসেন্স সেই ডিরেক্টরিতে রাখুন, ফাইলের প্রতি একটি করে ফাইল নাম সহ .license শেষ হয়
- লাইসেন্সগুলিতে কোনও প্রয়োজনীয় পুনর্নির্মাণ সম্পাদন করুন। (উদাহরণস্বরূপ, লাইনের শুরুতে অতিরিক্ত স্থান সরিয়ে ফেলুন, মধ্য অনুচ্ছেদে কোনও লাইন বিরতি নেই তা নিশ্চিত করুন)। প্রতিটি অনুচ্ছেদের মধ্যে একটি ফাঁকা রেখা থাকা উচিত
- লাইসেন্স ডিরেক্টরিতে পরিবর্তন করুন এবং স্ক্রিপ্টটি চালান
- 'স্বীকৃতি' নামে পরিচিত একটি শিশু বিভাগ অন্তর্ভুক্ত করার জন্য আপনার সেটিংস বান্ডিল রুট.পলিট সম্পাদনা করুন
লিপিটি এখানে:
#!/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গ্রুপটি প্রসারিত করুন এবং নির্বাচন করুন Root.plist। আপনাকে একটি নতুন বিভাগ যুক্ত করতে হবে যেখানে এর কীটি Preference Itemsটাইপ হবে Array। নিম্নলিখিত তথ্য যুক্ত করুন:

FilenamePlist যে এই স্ক্রিপ্টের দ্বারা তৈরি করা হয়েছে চাবিকাঠি পয়েন্ট। আপনি titleযা চান তা পরিবর্তন করতে পারেন।
বিল্ড টাইম এ স্ক্রিপ্ট কার্যকর করুন
এছাড়াও, আপনি যখন এই প্রকল্পটি তৈরি করেন আপনি যদি এই স্ক্রিপ্টটি চালাতে চান তবে আপনি আপনার টার্গেটে একটি বিল্ড ফেজ যুক্ত করতে পারেন:
- আপনার প্রকল্পের ফাইলে যান
- লক্ষ্য নির্বাচন করুন
- বিল্ড পর্যায়সমূহ ট্যাবে ক্লিক করুন
- সেই ফলকের নীচের ডানদিকে, 'বিল্ড ফেজ যোগ করুন' এ ক্লিক করুন
- 'রান স্ক্রিপ্ট যুক্ত করুন' নির্বাচন করুন
- আপনার স্ক্রিপ্টের বিভাগে আপনার পার্ল স্ক্রিপ্টটি টানুন এবং ফেলে দিন। এর মতো কিছু দেখতে পরিবর্তন করুন:
cd $SRCROOT/licenses( $SRCROOTআপনার প্রকল্পের মূলকে নির্দেশ করে)
./yourScriptName.pl
এটি শেষ করার পরে, আপনি Run Scriptবিল্ড প্রক্রিয়াটিতে বিল্ড ফেজটি তাড়াতাড়ি টেনে আনতে পারেন । আপনি এটির আগে সরিয়ে নিতে চাইবেন Compile Sourcesযাতে আপনার সেটিংস বান্ডলে আপডেটগুলি সংকলিত হয় এবং অনুলিপি হয়।
আইওএস 7 এর জন্য আপডেট: আইওএস 7 মনে হচ্ছে "শিরোনাম" কীটি ভিন্নভাবে হ্যান্ডেল করে এবং রেন্ডার করা টেক্সটকে গণ্ডগোল করছে। উত্পাদিত স্বীকৃতি.পিস্টকে ঠিক করার জন্য "শিরোনাম" এর পরিবর্তে "পাদচুক্তি" কী ব্যবহার করা উচিত। স্ক্রিপ্টটি কীভাবে পরিবর্তন করবেন:
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);
}