iOS सेटिंग बंडल में लाइसेंस अनुभाग जोड़ने का सबसे अच्छा तरीका है


116

मेरा iOS एप्लिकेशन अपाचे 2.0 और इसी तरह के लाइसेंस के तहत लाइसेंस प्राप्त कई तृतीय पक्ष घटकों का उपयोग करता है, जिसमें मुझे पाठ के विभिन्न बिट्स, इस तरह की चीजों को शामिल करने की आवश्यकता होती है:

* 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.

सेटिंग्स बंडल में 'लाइसेंस' सबंट्री के तहत यह जानकारी डालने के लिए एक उचित मिसाल दी जा रही है (आईपैड फेसबुक, पेज, कीनोट, नंबर और विकिपनियन सभी ऐसा करने लगते हैं)।

मैं वास्तव में उसी को प्राप्त करने के लिए थोड़ा संघर्ष कर रहा हूं; मुझे लाइन से टेक्स्ट अप लाइन को विभाजित करने और एक समय में एक लाइन में xcode में प्रवेश करने की आवश्यकता प्रतीत होती है (और xcode4 को लगता है कि जब प्लेस्ट्स को संपादित किया जा रहा है) एक दुर्घटनाग्रस्त समस्या है।

ऐसा लगता है कि इस तरह की चीज लगभग निश्चित रूप से करने के लिए एक स्क्रिप्ट है, या इसे करने के लिए कुछ सरल तरीका है जो मैंने याद किया है।

जवाबों:


192

मुझे लगता है कि अब मैं उन सभी समस्याओं को हल करने में कामयाब हो गया हूं जो मैं चला रहा था।

  • लाइसेंस धारण करने के लिए समूह तत्व शीर्षकों का उपयोग करना सबसे अच्छा लगता है (यह वही है जो Apple iWork ऐप्स में करता है)। हालाँकि, इनकी लंबाई पर एक सीमा होती है (और मुझे अभी तक यह पता नहीं चला है कि सीमा क्या है), इसलिए आपको प्रत्येक लाइसेंस फ़ाइल को कई स्ट्रिंग्स में तोड़ने की आवश्यकता है।
  • आप इन के भीतर एक शाब्दिक कैरिज रिटर्न (यानी अन्यथा के रूप में जाना जा सकता है, एम, \ r या 0x0) द्वारा एक लाइन ब्रेक बना सकते हैं।
  • सुनिश्चित करें कि किसी भी शाब्दिक मध्य-पाठ को शामिल न करें। यदि आप करते हैं, तो फ़ाइल में कुछ या सभी तारों को चुपचाप अनदेखा कर दिया जाएगा।

मुझे एक सुविधा स्क्रिप्ट मिली है जिसका उपयोग मैं .plist और .strings फ़ाइल बनाने में मदद करने के लिए करता हूं, जो नीचे दिखाई गई है।

इसके प्रयेाग के लिए:

  1. अपनी परियोजना के तहत एक 'लाइसेंस' निर्देशिका बनाएं
  2. उस निर्देशिका में स्क्रिप्ट रखो
  3. प्रत्येक लाइसेंस को उस डायरेक्टरी में रखें, जो फाइल के साथ एक फाइल है
  4. लाइसेंस पर कोई आवश्यक सुधार करना। (जैसे। लाइनों की शुरुआत में अतिरिक्त रिक्त स्थान हटा दें, यह सुनिश्चित करें कि कोई रेखा नहीं है मध्य-पैरा टूट जाता है)। प्रत्येक पैराग्राफ के बीच में एक रिक्त रेखा होनी चाहिए
  5. लाइसेंस निर्देशिका में बदलें और स्क्रिप्ट चलाएँ
  6. अपनी सेटिंग्स को संपादित करें 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। निम्नलिखित जानकारी जोड़ें:

यहां छवि विवरण दर्ज करें

FilenamePlist कि इस स्क्रिप्ट द्वारा बनाया गया था करने के लिए महत्वपूर्ण बिंदुओं। आप titleजो चाहते हैं उसे बदल सकते हैं।

बनाएँ समय पर स्क्रिप्ट निष्पादित करें

इसके अलावा, यदि आप चाहते हैं कि जब भी आप अपनी परियोजना का निर्माण करें, तो आप इस स्क्रिप्ट को अपने लक्ष्य में जोड़ सकते हैं:

  1. अपनी परियोजना फ़ाइल पर जाएँ
  2. लक्ष्य का चयन करें
  3. बिल्ड चरण टैब पर क्लिक करें
  4. उस फलक के निचले दाएं कोने में, 'बिल्ड चरण जोड़ें' पर क्लिक करें
  5. 'रन स्क्रिप्ट जोड़ें' चुनें
  6. अपनी स्क्रिप्ट के लिए अपनी पर्ल स्क्रिप्ट को सेक्शन में खींचें और छोड़ें। कुछ इस तरह से देखने के लिए संशोधित करें:
  1. cd $SRCROOT/licenses( $SRCROOTआपकी परियोजना की जड़ को इंगित करता है)
  2. ./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);
}

1
क्या शानदार विचार है! मैंने इसे मैन्युअल रूप से करना शुरू कर दिया इससे पहले कि मुझे एहसास हुआ कि मुझे एक स्वचालित समाधान की आवश्यकता है, विशेष रूप से ड्रैकॉनियन समूह शीर्षक लंबाई सीमा के कारण।
हिल्टन कैंपबेल

9
देखने के लिए एक बात: "फ़ाइलनाम" कुंजी का प्रदर्शन रूप है। वास्तविक कुंजी "फ़ाइल" है। यदि बच्चा फलक दिखाई नहीं दे रहा है, तो राइट-क्लिक करें और "रॉ कीज / वेल्यूज दिखाएं" चुनें और सुनिश्चित करें कि कुंजी का नाम "फाइल" है।
अटिकुस

10
यह शानदार है, धन्यवाद। मैंने रन स्क्रिप्ट ब्लॉक में 'cd' $ SRCROOT / लाइसेंस / "का उपयोग किया है जो कि एक प्रोजेक्ट पर काम करने वाले कई लोगों के लिए थोड़ा बेहतर काम करता है।
क्रिस

9
यदि आप iOS7 के साथ इसका उपयोग कर रहे हैं तो devforums.apple.com/message/894791#894791 पढ़ें । विशेष रूप से आपको सामान्य दिखने के लिए इसे पाने के लिए <key> शीर्षक </ key> से <key> FooterText </ key> बदलना पड़ सकता है।
एसिलीवर

2
इसे बाल फलक कैसे बनाया जाए: पसंद आइटम के अंदर आइटम 0 बनाएँ। ऐसा लगता है कि आप प्रकार के रूप में चाइल्ड पेन का चयन नहीं कर सकते हैं, लेकिन आप जो करते हैं वह आइटम 0 (आइटम 0 का सबमिट) के तहत एक आइटम बनाता है और उस पहले आइटम में कुंजी "टाइप" है। इसे आसान बनाने के लिए, इस पर राइट क्लिक करें और Show Raw Keys / Values ​​चुनें। आप PSChildPaneSpecifier होने के लिए टाइप का मान सेट करना चाहते हैं। एक बार जब आप शो रॉ कीज / वैल्यू को अनसेट करते हैं, तो वह आइटम 0 के नाम पर भी चाइल्ड पेन कहेगी, यहां तक ​​कि "इट्स 0 (चाइल्ड पेन -)"। ये वो है जो तुम चाहते हो।
मार्क

36

यहाँ वही समाधान है जो @JosephH प्रदान करता है (अनुवाद के बिना), लेकिन पायथन में किसी ऐसे व्यक्ति के लिए किया जाता है जो पर्ल के लिए अजगर पसंद करता है

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')यूनिकोड लाइसेंस के लिए।
user2821144

धन्यवाद! मैंने इस पर आधारित एक नया संस्करण बनाया है जो कार्टाज के लिए बहुत अच्छा है। यह लाइसेंस पाठ से कुछ अनावश्यक नईलाइनों को भी हटा देता है। इसे देखें: gist.github.com/Zyphrax/0d015c618d46093b4f815e62a6a33969
Zyphrax

1
मैंने इसमें थोड़ा और काम किया है, देखें: github.com/Building42/AckAck
Zyphrax

15

एक विकल्प के रूप में, कोकोआपोड्स का उपयोग करने वालों के लिए, यह आपके पॉडफाइल में निर्दिष्ट प्रत्येक लक्ष्य के लिए एक 'पावती' पटल उत्पन्न करेगा जिसमें उस लक्ष्य में प्रयुक्त प्रत्येक पॉड के लिए लाइसेंस विवरण होता है (यह विवरण पॉड युक्ति में निर्दिष्ट किया गया है)। संपत्ति सूची फ़ाइल जिसे आईओएस सेटिंग्स बंडल में जोड़ा जा सकता है।

इस डेटा को बदले और एप्लिकेशन के भीतर प्रदर्शित करने की अनुमति देने की भी परियोजनाएँ चल रही हैं:

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

https://github.com/cocoapods/CPDAcknowledgements


3
इसके बारे में अधिक जानकारी यहां दी गई है: github.com/CocoaPods/CocoaPods/wiki/Acknowledgements
ओरेन

विदित हो कि कोकोपोड्स विकी का इनपुट फ़ाइल नाम पॉड्स-एअमाइलेजमेंट्स.प्लिस्ट के रूप में है, लेकिन फाइल वास्तव में पॉड्स-एक्सेलेमेंट्स.प्लास्ट (लोअरकेस 'ए') के रूप में उत्पन्न होती है। यदि आप फ़ाइल सिस्टम केस-संवेदी है, तो गलत केस का उपयोग करने से पॉड इंस्टॉल टूट जाएगा।
केलर

14

मैंने सोचा कि मैं मिक्स में शॉन के भयानक अजगर कोड पर अपना पुनरावृति फेंक दूंगा। मुख्य अंतर यह है कि यह एक इनपुट डायरेक्टरी लेता है और फिर इसे LICENSE फ़ाइलों के लिए पुन: खोजता है। यह LICENSE फ़ाइल की मूल निर्देशिका से शीर्षक मान प्राप्त करता है, इसलिए यह कोकोपोड्स के साथ अच्छा खेलता है।

प्रेरणा यह थी कि मैं अपने ऐप के कानूनी अनुभाग को स्वचालित रूप से अद्यतित रखने के लिए एक बिल्ड स्क्रिप्ट तैयार करूं क्योंकि मैं पॉड्स जोड़ूं या हटाऊं। यह कुछ अन्य चीजें भी करता है जैसे कि लाइसेंस से जबरन हटाए गए नए लिंक ताकि पैराग्राफ उपकरणों पर थोड़ा बेहतर दिखें।

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

यहां छवि विवरण दर्ज करें


8

मैंने @JosephH स्क्रिप्ट से प्रेरित रूबी में एक स्क्रिप्ट बनाई। यह संस्करण, मेरी राय में, व्यक्तिगत रूप से खुले स्रोत परियोजनाओं का बेहतर प्रतिनिधित्व करेगा।

Wisit iOS-Acknowledgementeneratorस्क्रिप्ट और सैंपल प्रोजेक्ट को डाउनलोड करने के लिए ।

यह वही है जो आपके ऐप में मान्य होगा:

Settings.app Settings.bundle स्वीकृतियाँ यहां छवि विवरण दर्ज करें


2

यह यूसुफ के जवाब का एक परिशिष्ट है। (मैं टिप्पणी करने के लिए प्रतिनिधि नहीं है)

मुझे <key>StringsTable</key> <string>Acknowledgements</string> लास्ट से ऊपर जाना था </dict> पर्ल स्क्रिप्ट में ।

इस संशोधन से पहले, ऐप में पावती अनुभाग खाली था और XCode परिणामस्वरूप Acknowledgements.plist नहीं पढ़ सका। ("डेटा पढ़ा नहीं जा सकता क्योंकि यह सही प्रारूप में नहीं है।")

(XCode 6.3.2 iOS 8.3)


2

इस सूत्र में सीन से पाइथन लिपि काम करती है। लेकिन जानने के लिए कुछ बुनियादी बातें हैं।

  1. Xcode में, अपने प्रोजेक्ट के नाम पर प्रोजेक्ट नेविगेटर ट्री के शीर्ष पर राइट क्लिक करें, और एक नया समूह जोड़ें। यह आपके प्रोजेक्ट में एक नया फ़ोल्डर डालता है।
  2. वहां सीन स्क्रिप्ट जोड़ें और इसे इस रूप में सहेजना सुनिश्चित करें: Acknowledgements.py।
  3. सुनिश्चित करें कि आपके पास पायथन आपके सिस्टम पर स्थापित है। मैं एक मैक का उपयोग कर रहा हूँ।
  4. 1. आपके द्वारा बनाए गए फ़ोल्डर में पहला लाइसेंस फ़ाइल जोड़ें। इसे सरल बनाएं जैसे फ़ाइल में केवल एक शब्द है, कहो: परीक्षण। इसे फ़ोल्डर में Test1.license के रूप में सहेजें।
  5. ऊपर दिए गए जोसेफ के अनुसार अपनी Settings.bundle सेट करें।
  6. आपके द्वारा बनाए गए फ़ोल्डर में सीडी के लिए अपने टर्मिनल ऐप का उपयोग करें।
  7. स्क्रिप्ट चलाएं। प्रकार: अजगर Acknowledgements.py। यदि आपको कोई त्रुटि नहीं मिलती है तो यह टर्मिनल प्रॉम्प्ट पर वापस आ जाएगी। बिल्ड में किसी भी रन स्क्रिप्ट को जोड़ने से पहले यह सब करें।
  8. अपना ऐप बनाएं और चलाएं।
  9. IPhone होम बटन पर डबल टैप करें और सेटिंग्स को मार दें। जब तक सेटिंग्स पुनः आरंभ नहीं हो जाती, तब तक यह अक्सर आपके ऐप के लिए सेटिंग में बदलाव नहीं करता है।
  10. सेटिंग्स को पुनरारंभ करने के बाद, अपने ऐप पर जाएं और देखें कि क्या यह काम करता है।
  11. अगर वह सब काम कर गया, तो धीरे-धीरे अधिक लाइसेंस फाइलें जोड़ें, लेकिन हर बार स्क्रिप्ट चलाएं। आप फ़ाइल में कुछ वर्णों के कारण स्क्रिप्ट को चलाने में त्रुटियां प्राप्त कर सकते हैं, इसलिए डिबग करने का आसान तरीका एक फ़ाइल जोड़ना है, स्क्रिप्ट चलाना है, देखें कि क्या यह काम करता है और आगे बढ़ें। .Seense फ़ाइल से बाहर किसी भी विशेष वर्ण को संपादित करें।
  12. मुझे ऊपर दिए निर्देशों के अनुसार रन बिल्ड स्क्रिप्ट काम नहीं मिला। लेकिन यह प्रक्रिया ठीक काम करती है यदि आप .license फ़ाइलों को अक्सर नहीं बदल रहे हैं।

1

Ack Ack: पावती जनरेटर
A कुछ समय पहले मैंने एक पायथन स्क्रिप्ट बनाई है, जो लाइसेंस फ़ाइलों के लिए स्कैन करती है और एक अच्छा Acknowledgements प्लिस्ट बनाती है जिसे आप अपने Settings.plist में उपयोग कर सकते हैं। यह आपके लिए बहुत काम करता है।

https://github.com/Building42/AckAck

विशेषताएं

  • कार्टाज और कोकोआ फोल्डर का पता लगाता है
  • कस्टम लाइसेंस के लिए मौजूदा पौधों का पता लगाता है
  • अनावश्यक नई लाइनों और लाइन ब्रेक को हटाकर लाइसेंस ग्रंथों को साफ करता है
  • कई अनुकूलन विकल्प प्रदान करता है ( --helpविवरण के लिए देखें)
  • पायथन v2 और v3 दोनों का समर्थन करता है

इंस्टॉल

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

Daud

./ackack.py

स्क्रीनशॉट

स्वीकृतियाँ

यदि आपके पास सुधार के लिए सुझाव हैं, तो बेझिझक किसी मुद्दे को पोस्ट करें या GitHub पर अनुरोध करें!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.