增加 Markdown 文件分享支持
This commit is contained in:
+100
-3
@@ -8,6 +8,18 @@
|
||||
<array>
|
||||
<string>mobilenotes</string>
|
||||
<string>shareddocuments</string>
|
||||
<string>noteapp</string>
|
||||
</array>
|
||||
<key>CFBundleURLTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleURLName</key>
|
||||
<string>com.fishestlife.note</string>
|
||||
<key>CFBundleURLSchemes</key>
|
||||
<array>
|
||||
<string>noteapp</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleDocumentTypes</key>
|
||||
<array>
|
||||
@@ -17,26 +29,73 @@
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
<key>LSHandlerRank</key>
|
||||
<string>Alternate</string>
|
||||
<string>Owner</string>
|
||||
<key>LSItemContentTypes</key>
|
||||
<array>
|
||||
<string>net.daringfireball.markdown</string>
|
||||
<string>public.markdown</string>
|
||||
<string>public.text</string>
|
||||
<string>public.plain-text</string>
|
||||
<string>public.utf8-plain-text</string>
|
||||
</array>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>md</string>
|
||||
<string>markdown</string>
|
||||
<string>mdown</string>
|
||||
<string>mkd</string>
|
||||
<string>mkdn</string>
|
||||
</array>
|
||||
<key>CFBundleTypeMIMETypes</key>
|
||||
<array>
|
||||
<string>text/markdown</string>
|
||||
<string>text/x-markdown</string>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>Plain Text File</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
<key>LSHandlerRank</key>
|
||||
<string>Alternate</string>
|
||||
<key>LSItemContentTypes</key>
|
||||
<array>
|
||||
<string>public.plain-text</string>
|
||||
<string>public.utf8-plain-text</string>
|
||||
<string>public.text</string>
|
||||
</array>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>txt</string>
|
||||
<string>text</string>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>Any Text or Data File</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
<key>LSHandlerRank</key>
|
||||
<string>Alternate</string>
|
||||
<key>LSItemContentTypes</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
<string>public.content</string>
|
||||
<string>public.item</string>
|
||||
</array>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>md</string>
|
||||
<string>markdown</string>
|
||||
<string>txt</string>
|
||||
<string>*</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>LSSupportsOpeningDocumentsInPlace</key>
|
||||
<true/>
|
||||
<key>UTImportedTypeDeclarations</key>
|
||||
<key>UTExportedTypeDeclarations</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>UTTypeConformsTo</key>
|
||||
@@ -54,6 +113,45 @@
|
||||
<array>
|
||||
<string>md</string>
|
||||
<string>markdown</string>
|
||||
<string>mdown</string>
|
||||
<string>mkd</string>
|
||||
<string>mkdn</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<array>
|
||||
<string>text/markdown</string>
|
||||
<string>text/x-markdown</string>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
<key>UTImportedTypeDeclarations</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.text</string>
|
||||
<string>public.plain-text</string>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>Markdown File</string>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>net.daringfireball.markdown</string>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>md</string>
|
||||
<string>markdown</string>
|
||||
<string>mdown</string>
|
||||
<string>mkd</string>
|
||||
<string>mkdn</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<array>
|
||||
<string>text/markdown</string>
|
||||
<string>text/x-markdown</string>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
@@ -71,7 +169,6 @@
|
||||
<string>Default Configuration</string>
|
||||
<key>UISceneDelegateClassName</key>
|
||||
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
|
||||
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.application-groups</key>
|
||||
<array>
|
||||
<string>group.com.fishestlife.note</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -60,11 +60,17 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
||||
}
|
||||
|
||||
private func handleSharedFile(_ url: URL) {
|
||||
guard url.isFileURL,
|
||||
let navigationController = window?.rootViewController as? UINavigationController else {
|
||||
guard let navigationController = window?.rootViewController as? UINavigationController else {
|
||||
return
|
||||
}
|
||||
|
||||
if url.scheme == "noteapp", url.host == "share" {
|
||||
handleShareURL(url, navigationController: navigationController)
|
||||
return
|
||||
}
|
||||
|
||||
guard url.isFileURL else { return }
|
||||
|
||||
let shouldStopAccessing = url.startAccessingSecurityScopedResource()
|
||||
defer {
|
||||
if shouldStopAccessing {
|
||||
@@ -86,6 +92,40 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
||||
}
|
||||
}
|
||||
|
||||
private func handleShareURL(_ url: URL, navigationController: UINavigationController) {
|
||||
guard let components = URLComponents(url: url, resolvingAgainstBaseURL: false),
|
||||
let queryItems = components.queryItems else { return }
|
||||
|
||||
let fileManager = FileManager.default
|
||||
let containerURL = fileManager.containerURL(forSecurityApplicationGroupIdentifier: "group.com.fishestlife.note")
|
||||
let sharedDir = containerURL?.appendingPathComponent("SharedFiles", isDirectory: true)
|
||||
|
||||
var contents: [(text: String, fileName: String)] = []
|
||||
|
||||
for item in queryItems {
|
||||
if item.name.hasPrefix("text"), let text = item.value, !text.isEmpty {
|
||||
contents.append((text: text, fileName: "shared.md"))
|
||||
} else if item.name.hasPrefix("file"), let fileName = item.value, !fileName.isEmpty {
|
||||
if let sharedDir = sharedDir {
|
||||
let fileURL = sharedDir.appendingPathComponent(fileName)
|
||||
if let text = try? String(contentsOf: fileURL, encoding: .utf8) {
|
||||
contents.append((text: text, fileName: fileName))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
guard let first = contents.first else { return }
|
||||
|
||||
DispatchQueue.main.async {
|
||||
let viewController = PreviewViewController()
|
||||
viewController.initialText = first.text
|
||||
viewController.fileName = first.fileName
|
||||
viewController.title = first.fileName
|
||||
navigationController.pushViewController(viewController, animated: true)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user