আইওএস সেটিংস বান্ডলে লাইসেন্স বিভাগ যুক্ত করার সর্বোত্তম উপায়


116

আমার আইওএস অ্যাপ্লিকেশনটিতে অ্যাপাচি ২.০ এর অধীন লাইসেন্সযুক্ত তৃতীয় পক্ষের কয়েকটি উপাদান এবং অনুরূপ লাইসেন্স ব্যবহার করা হয়েছে, যার জন্য আমাকে বিভিন্ন ধরণের পাঠ্য অন্তর্ভুক্ত করতে হবে:

* Redistributions in binary form must reproduce the above copyright
  notice, this list of conditions and the following disclaimer in the
  documentation and/or other materials provided with the distribution.

সেটিংস বান্ডলে (লাইসেন্স আইপ্যাডেন্ট সাবেন্ট্রি-র অধীনে এই তথ্য রাখার একটি যুক্তিসঙ্গত নজির আছে বলে মনে হয় (আইপ্যাড ফেসবুক, পৃষ্ঠাগুলি, মূল বক্তব্য, নম্বর এবং উইকিপ্যানিয়নে এটি করা সমস্ত মনে হয়))।

আমি আসলে কিছু অর্জন করার জন্য কিছুটা সংগ্রাম করছি; আমার কাছে লেখাটি লাইন দিয়ে আলাদা করে বিভাজন করা দরকার এবং একসাথে এক্সকোডে একটি লাইন প্রবেশ করা প্রয়োজন (এবং এক্সকোড 4 মনে হচ্ছে প্লাস্টিকগুলি সম্পাদনা করার সময় ক্র্যাশ সমস্যা রয়েছে)।

দেখে মনে হচ্ছে এটি এমন এক ধরণের জিনিস যা প্রায় অবশ্যই কোনও কোথাও স্ক্রিপ্ট করার মতো, বা এটি করার সহজ উপায় যা আমি মিস করেছি।

উত্তর:


192

আমি মনে করি আমি এখন যে সমস্ত সমস্যা নিয়ে আসছিলাম সেগুলি সমাধান করতে সক্ষম হয়েছি।

  • লাইসেন্সগুলি ধরে রাখতে গ্রুপ এলিমেন্ট শিরোনাম ব্যবহার করা ভাল বলে মনে হয় (আইওয়র্ক অ্যাপসে অ্যাপল এটিই করে)। তবে এর দৈর্ঘ্যের একটি সীমা রয়েছে (এবং আমি এখনও সীমাটি ঠিক কীটি আবিষ্কার করতে পারি নি), সুতরাং আপনাকে প্রতিটি লাইসেন্স ফাইলটি একাধিক স্ট্রিংয়ে বিভক্ত করতে হবে।
  • আপনি এগুলির মধ্যে একটি আক্ষরিক ক্যারেজ রিটার্ন অন্তর্ভুক্ত করে লাইন ব্রেক তৈরি করতে পারেন (যেমন or এম, \ আর বা 0x0 এ হিসাবে পরিচিত)
  • কোনও আক্ষরিক মাঝের পাঠ্যকে অন্তর্ভুক্ত না করার বিষয়টি নিশ্চিত করুন you আপনি যদি এটি করেন তবে ফাইলের কিছু বা সমস্ত স্ট্রিং নীরবে উপেক্ষা করা হবে।

নীচে দেখানো .plist এবং .strings ফাইল জেনারেট করতে সহায়তা করার জন্য আমি একটি সুবিধাজনক স্ক্রিপ্ট পেয়েছি।

এটি ব্যবহার করতে:

  1. আপনার প্রকল্পের অধীনে একটি 'লাইসেন্স' ডিরেক্টরি তৈরি করুন
  2. সেই ডিরেক্টরিতে স্ক্রিপ্ট রাখুন
  3. প্রতিটি লাইসেন্স সেই ডিরেক্টরিতে রাখুন, ফাইলের প্রতি একটি করে ফাইল নাম সহ .license শেষ হয়
  4. লাইসেন্সগুলিতে কোনও প্রয়োজনীয় পুনর্নির্মাণ সম্পাদন করুন। (উদাহরণস্বরূপ, লাইনের শুরুতে অতিরিক্ত স্থান সরিয়ে ফেলুন, মধ্য অনুচ্ছেদে কোনও লাইন বিরতি নেই তা নিশ্চিত করুন)। প্রতিটি অনুচ্ছেদের মধ্যে একটি ফাঁকা রেখা থাকা উচিত
  5. লাইসেন্স ডিরেক্টরিতে পরিবর্তন করুন এবং স্ক্রিপ্টটি চালান
  6. 'স্বীকৃতি' নামে পরিচিত একটি শিশু বিভাগ অন্তর্ভুক্ত করার জন্য আপনার সেটিংস বান্ডিল রুট.পলিট সম্পাদনা করুন

লিপিটি এখানে:

#!/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যা চান তা পরিবর্তন করতে পারেন।

বিল্ড টাইম এ স্ক্রিপ্ট কার্যকর করুন

এছাড়াও, আপনি যখন এই প্রকল্পটি তৈরি করেন আপনি যদি এই স্ক্রিপ্টটি চালাতে চান তবে আপনি আপনার টার্গেটে একটি বিল্ড ফেজ যুক্ত করতে পারেন:

  1. আপনার প্রকল্পের ফাইলে যান
  2. লক্ষ্য নির্বাচন করুন
  3. বিল্ড পর্যায়সমূহ ট্যাবে ক্লিক করুন
  4. সেই ফলকের নীচের ডানদিকে, 'বিল্ড ফেজ যোগ করুন' এ ক্লিক করুন
  5. 'রান স্ক্রিপ্ট যুক্ত করুন' নির্বাচন করুন
  6. আপনার স্ক্রিপ্টের বিভাগে আপনার পার্ল স্ক্রিপ্টটি টানুন এবং ফেলে দিন। এর মতো কিছু দেখতে পরিবর্তন করুন:
  1. cd $SRCROOT/licenses( $SRCROOTআপনার প্রকল্পের মূলকে নির্দেশ করে)
  2. ./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);
}

1
কি দুর্দান্ত ধারণা! আমি নিজেই এটি করা শুরু করেছিলাম তাড়াতাড়ি বুঝতে পারার আগে আমার একটি স্বয়ংক্রিয় সমাধান প্রয়োজন, বিশেষত ড্র্যাকোনীয় গ্রুপ শিরোনাম দৈর্ঘ্যের সীমা কারণে because
হিল্টন ক্যাম্পবেল

9
একটি বিষয় লক্ষ্য রাখতে হবে: "ফাইলের নাম" হ'ল কীটির প্রদর্শন ফর্ম। আসল কীটি "ফাইল"। যদি শিশুটির ফলকটি প্রদর্শিত না হচ্ছে, ডান ক্লিক করুন এবং "কাঁচা কী / মানগুলি দেখান" নির্বাচন করুন এবং নিশ্চিত হয়ে নিন যে মূল নামটি "ফাইল"।
অ্যাটিকাস

10
ধন্যবাদ, এটি দুর্দান্ত। আমি রান স্ক্রিপ্ট ব্লকে 'সিডি "$ এসআরক্রট / লাইসেন্স /" "ব্যবহার করেছি যা আপনার প্রকল্পে একাধিক লোক কাজ করলে কিছুটা ভাল কাজ করে।
ক্রিস

9
যদি আপনি এটি iOS7 এর সাথে ব্যবহার করে থাকেন তবে ডিভফরমগুলি.অ্যাপল.com/message/894791#894791 পড়ুন । বিশেষত আপনার এটিকে স্বাভাবিক দেখানোর জন্য <key> শিরোনাম </key> <key> পাদচুক্তি </key> এ পরিবর্তন করতে হবে।
এসিলিভার

2
এটি কীভাবে একটি শিশু ফলক তৈরি করবেন: পছন্দসই আইটেমগুলির মধ্যে 0 আইটেম তৈরি করুন। দেখে মনে হচ্ছে আপনি চাইল্ড ফলকে টাইপ হিসাবে বেছে নিতে পারবেন না, তবে আপনি যা করছেন আইটেম 0 (আইটেম 0 এর সাবাইটেম) এর অধীনে একটি আইটেম তৈরি করা এবং সেই প্রথম আইটেমটির কী "টাইপ" রয়েছে। এটি আরও সহজ করার জন্য, এখানে ক্লিক করুন এবং কাঁচা কী / মানগুলি নির্বাচন করুন। আপনি PSChildPaneSpecifier প্রকারের জন্য মান সেট করতে চান। একবার আপনি কাঁচা কী / মানগুলি আনসেট না করে এটি এখন আইটেম 0 এর নামে এমনকি শিশু পেন বলে দেবে, যেমন "এর 0 (শিশু ফলক)"। এটাই তুমি চাও.
মার্ক

36

এখানে @ জোসেফ এইচ প্রদান করেছেন (অনুবাদ ব্যতীত) একই সমাধান, তবে যে কেউ পার্লের চেয়ে অজগর পছন্দ করেন তার জন্য পাইথনে এটি করা হয়েছে

import os
import sys
import plistlib
from copy import deepcopy

os.chdir(sys.path[0])

plist = {'PreferenceSpecifiers': [], 'StringsTable': 'Acknowledgements'}
base_group = {'Type': 'PSGroupSpecifier', 'FooterText': '', 'Title': ''}

for filename in os.listdir("."):
    if filename.endswith(".license"):
        current_file = open(filename, 'r')
        group = deepcopy(base_group)
        title = filename.split(".license")[0]
        group['Title'] = title
        group['FooterText'] = current_file.read()
        plist['PreferenceSpecifiers'].append(group)

plistlib.writePlist(
    plist,
    "../Settings.bundle/Acknowledgements.plist"
)

এই উত্তরের আরও উন্নতি প্রয়োজন। পাইথন সিনট্যাক্স <3পার্ল সিনট্যাক্স। ;)
রিকার্ডো সানচেজ-সায়েজ

5
current_file = codecs.open(filename, 'r', 'utf-8')ইউনিকোড লাইসেন্সের জন্য।
ব্যবহারকারী 2821144

ধন্যবাদ! আমি এটির উপর ভিত্তি করে একটি নতুন সংস্করণ তৈরি করেছি যা কার্থেজের জন্য দুর্দান্ত। এটি লাইসেন্সের পাঠ্য থেকে কিছু অপ্রয়োজনীয় নিউলাইনগুলিও সরিয়ে দেয়। এটি দেখুন: gist.github.com/Zyphrax/0d015c618d46093b4f815e62a6a33969
জাইফ্র্যাক্স

1
আমি এতে আরও কিছু কাজ রেখেছি
Zyphrax

15

বিকল্প হিসাবে, কোকোপডস ব্যবহারকারীদের জন্য, এটি আপনার পোডফাইলে নির্দিষ্ট প্রতিটি টার্গেটের জন্য একটি 'স্বীকৃতি' প্লিস্ট তৈরি করবে যা লক্ষ্যমাত্রায় ব্যবহৃত প্রতিটি পডের জন্য লাইসেন্সের বিশদ বিশিষ্ট রয়েছে (ধরে নিবেন পোড স্পেসে বিশদটি নির্দিষ্ট করা হয়েছে)। আইওএস সেটিংস বান্ডেলে যুক্ত করা যায় এমন সম্পত্তি তালিকা ফাইল।

এই ডেটা রূপান্তরিত করতে এবং পরিবর্তে অ্যাপ্লিকেশনটির মধ্যে প্রদর্শিত হওয়ার অনুমতি দেওয়ার জন্য এমন প্রকল্পগুলি রয়েছে:

https://github.com/CocoaPods/cocoapods-install-metadata

https://github.com/cocoapods/CPDAcknowledgements


3
এটিতে এখানে আরও তথ্য: github.com/CocoaPods/ কোকোপডস / উইকি / স্বীকৃতি
ওরেেন

সচেতন থাকুন যে কোকোপডস উইকির ইনপুট ফাইলের নাম পডস-অ্যাকোলেজমেন্টস.প্লাইস্ট হিসাবে রয়েছে তবে ফাইলটি আসলে পডস-অলকোশনেস.প্লাইস্ট (ছোট ছোট 'এ') হিসাবে উত্পন্ন হয়েছে। ভুল কেস ব্যবহার করে পড ইনস্টলটি ভেঙে যাবে যদি আপনি ফাইলটি কেস-সংবেদনশীল করেন।
কেলার

14

আমি ভেবেছিলাম যে আমি আমার পুনরাবৃত্তিটি মিশ্রণে শানের দুর্দান্ত অজগর কোডটিতে ফেলে দেব। মূল পার্থক্য হ'ল এটি একটি ইনপুট ডিরেক্টরি নেয় এবং তারপরে পুনরাবৃত্তভাবে এটি লিসেনসি ফাইলগুলির জন্য অনুসন্ধান করে। এটি LICENSE ফাইলের পিতামহিত ডিরেক্টরি থেকে শিরোনামের মানটি গ্রহণ করে, তাই এটি কোকোপডগুলির সাথে ভাল খেলে।

অনুপ্রেরণা ছিল আমার অ্যাপ্লিকেশনটির আইনী বিভাগটি পোড যুক্ত বা সরিয়ে দেওয়ার সাথে সাথে স্বয়ংক্রিয়ভাবে আপ টু ডেট রাখার জন্য একটি বিল্ড স্ক্রিপ্ট তৈরি করা। এটি লাইসেন্স থেকে বাধ্যতামূলক নিউলাইনগুলি সরিয়ে দেওয়ার মতো আরও কিছু জিনিস করে যাতে অনুচ্ছেদগুলি ডিভাইসগুলিতে কিছুটা আরও ভাল দেখায়।

https://github.com/carloe/LicenseGenerator-iOS

এখানে চিত্র বর্ণনা লিখুন


8

আমি @ জোসেফ এইচ স্ক্রিপ্ট দ্বারা অনুপ্রাণিত রুবিতে একটি স্ক্রিপ্ট তৈরি করেছি। এই সংস্করণটি, আমার নিজের মতামত অনুসারে পৃথক ওপেন সোর্স প্রকল্পগুলিকে আরও ভালভাবে উপস্থাপন করবে।

Wisit আইওএস-AcknowledgementGeneratorস্ক্রিপ্ট এবং নমুনা প্রকল্পটি ডাউনলোড করতে যান

এটি আপনার অ্যাপ্লিকেশনটিতে স্বীকৃতিগুলির মতো দেখাবে:

Settings.app Settings.bundle প্রাপ্তি স্বীকার এখানে চিত্র বর্ণনা লিখুন


2

এটি জোসেফএইচ উত্তরের একটি সংযোজন। (আমার কাছে মন্তব্য করার মতামত নেই)

পার্ল স্ক্রিপ্টে আমাকে <key>StringsTable</key> <string>Acknowledgements</string> সর্বশেষে উপরে যেতে হয়েছিল </dict>

এই পরিবর্তনের আগে, অ্যাপ্লিকেশনটির স্বীকৃতি বিভাগটি খালি ছিল এবং এক্সকোড ফলাফল স্বীকৃতিগুলি.পিস্টটি পড়তে পারেনি। ("ডেটাটি পড়া যায়নি কারণ এটি সঠিক ফর্ম্যাটে নেই" ")

(এক্সকোড 6.3.2 আইওএস 8.3)


2

এই থ্রেডে শান থেকে পাইথন স্ক্রিপ্টটি কাজ করে। তবে প্রাথমিক কয়েকটি বিষয় জানতে হবে।

  1. এক্সকোডে, আপনার প্রকল্পের নামে প্রকল্প নেভিগেটর গাছের শীর্ষে ডান ক্লিক করুন এবং একটি নতুন গোষ্ঠী যুক্ত করুন। এটি আপনার প্রকল্পে একটি নতুন ফোল্ডার রাখে।
  2. শানের স্ক্রিপ্টটি সেখানে যুক্ত করুন এবং এটি সংরক্ষণ করুন তা নিশ্চিত করুন: স্বীকৃতি.পি।
  3. আপনি আপনার সিস্টেমে পাইথন ইনস্টল করেছেন তা নিশ্চিত করুন। আমি একটি ম্যাক ব্যবহার করছি।
  4. আপনি যে ফোল্ডারে তৈরি করেছেন তাতে একটি প্রথম লাইসেন্স ফাইল যুক্ত করুন 1. ফাইলে একটি শব্দ থাকার মতোই এটি সহজ করুন, বলুন: পরীক্ষা করা। এটি টেস্ট 1.লিসেন্স হিসাবে ফোল্ডারে সংরক্ষণ করুন।
  5. উপরের জোসেফএইচ অনুসারে আপনার সেটিংস.বান্ডেল সেট আপ করুন।
  6. আপনি নিজের তৈরি ফোল্ডারে সিডি করতে আপনার টার্মিনাল অ্যাপটি ব্যবহার করুন।
  7. স্ক্রিপ্ট চালান। প্রকার: পাইথন স্বীকৃতি.পি। যদি আপনি কোনও ত্রুটি না পান তবে এটি সরাসরি টার্মিনাল প্রম্পটে ফিরে আসবে। বিল্ডে কোনও রান স্ক্রিপ্ট যুক্ত করার আগে এগুলি করুন।
  8. আপনার অ্যাপ তৈরি করুন এবং রান করুন run
  9. আইফোন হোম বোতামে ডাবল আলতো চাপুন এবং সেটিংস মুছুন। সেটিংস পুনরায় আরম্ভ না হওয়া পর্যন্ত এটি প্রায়শই আপনার অ্যাপের জন্য সেটিংস পরিবর্তনটি গ্রহণ করে না।
  10. সেটিংস পুনঃসূচনা করার পরে, আপনার অ্যাপ্লিকেশন এ যান এবং এটি কাজ করে কিনা তা দেখুন।
  11. যদি এটি সমস্ত কাজ করে তবে আস্তে আস্তে আরও লাইসেন্সের ফাইল যুক্ত করুন তবে প্রতিবার স্ক্রিপ্টটি চালান। ফাইলের নির্দিষ্ট অক্ষরগুলির কারণে আপনি স্ক্রিপ্টটি চালাতে ত্রুটিগুলি পেতে পারেন তাই ডিবাগ করার সহজ উপায় হ'ল একটি ফাইল যুক্ত করা, স্ক্রিপ্ট চালানো, এটি কাজ করে কিনা এবং দেখুন। অন্যথায় .license ফাইলের বাইরে কোনও বিশেষ অক্ষর সম্পাদনা করুন।
  12. উপরের নির্দেশাবলী অনুসারে আমি রান বিল্ড স্ক্রিপ্টের কাজ পাইনি। তবে আপনি প্রায়শই .lense ফাইলগুলি পরিবর্তন না করে থাকলে এই প্রক্রিয়াটি ঠিকঠাক কাজ করে।

1

অ্যাক অ্যাক: স্বীকৃতি প্লিস্ট জেনারেটর
কিছুক্ষণ আগে আমি পাইথন স্ক্রিপ্ট তৈরি করেছি যা লাইসেন্স ফাইলগুলির জন্য স্ক্যান করে এবং একটি দুর্দান্ত স্বীকৃতি প্লাস্ট তৈরি করে যা আপনি আপনার সেটিংস.প্লাইস্টে ব্যবহার করতে পারেন। এটি আপনার জন্য অনেক কাজ করে।

https://github.com/Building42/AckAck

বৈশিষ্ট্য

  • কার্থেজ এবং কোকোপডস ফোল্ডারগুলি সনাক্ত করে
  • কাস্টম লাইসেন্সের জন্য বিদ্যমান প্লাস্টিকগুলি সনাক্ত করে
  • অপ্রয়োজনীয় নতুন লাইন এবং লাইন ব্রেকগুলি সরিয়ে লাইসেন্স পাঠ্য সাফ করে
  • অনেকগুলি কাস্টমাইজেশন বিকল্প সরবরাহ করে (দেখুন --help বিশদটি দেখুন)
  • পাইথন ভি 2 এবং ভি 3 উভয় সমর্থন করে

ইনস্টল করুন

wget https://raw.githubusercontent.com/Building42/AckAck/master/ackack.py
chmod +x ackack.py

চালান

./ackack.py

স্ক্রিনশট

প্রাপ্তি স্বীকার

উন্নতির জন্য যদি আপনার কাছে পরামর্শ থাকে তবে নির্দ্বিধায় কোনও সমস্যা পোস্ট করুন বা গিটহাবের জন্য অনুরোধটি টানুন!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.