0

メール内からアプリにファイルをエクスポートしようとすると、エクスポートするファイルが間違った拡張子で送信されます。

次に例を示します。

  1. 自分宛に添付ファイルを電子メールで送信する
  2. メールで添付ファイルを開く
  3. ファイルをエクスポートしてアプリで開く
  4. application:handleOpenUrl: に渡された URL が間違っています

エクスポートしようとしているファイルの名前は「NSIS.nsi」です (引用符なし)。メール (iOS?) は、ファイルを application:handleOpenUrl 経由でアプリに戻すときに、ファイルの名前を「NSIS.4th」に変更します。私が気づいたことの 1 つは、Exported Type UTIs > Item 0 > Conforms to UTIs > Equivalent Types > public.filename-extension 内の最初の拡張機能 (アイテム) が「4th」(引用符なし) であることです。

注意すべきもう 1 つのことは、同じ public.filename-extension 配列に「nsi」拡張子があることです。

さらに注意すべきことは、これは「 nsi」拡張子でのみ発生するように見えることです。アプリがサポートするすべての拡張機能をテストしたわけではありません (92 個あります。40 個目くらいで疲れました)。しかし、特にこの拡張機能には問題があります。

ちなみにコードサンプルはこちら・・・実にシンプルです。渡された NSURL に間違った拡張子が含まれています。これは渡された URL をログに記録します -- これは間違ったものです。したがって、私のアプリには、application:handleOpenUrl: に渡される前に NSURL で何かを行っているものは何もないと断言できます。

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    NSLog(@"url: %@", url);
    ...
}

これが役立つかどうかもわかりませんが、メール アプリでは、NSIS.nsi ファイルの横にアプリのアイコンが表示されます。はい、ファイルの名前はメール内で「NSIS.nsi」として表示されます。

更新 2

最初の拡張子を「5th」に変更して(キック用)、「NSIS.nsi」ファイルをインポートすると、実際にファイル拡張子が「NSIS.5th」に変更されたことを確認できました。アプリがサポートする UTI を正しく定義していないことが原因だと思います。私がやりたいことは、「ねえ、iOS、私はこれらのファイル拡張子をすべてサポートしています。名前を変更しないでください。ファイルを渡して、必要なことをさせてください」と言うだけです。実際には、アプリがすべてのタイプのテキスト ファイル (text、utf8、utf16 など) をサポートするようにしたいだけです。それが最終結果です。

問題は、plain.text、utf8、および utf16 をサポートしていることを iOS に伝えても、public.filename-extension 配列で拡張子を具体的に設定しない限り、ファイルを開くことができるアプリのリストにアプリが表示されないことです。 . plistにすべてを網羅する「すべてのテキストファイルをサポートする」構成値があればいいのにと思います。

私が気付いたもう 1 つのことは、この問題が他のファイル拡張子に影響を与えていることです。たとえば、メールから「Ada.adb」というアプリにエクスポートするファイルがあります。iOS はファイルを「Ada.ada」として返します (末尾の「b」ではなく「a」に注意してください)。これは理にかなっています... public.filename-extension 配列内またはアプリ内のどこにも、ファイル拡張子のリストに「ada」さえありません。

アップデート 3

すべてのタイプの public.text ファイルをサポートする方法を見つけました。

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeIconFiles</key>
        <array>
            <string>icon_buffer_ipad_small.png</string>
            <string>icon_buffer_iphone_small.png</string>
        </array>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.text</string>
        </array>
        <key>NSExportableTypes</key>
        <array>
            <string>public.text</string>
        </array>
        <key>CFBundleTypeName</key>
        <string>Source File</string>
        <key>LSHandlerRank</key>
        <string>Default</string>
    </dict>
</array>

基本的に、 LSItemContentTypesに加えてNSExportableTypesを含める必要があります。4th、md、および public.text である他のファイル タイプの膨大なリストなど、他の「public.text」ファイル タイプをアプリに関連付ける方法がわかったら、更新を追加します。うまくいけば、これは必要ありません。とにかく、調査結果を更新します。

更新 4

あなたたちはこれを信じるつもりはありません。この問題は、これをテストしたすべてのアプリに影響します。基本的に、「Ada.adb」ファイルをエクスポートしようとすると、ファイルは「Ada.ada」としてすべてのアプリケーションにエクスポートされます。わお!このバグを Apple に報告する方法を考えてみます。もちろん、これが予期された動作でない限り!

小さな更新: Apple にバグを報告しました。バグ ID 番号 12802236

これが iOS 5 で発生したことを覚えていません。これは、iOS 6 で導入されたリグレッションだと思います。

4

1 に答える 1

0

ファイル名が変わらない場合は、拡張子を手動で変更してみ- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)urlてはurlいかがでしょうか?もちろん、適切な拡張子が何であるかを知っておく必要があります。

于 2012-12-04T00:55:47.480 に答える