আমি আইফোন অ্যাপ্লিকেশনটির সাথে ফাইলের প্রকারগুলি কীভাবে সংযুক্ত করব?


318

আপনার আইফোন অ্যাপ্লিকেশনটিকে ফাইলের সাথে সংযুক্ত করার বিষয়ে the

ইন এই তথ্যপূর্ণ প্রশ্ন আমি শিখেছি যে অ্যাপস কাস্টম URL প্রোটোকল সঙ্গে যুক্ত করা যেতে পারে।

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

এটি আমাকে প্রশ্নের দিকে নিয়ে যায়: সাফারি বা মেলের মতো সিস্টেম অ্যাপস যুক্ত অ্যাপ্লিকেশনগুলি বেছে নেওয়ার জন্য এই সিস্টেমটি প্রয়োগ করেছে, বা তারা আগের মতো কিছুই করবে না?

উত্তর:


408

আইফোন ওএস 3.2 এর সাথে ফাইল টাইপ হ্যান্ডলিং নতুন এবং এটি ইতিমধ্যে বিদ্যমান কাস্টম ইউআরএল স্কিমগুলির চেয়ে পৃথক। আপনি নির্দিষ্ট দস্তাবেজের প্রকারগুলি পরিচালনা করতে আপনার অ্যাপ্লিকেশনটি নিবন্ধভুক্ত করতে পারেন এবং যে কোনও অ্যাপ্লিকেশন যা কোনও নথি নিয়ামক ব্যবহার করে তা আপনার নিজের অ্যাপ্লিকেশনে এই নথিগুলির প্রসেসিং বন্ধ করতে পারে।

উদাহরণস্বরূপ, আমার অ্যাপ্লিকেশন অণু (যার জন্য উত্স কোড উপলভ্য) ইমেলের মাধ্যমে বা অন্য কোনও সমর্থিত অ্যাপ্লিকেশনটিতে প্রাপ্ত হলে .pdb এবং .pdb.gz ফাইলের প্রকারগুলি পরিচালনা করে।

সহায়তা নিবন্ধকরণ করতে আপনার আপনার তথ্য.পালিস্টে নীচের মতো কিছু থাকতে হবে:

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeIconFiles</key>
        <array>
            <string>Document-molecules-320.png</string>
            <string>Document-molecules-64.png</string>
        </array>
        <key>CFBundleTypeName</key>
        <string>Molecules Structure File</string>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
        <key>LSHandlerRank</key>
        <string>Owner</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.sunsetlakesoftware.molecules.pdb</string>
            <string>org.gnu.gnu-zip-archive</string>
        </array>
    </dict>
</array>

দুটি চিত্র সরবরাহ করা হয়েছে যা মেল এবং নথি প্রদর্শন করতে সক্ষম অন্যান্য অ্যাপ্লিকেশনগুলিতে সমর্থিত ধরণের আইকন হিসাবে ব্যবহৃত হবে। LSItemContentTypesকী আপনি (UTIs) ইউনিফর্ম প্রকার শনাক্তকারীগুলি একটি অ্যারের যে আপনার প্রয়োগ খুলতে পারে প্রদান করতে দেয়। সিস্টেম-সংজ্ঞায়িত ইউটিআই-র তালিকার জন্য, অ্যাপলের ইউনিফর্ম টাইপ আইডেন্টিফায়ার রেফারেন্স দেখুন । ইউটিআই-তে আরও বিশদটি অ্যাপলের ইউনিফর্ম টাইপ আইডেন্টিফায়ার ওভারভিউতে পাওয়া যাবে । এই গাইডগুলি ম্যাক বিকাশকারী কেন্দ্রে থাকে, কারণ এই দক্ষতা ম্যাক থেকে শুরু করে দেওয়া হয়েছে।

উপরের উদাহরণটিতে ব্যবহৃত ইউটিআইগুলির একটি সিস্টেম-সংজ্ঞায়িত ছিল, তবে অন্যটি ছিল অ্যাপ্লিকেশন-নির্দিষ্ট ইউটিআই। অ্যাপ্লিকেশন-নির্দিষ্ট ইউটিআই রফতানি করা দরকার যাতে সিস্টেমের অন্যান্য অ্যাপ্লিকেশনগুলিকে এটি সম্পর্কে সচেতন করা যায়। এটি করার জন্য, আপনি নিম্নলিখিত হিসাবে আপনার তথ্য.পলিতে একটি বিভাগ যুক্ত করবেন:

<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.plain-text</string>
            <string>public.text</string>
        </array>
        <key>UTTypeDescription</key>
        <string>Molecules Structure File</string>
        <key>UTTypeIdentifier</key>
        <string>com.sunsetlakesoftware.molecules.pdb</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <string>pdb</string>
            <key>public.mime-type</key>
            <string>chemical/x-pdb</string>
        </dict>
    </dict>
</array>

এই নির্দিষ্ট উদাহরণটি com.sunsetlakesoftware.molecules.pdbMIME টাইপের সাথে সম্পর্কিত .pdb ফাইল এক্সটেনশান সহ ইউটিআই রফতানি করে chemical/x-pdb

এটি ঠিক জায়গায় রাখার সাথে সাথে, আপনার অ্যাপ্লিকেশন ইমেলগুলিতে বা সিস্টেমে অন্যান্য অ্যাপ্লিকেশন থেকে সংযুক্ত নথিগুলি পরিচালনা করতে সক্ষম হবে। মেল-এ আপনি কোনও অ্যাপ্লিকেশনগুলির একটি তালিকা আনতে ট্যাপ-হোল্ড করতে পারেন যা কোনও বিশেষ সংযুক্তি খুলতে পারে।

সংযুক্তিটি খোলার পরে, আপনার অ্যাপ্লিকেশন শুরু হবে এবং আপনার -application:didFinishLaunchingWithOptions:অ্যাপ্লিকেশন প্রতিনিধি পদ্ধতিতে আপনাকে এই ফাইলটির প্রসেসিং পরিচালনা করতে হবে । এটি প্রদর্শিত হয় যে মেল থেকে এই পদ্ধতিতে লোড করা ফাইলগুলি কোন ইমেল বাক্সে এসেছিল তার সাথে সম্পর্কিত একটি সাব-ডাইরেক্টরির অধীনে আপনার অ্যাপ্লিকেশনটির ডকুমেন্টস ডিরেক্টরিতে অনুলিপি করা হয়েছে following

NSURL *url = (NSURL *)[launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];

নোট করুন যে কাস্টম ইউআরএল স্কিমগুলি পরিচালনা করার জন্য আমরা একই পন্থাটি ব্যবহার করেছি। নীচের মত কোড ব্যবহার করে আপনি ফাইলের URL গুলি অন্যদের থেকে আলাদা করতে পারেন:

if ([url isFileURL])
{
    // Handle file being passed in
}
else
{
    // Handle custom URL scheme
}

9
এটি লক্ষ্য করা উচিত যে -application:didFinishLaunchingWithOptions:অ্যাপ্লিকেশনটিতে কেবলমাত্র ডেকে ডাকা হয় যদি আপনার অ্যাপ্লিকেশনটি কোনও ফাইল পরিচালনা করার জন্য ব্যাকগ্রাউন্ড না করা হয়।
স্মারকগুলি

3
কুইকলুক এড়ানো: raywenderlich.com/1980/…
TheLearner

4
আমাদের - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)urlআইওএস 4+
দিমিত্রি

1
'সিএফবান্ডেলটাইপ এক্সটেনশনস' কী সম্পর্কে? আপনার স্নিপেট সেট করে নিবে বলে মনে হয় না। এটি প্রয়োজন হয় না?
ব্রাম

3
আমি এখানে এবং অন্যান্য জায়গাগুলিতে প্রদত্ত সমস্ত পদ্ধতিটি চেষ্টা করেছি, তবে আমি এখনও পিএনজি ফাইল খোলার জন্য লড়াই করছি। আমি আইওএস নিয়ে কাজ করছি some. কিছু জায়গায় তারা বলছে যে এই সমস্যাটি আইওএস starts দিয়ে শুরু হয় এটি কি সত্য? আইওএস 7 দিয়ে আমরা "ওপেন ইন" ডায়ালগ বক্সে পিএনজি ফাইলগুলি খুলতে পারি না?
কুমার আদিত্য

24

ব্র্যাডের দুর্দান্ত উত্তরের পাশাপাশি, আমি খুঁজে পেয়েছি যে (কমপক্ষে iOS 4.2.1 এ) মেল অ্যাপ্লিকেশন থেকে কাস্টম ফাইলগুলি খোলার সময়, সংযুক্তিটি আগে খোলা থাকলে আপনার অ্যাপটি বরখাস্ত করা হয় না বা অবহিত করা হয় না। "ওপেন করুন ..." পপআপ উপস্থিত হয়, তবে কিছুই করে না।

এটি ইনবক্স ডিরেক্টরি থেকে ফাইলটি সরানোর (পুনরায়) দ্বারা স্থির করা হয়েছে বলে মনে হচ্ছে। একটি নিরাপদ দৃষ্টিভঙ্গি উভয়ই মনে হয় (পুনরায়) ফাইলটি খোলার সাথে সাথে সরানো ( -(BOOL)application:openURL:sourceApplication:annotation:পাশাপাশি) ডকুমেন্টস / ইনবক্স ডিরেক্টরিটি সমস্ত আইটেমগুলি সরিয়ে যেমন: ইন applicationDidBecomeActive:। পূর্ববর্তী আমদানি ক্রাশ হওয়ার কারণে বা বাধাগ্রস্ত হওয়ার ক্ষেত্রে, শেষ পর্যায়ে আবার অ্যাপটিকে পরিষ্কার অবস্থায় পাওয়ার প্রয়োজন হতে পারে get


6
আমি এই আচরণ দেখতে পাচ্ছি না। যদি আমার অ্যাপ্লিকেশনটি ব্যাকগ্রাউন্ড -(BOOL)application:openURL:sourceApplication:annotation:হয় তবে সর্বদা বলা হয়, এমনকি এমন সংযুক্তিগুলির জন্যও যা ইতিমধ্যে খোলা হয়েছে। প্রতিটি অতিরিক্ত সময় সংযুক্তিটি খোলার পরে, একটি নম্বর ফাইলের সাথে সংযুক্ত হয় এবং অনন্য হিসাবে বাড়ানো হয় - test.text, test-1.txt, test-2.txt, ইত্যাদি
স্মৃতি

আমার ইনবক্স ডিরেক্টরিটি খালি, তবে তবুও সাফারিতে আপনি যে কথা বলছেন তাতে আমার প্রতিক্রিয়াহীন "ওপেন ইন" বোতামটি আছে। কয়েক বছর আগে, আমার অ্যাপটি ঠিকঠাক কাজ করছিল, তবে হঠাৎ এটি কাজ করা বন্ধ করে দিয়েছে। আমি সন্দেহ করি অ্যাপল সাফারিতে কিছু পরিবর্তন করেছে।
ব্রাম

18

বড় সতর্কতা: নিশ্চিত করুন যে আপনার এক্সটেনশনটি ইতিমধ্যে কিছু মাইম টাইপের সাথে আবদ্ধ নয়।

আমরা আমাদের কাস্টম ফাইলের জন্য '.icz' এক্সটেনশনটি মূলতঃ কখনও কখনও ব্যবহার করি এবং সাফারি আপনাকে কখনই এগুলি খুলতে দেয় না "সাফারি এই ফাইলটি খুলতে পারে না" saying উপরের ইউটি স্টাফ দিয়ে আমরা কী করেছি বা চেষ্টা করেছি তা বিবেচনা করেই নয়।

অবশেষে আমি বুঝতে পেরেছিলাম যে কিছু ইউটি * সি ফাংশন রয়েছে যা আপনি বিভিন্ন জিনিস অন্বেষণ করতে পারেন এবং .icz সঠিক উত্তর দেয় (আমাদের অ্যাপ্লিকেশন):

অ্যাপে লোড শীর্ষে ছিল, কেবল এটি করুন ...

NSString * UTI = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, 
                                                                   (CFStringRef)@"icz", 
                                                                   NULL);
CFURLRef ur =UTTypeCopyDeclaringBundleURL(UTI);

এবং সেই লাইনের পরে বিরতি দিন এবং দেখুন ইউটিআই এবং ইউআর কী - আমাদের ক্ষেত্রে এটি ছিল আমাদের সনাক্তকারী হিসাবে আমরা চাইছিলাম), এবং বান্ডেল ইউআরএল (ur) আমাদের অ্যাপ্লিকেশনটির ফোল্ডারে নির্দেশ করছে।

তবে ড্রপবক্স আমাদের মাইকের জন্য আমাদের লিঙ্কটি ফিরিয়ে দেয় যা আপনি উদাহরণ দিয়ে পরীক্ষা করে দেখতে পারেন

$ curl -D headers THEURLGOESHERE > /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 27393  100 27393    0     0  24983      0  0:00:01  0:00:01 --:--:-- 28926
$ cat headers
HTTP/1.1 200 OK
accept-ranges: bytes
cache-control: max-age=0
content-disposition: attachment; filename="123.icz"
Content-Type: text/calendar
Date: Fri, 24 May 2013 17:41:28 GMT
etag: 872926d
pragma: public
Server: nginx
x-dropbox-request-id: 13bd327248d90fde
X-RequestId: bf9adc56934eff0bfb68a01d526eba1f
x-server-response-time: 379
Content-Length: 27393
Connection: keep-alive

সামগ্রী-প্রকারটি আমরা যা চাই তা হল। ড্রপবক্স দাবি করে এটি এটি একটি পাঠ্য / ক্যালেন্ডার এন্ট্রি। গ্রেট। তবে আমার ক্ষেত্রে, আমি আমার অ্যাপ্লিকেশনটির মাইম ধরণের মধ্যে পরীক্ষামূলক পাঠ্য / ক্যালেন্ডার ট্রাইড করেছি এবং এটি এখনও কার্যকর হয় না। পরিবর্তে, আমি যখন পাঠ্য / ক্যালেন্ডার মাইমটাইপের জন্য ইউটিআই এবং বান্ডিল url পাওয়ার চেষ্টা করি,

NSString * UTI = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType,
                                                                   (CFStringRef)@"text/calendar", 
                                                                   NULL);

CFURLRef ur =UTTypeCopyDeclaringBundleURL(UTI);

আমি ইউটিআই হিসাবে "com.apple.ical.ics" এবং বান্ডেল URL হিসাবে "... / MobileCoreTypes.bundle /" দেখতে পাচ্ছি see আমাদের অ্যাপ নয়, অ্যাপল। তাই আমি com.apple.ical.ics আমার নিজের পাশাপাশি এলএসআইটেম কনটেন্টটিপগুলিতে এবং রফতানির ইউটিসিফরম্যাটটোতে রাখার চেষ্টা করি, কিন্তু যায় না।

সুতরাং মূলত, অ্যাপল যদি মনে করে যে কোনও সময় তারা কোনও ধরণের ফাইল হ্যান্ডেল করতে চায় (এটি আপনার অ্যাপ্লিকেশনটি লাইভ হওয়ার 10 বছর পরে তৈরি হতে পারে, মনে রাখবেন), আপনাকে এক্সটেনশন পরিবর্তন করতে হবে কারণ তারা কেবল আপনাকে পরিচালনা করতে দেবে না ফাইল টাইপ।


দরকারী সতর্কতার জন্য ধন্যবাদ!
রকসোলিড

0

আমার নিজের অ্যাপ্লিকেশনটির জন্য যে কোনও ধরণের ফাইলের সাথে ডিল করতে, আমি সিএফবান্ডেলডোকামেন্টটাইপগুলির জন্য এই কনফিগারেশনটি ব্যবহার করি:

    <key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeName</key>
            <string>IPA</string>
            <key>LSItemContentTypes</key>
            <array>
                <string>public.item</string>
                <string>public.content</string>
                <string>public.data</string>
                <string>public.database</string>
                <string>public.composite-content</string>
                <string>public.contact</string>
                <string>public.archive</string>
                <string>public.url-name</string>
                <string>public.text</string>
                <string>public.plain-text</string>
                <string>public.source-code</string>
                <string>public.executable</string>
                <string>public.script</string>
                <string>public.shell-script</string>
                <string>public.xml</string>
                <string>public.symlink</string>
                <string>org.gnu.gnu-zip-archve</string>
                <string>org.gnu.gnu-tar-archive</string>
                <string>public.image</string>
                <string>public.movie</string>
                <string>public.audiovisual-​content</string>
                <string>public.audio</string>
                <string>public.directory</string>
                <string>public.folder</string>
                <string>com.apple.bundle</string>
                <string>com.apple.package</string>
                <string>com.apple.plugin</string>
                <string>com.apple.application-​bundle</string>
                <string>com.pkware.zip-archive</string>
                <string>public.filename-extension</string>
                <string>public.mime-type</string>
                <string>com.apple.ostype</string>
                <string>com.apple.nspboard-typ</string>
                <string>com.adobe.pdf</string>
                <string>com.adobe.postscript</string>
                <string>com.adobe.encapsulated-​postscript</string>
                <string>com.adobe.photoshop-​image</string>
                <string>com.adobe.illustrator.ai-​image</string>
                <string>com.compuserve.gif</string>
                <string>com.microsoft.word.doc</string>
                <string>com.microsoft.excel.xls</string>
                <string>com.microsoft.powerpoint.​ppt</string>
                <string>com.microsoft.waveform-​audio</string>
                <string>com.microsoft.advanced-​systems-format</string>
                <string>com.microsoft.advanced-​stream-redirector</string>
                <string>com.microsoft.windows-​media-wmv</string>
                <string>com.microsoft.windows-​media-wmp</string>
                <string>com.microsoft.windows-​media-wma</string>
                <string>com.apple.keynote.key</string>
                <string>com.apple.keynote.kth</string>
                <string>com.truevision.tga-image</string>
            </array>
            <key>CFBundleTypeIconFiles</key>
            <array>
                <string>Icon-76@2x</string>
            </array>
        </dict>
    </array>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.