파일 타입과 iPhone 어플리케이션을 관련짓는 방법
iPhone 앱과 파일 형식을 연관짓는 주제입니다.
이 유익한 질문에서는 앱을 커스텀 URL 프로토콜과 연관지을 수 있다는 것을 배웠습니다.
그것은 거의 1년 전이었고, 그 이후 애플은 한 걸음 더 나아가 앱이 파일 형식과 연관되도록 하는 '문서 지원'을 도입했다.문서에는 알 수 없는 파일 형식이 발견되었을 때 다른 적절한 앱을 실행하도록 앱을 설정하는 방법에 대해 많은 이야기가 있습니다.즉, URL 프로토콜 등록과 같이 앱에 대해 즉시 연결이 작동하지 않습니다.
그러면 Safari나 Mail과 같은 시스템 어플리케이션이 관련 어플리케이션을 선택하기 위해 이 시스템을 구현했는지, 아니면 이전과 같이 아무것도 하지 않는지 의문이 생깁니다.
파일 타입의 처리는, iPhone OS 3.2 에서는 새로운 것으로, 기존의 커스텀 URL 방식과는 다릅니다.응용프로그램을 등록하여 특정 문서 유형을 처리할 수 있으며, 문서 컨트롤러를 사용하는 응용프로그램은 이러한 문서의 처리를 응용프로그램에 인계할 수 있습니다.
예를 들어 소스 코드를 사용할 수 있는 응용 프로그램 분자(Molines)는 이메일 또는 지원되는 다른 응용 프로그램에서 수신된 경우 .pdb 및 .pdb.gz 파일 형식을 처리합니다.
지원을 등록하려면 Info.plist에 다음과 같은 정보가 있어야 합니다.
<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키를 사용하면 응용 프로그램이 열 수 있는 UTI(Uniform Type Identifier) 배열을 제공할 수 있습니다.시스템 정의 UTI 목록은 Apple의 Uniform Type Identifier Reference를 참조하십시오.UTI에 대한 자세한 내용은 Apple의 Uniform Type Identifier Overview를 참조하십시오.이러한 가이드는 Mac 개발자 센터에 상주합니다. 이 기능은 Mac에서 포팅되어 있기 때문입니다.
위의 예에서 사용된 UTI 중 하나는 시스템 정의이며 다른 하나는 애플리케이션 고유의 UTI입니다.시스템상의 다른 애플리케이션이 UTI를 인식할 수 있도록 애플리케이션 고유의 UTI를 내보내야 합니다.이를 수행하려면 다음과 같은 섹션을 Info.plist에 추가합니다.
<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.pdb의 MIME 「.pdb」에 하는 파일.chemical/x-pdb.
이렇게 하면 응용 프로그램은 이메일 또는 시스템상의 다른 응용 프로그램에 첨부된 문서를 처리할 수 있습니다.메일에서 길게 누르면 특정 첨부 파일을 열 수 있는 응용프로그램 목록을 불러올 수 있습니다.
이의 처리는 의 '파일'에서.-application:didFinishLaunchingWithOptions:응용 프로그램 위임 메서드.메일에서 로드된 파일은 어떤 전자 메일 상자에 도착했는지에 해당하는 하위 디렉터리에 있는 응용프로그램의 Documents 디렉토리에 복사되는 것으로 보입니다.다음과 같은 코드를 사용하여 응용 프로그램 위임 메서드 내에서 이 파일의 URL을 얻을 수 있습니다.
NSURL *url = (NSURL *)[launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];
이것은, 커스텀 URL 스킴의 처리에 사용한 것과 같은 어프로치입니다.다음과 같은 코드를 사용하여 파일 URL을 다른 URL과 구분할 수 있습니다.
if ([url isFileURL])
{
// Handle file being passed in
}
else
{
// Handle custom URL scheme
}
Brad의 훌륭한 답변에 덧붙여, 메일 앱에서 커스텀 파일을 열었을 때, 당신의 앱이 기동하지 않거나, 이전에 첨부 파일을 열었을 경우에 통지되지 않는 것을 알게 되었습니다."open with..." 팝업이 나타나지만 아무 것도 하지 않습니다.
이것은, 파일을 Inbox 디렉토리에서 이동(재)하는 것으로 해결되고 있는 것 같습니다.때인 것 .-(BOOL)application:openURL:sourceApplication:annotation: Documents "Documents/Inbox" 참조applicationDidBecomeActive:이전 Import로 인해 크래시가 발생하거나 중단되었을 경우 앱을 클린 상태로 되돌리려면 마지막 catch-all이 필요할 수 있습니다.
큰 경고: 100퍼센트 확장자가 이미 일부 MIME 유형에 연결되어 있지 않은지 확인하십시오.
커스텀 파일에는 기본적으로 확장자 '.icz'를 사용했습니다.Safari에서는 위의 UT를 사용하여 무엇을 했든 시도했든 간에 "Safari는 이 파일을 열 수 없습니다."라고 말하며 파일을 열 수 없습니다.
결국 저는 다양한 것을 탐색하기 위해 사용할 수 있는 UT*C 함수가 몇 가지 있다는 것을 알게 되었고, .icz는 정답을 제시합니다(당사의 앱).
앱에서 맨 위에 로딩이 되었으니, 그냥 이렇게...
NSString * UTI = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,
(CFStringRef)@"icz",
NULL);
CFURLRef ur =UTTypeCopyDeclaringBundleURL(UTI);
이 행 뒤에 break을 붙여 UTI와 ur가 무엇인지 확인합니다.이 경우는, 우리가 원하는 대로의 식별자가 되어, 번들 URL(ur)이 우리 앱의 폴더를 가리키고 있었습니다.
그러나 Dropbox에서 제공하는 MIME 유형은 링크에 대해 다시 확인할 수 있습니다.
$ 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
Content-Type은 델이 원하는 것입니다.Dropbox는 이것이 텍스트/달력 항목이라고 주장합니다.좋습니다. 하지만 제 경우에는 이미 앱의 MIME 유형에 텍스트/캘린더를 넣으려고 했지만 여전히 작동하지 않습니다.대신 텍스트/달력의 mimtype에 대한 UTI 및 번들 URL을 가져오려고 하면
NSString * UTI = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType,
(CFStringRef)@"text/calendar",
NULL);
CFURLRef ur =UTTypeCopyDeclaringBundleURL(UTI);
"com.apple.ical.ics"가 UTI로 표시되고.../MobileCoreTypes.bundle/"을 번들 URL로 지정합니다.우리 앱이 아니라 애플입니다.그래서 LSItemContent에 com.apple.ics를 넣으려고 합니다.내 것과 함께 UTConformsTo로 입력하지만, 전송은 안됩니다.
따라서 기본적으로 애플이 어떤 형태로든 파일 형식을 처리하고 싶다고 생각하는 경우(앱이 가동되고 나서 10년 후에 작성될 수 있음), 확장자를 변경해야 합니다. 왜냐하면 파일 형식을 다루지 못하게 하기 때문입니다.
내 앱의 모든 종류의 파일을 처리하기 위해 CFBundle Document에 대해 이 구성을 사용합니다.종류:
<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>
duti를 인스톨 합니다.UTI를 Appls에 즉시 결합할 수 있는 가장 완전하고 진지한 솔루션입니다.여기 있습니다: GitHub의 duti
그래픽 인터페이스가 있는 것을 선호하는 경우:Swift Default Apps on GitHub
언급URL : https://stackoverflow.com/questions/2774343/how-do-i-associate-file-types-with-an-iphone-application
'codememo' 카테고리의 다른 글
| Javascript를 사용하여 Excel 날짜 일련 번호를 현재 날짜로 변환 (0) | 2023.04.13 |
|---|---|
| 눈금 레이블 글꼴 크기 축소 (0) | 2023.04.13 |
| 오리진 마스터 분기의 파일 버전으로 되돌리는 방법 (0) | 2023.04.13 |
| Visual Studio에서 "사용하지 않은" 컴파일러 경고를 제거하려면 어떻게 해야 합니까? (0) | 2023.04.13 |
| 카운트(*) vs. 카운트(1) vs. 카운트(pk): 어느 쪽이 좋은가? (0) | 2023.04.13 |