iOS 中的文件关联

File association in iOS

提问人:NightFuryLxD 提问时间:9/21/2022 最后编辑:NightFuryLxD 更新时间:9/22/2022 访问量:220

问:

我有一个使用自定义文件类型 - .csk 的 iOS swift 应用程序。它创建该自定义文件,并可以编辑/查看其功能。当用户点击 .csk 文件时,我希望应用程序启动,并在 open:options: delegate 方法中传递文件的 url

根据我的理解,将按顺序调用以下委托方法:

  1. 将完成启动;
  2. 打开:选项:
  3. didFinishLaunching

我计划在 didFinishLaunching(第 3 步)中处理用于启动我的应用程序的文件,其 URL 在 open:options:(第 2 步)中获取。

我有以下委托方法:

func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        
        NSLog("willFinishLaunchingWithOptions")
        
        // Do something
        
        return true
    }

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
      
        NSLog("didFinishLaunchingWithOptions")
        
        // Do something
        
        return true
    }

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        NSLog("open:options")
        NSLog("File name = %@", url.path)
        
        // Do something

        return true
    }

现在,为了将自定义文件与应用关联,必须定义 CFBundleDocumentTypes 键(用于将应用与文件关联)和 UTExportedTypeDeclarations 键(用于定义新文件类型 - .csk)。

这是我的 info.plist 文件:

<key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeName</key>
            <string>csk file</string>
            <key>LSHandlerRank</key>
            <string>Owner</string>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>LSItemContentTypes</key>
            <array>
                <string>hi.csk</string>
            </array>
        </dict>
        ...
        ...

<key>UTExportedTypeDeclarations</key>
    <array>
        <dict>
            <key>UTTypeDescription</key>
            <string>My personal file type</string>
            <key>UTTypeConformsTo</key>
            <array>
                <string>public.text</string>
            </array>
            <key>UTTypeIdentifier</key>
            <string>hi.csk</string>
            <key>UTTypeTagSpecification</key>
            <dict>
                <key>public.filename-extension</key>
                <array>
                    <string>csk</string>
                </array>
            </dict>
        </dict>

测试方案:使用 .csk 文件启动应用

我使用 macOS 控制台应用程序查看 iOS 应用程序的日志,因为该应用程序无法从 Xcode 启动(它将通过点击 .csk 文件启动)。

点击文件后,它会在“文件”应用中打开(为什么应用程序不直接启动?从那里,使用打开方式选项,我选择我的应用程序。应用程序开始运行,我看到以下日志:

willFinishLaunchingWithOptions
didFinishLaunchingWithOptions

open:options 没有被调用,我在任何地方都看不到文件名(扫描了所有日志 - 没有引用 open:options:)。

我错过了什么?

引用:

  1. 我密切关注了这篇 stackoverflow 帖子。
  2. CFBundleDocumentTypes 键和 UTExportedTypeDeclarations 键
  3. 系统尿路感染
  4. 文件关联
  5. 我提到的其他 Apple 文档在上面链接(正如我解释的那样)
iOS Swift Cocoa-Touch info.plist cfbundleDocumentTypes

评论


答: 暂无答案