1

我正在尝试使用长按>在“我的应用程序”中打开来制作一个将从邮件应用程序接收媒体文件的应用程序

我无法将我想要的文件类型与我的应用程序关联起来。我正在使用统一类型标识符参考

这就是我的 info.plist 的样子:

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>mp3</string>
        </array>
        <key>CFBundleTypeName</key>
        <string>MP3 Audio</string>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
        <key>LSHandlerRank</key>
        <string>Alternate</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.mp3</string>
        </array>
        <key>LSTypeIsPackage</key>
        <false/>
    </dict>
    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>avi</string>
        </array>
        <key>CFBundleTypeName</key>
        <string>AVI movie</string>
        <key>LSHandlerRank</key>
        <string>Alternate</string>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.avi</string>
            <string>video/x-msvideo</string>
        </array>
        <key>LSTypeIsPackage</key>
        <false/>
    </dict>
    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>3gp</string>
        </array>
        <key>CFBundleTypeName</key>
        <string>3GPP movie</string>
        <key>LSHandlerRank</key>
        <string>Alternate</string>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.3gpp</string>
            <string>application/octet-stream</string>
        </array>
        <key>LSTypeIsPackage</key>
        <false/>
    </dict>
    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>mpg4</string>
            <string>mp4</string>
            <string>m4v</string>
        </array>
        <key>CFBundleTypeName</key>
        <string>MPEG-4 content</string>
        <key>LSHandlerRank</key>
        <string>Alternate</string>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.mpeg-4</string>
            <string>video/mp4</string>
            <string>video/mp4v</string>
        </array>
        <key>LSTypeIsPackage</key>
        <false/>
    </dict>
    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>mov</string>
        </array>
        <key>CFBundleTypeName</key>
        <string>QuickTime movie</string>
        <key>LSHandlerRank</key>
        <string>Alternate</string>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.apple.quicktime-movie</string>
            <string>video/quicktime</string>
        </array>
        <key>LSTypeIsPackage</key>
        <false/>
    </dict>
</array>

其中,只有 Mp3 和 AVI 显示在“我的应用程序”中打开选项。我刚刚获得将视频添加到我的相机胶卷的“保存视频”选项。我究竟做错了什么?

我要关联的格式是:AVI、3GP、MP4、M4V、MOV。

我也试过这个。它适用于 MP3、WAV、AVI、FLV,但仍然不适用于 3GP、MP4、MOV、M4V

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeName</key>
        <string>Audio</string>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.audio</string>
        </array>
    </dict>
    <dict>
        <key>CFBundleTypeName</key>
        <string>Video</string>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.movie</string>
        </array>
    </dict>
</array>
4

2 回答 2

3

所以回答如何将文件类型与 iPhone 应用程序相关联?, 显示了一些与您的示例略有不同的示例。该文件的内容看起来应该可以工作,尽管根据文档有一些冗余:

  • CFBundleTypeExtensions只是MacOS,即使那样,如果LSItemContentTypes存在,它也是多余的并且被忽略。
  • LSTypeIsPackage只是MacOS,即使那样,如果LSItemContentTypes存在,它也是多余的并且被忽略。
  • 文档建议对 CFBundleTypeName. 例如对于 mp4,而不是像你一样使用 MPEG-4 内容,而是尝试public.mpeg-4(内部 kUTTypeMPEG4)

尽管如此,虽然我认为清理是个好主意,但我认为只有最后一个可能真正有机会解决您的问题,因为其他两个应该被忽略。

…这意味着我认为实际上可以解决您的问题的方法是从设备中清除您的应用程序并从缓存中清除,退出 xcode,然后重新打开您的项目,重新构建并再次运行它。我遇到过问题,Xcode 及其部署机制在将资源放在设备上时会感到困惑。如果在您到达这一点之前某些注册尝试最初失败,则执行此清理可能会解决问题。

于 2012-07-22T03:58:26.067 回答
0

我已经安装了其他也支持文档导入的应用程序(例如 TeamViewer、oPlayer 等)。它们也没有出现在 MOV、3GP、M4V 等邮件应用程序的“打开方式”操作表中。

我猜苹果不允许第三方应用程序打开某些文件并希望它们在内部处理。所以用户所能做的就是将它们保存到相机胶卷中。

剩下的唯一选择是向我们的应用程序添加功能,以允许从相机胶卷中选择视频。所以,邮件 > 保存视频 > 相机胶卷 > 3rd Party App

真可惜。

我在 Info.plist 中的最终条目

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeName</key>
        <string>Audio</string>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
        <key>LSHandlerRank</key>
        <string>Alternate</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.audio</string>
        </array>
    </dict>
    <dict>
        <key>CFBundleTypeName</key>
        <string>Video</string>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
        <key>LSHandlerRank</key>
        <string>Alternate</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.3gpp</string>
            <string>public.3gpp2</string>
            <string>public.mpeg-4</string>
            <string>public.avi</string>
            <string>com.apple.quicktime-movie</string>
            <string>public.mpeg</string>
            <string>public.movie</string>
        </array>
    </dict>
</array>

我仍然希望有办法解决这个问题..有人吗?

于 2012-07-23T09:40:40.580 回答