如何解决为什么我的自定义 CSS 文件类型不显示以供 iOS 模拟器上的 FilePick 选择?
我已经按照这个 tutorial 和其他几个来尝试创建我的 CSS 文件类型。
即使我使用的是 Visual Studio for Mac,我也看到了这个 tutorial。
所以我手动编辑了 Info.plist 并添加了以下条目:
它有以下内容:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>Cascade Style Sheet</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>co.uk.trucklesoft.ElderlyRota.css</string>
</array>
</dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeDescription</key>
<string>Cascade Style Sheet</string>
<key>UTTypeIdentifier</key>
<string>co.uk.trucklesoft.ElderlyRota.css</string>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>css</string>
</dict>
</dict>
</array>
在我的应用程序中,我使用的是 Xamarin.CommunityToolkit.FilePicker,它的设置如下:
async private void InstallStyleButton_Clicked(object sender,EventArgs e)
{
var customFileType =
new FilePickerFileType(new Dictionary<DevicePlatform,IEnumerable<string>>
{
{DevicePlatform.iOS,new[] { "co.uk.trucklesoft.ElderlyRota.css" } },{DevicePlatform.macOS,new[] {"css"} }
});
var pickResult = await FilePicker.PickAsync(new PickOptions
{
FileTypes = customFileType,PickerTitle = "Select stylesheet to install"
});
if(pickResult != null)
{
// Build target path (don't use hardcoded path)
string targetFile = Path.Combine(_pageModel.StylesPath,pickResult.FileName);
// OK to install?
if(!File.Exists(targetFile))
{
// Install
File.copy(pickResult.FullPath,targetFile);
// Add it
StylesPicker.ItemsSource.Add(pickResult.FileName);
// Select it
StylesPicker.SelectedItem = pickResult.FileName;
}
}
}
当我在 Visual Studio 中启动调试器并尝试单击我的安装按钮并导航到 iCloud 上我有 CSS 文件的文件夹时:
我突出显示了 3 个 css 文件。我无法选择它们。如果我从 FileTypePicker
对象中删除 iOS 条目,那么我可以选择它们,因为没有过滤掉任何内容。无论如何,macOS 过滤器都可以工作。
我做错了什么?
更新
Visual Studio for Mac 未公开“高级”选项卡中的所有属性:
所以我手动添加了其他指示。
感谢您的帮助。
更新 2
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>Cascade Style Sheet</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>co.uk.trucklesoft.ElderlyRota.CascadeStyleSheet</string>
</array>
</dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeDescription</key>
<string>Cascade Style Sheet</string>
<key>UTTypeIdentifier</key>
<string>co.uk.trucklesoft.ElderlyInfirm.CascadeStyleSheet</string>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeTagSpecification</key>
<dict/>
<key>public.filename-extension</key>
<array/>
<key>Item 0</key>
<string>css</string>
<key>Item 1</key>
<string>CSS</string>
</dict>
</array>
但还是没有。找了两天了。我继续。
更新 3
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>Cascade Style Sheet</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>co.uk.trucklesoft.ElderlyRota.css</string>
</array>
</dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeDescription</key>
<string>Cascade Style Sheet</string>
<key>UTTypeIdentifier</key>
<string>co.uk.trucklesoft.ElderlyInfirm.css</string>
<key>UTTypeConformsTo</key>
<array>
<string>public.text</string>
<string>public.plain-text</string>
</array>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>css</string>
<string>CSS</string>
</array>
</dict>
</dict>
</array>
我修复了代码的一些问题。现在我的选择器调用 co.uk.trucklesoft.ElderlyRota.css
作为文件类型。但是在模拟器中还是不行。
我在 Visual Studio for Mac 中注意到
每次我重新打开我的 iOS 项目时,信息列表都会恢复为:
看到了吗?它不断重置其中两个元素。我希望这是问题的一部分。错误?
这不是错误。 VS for Mac 只显示这些标签,但内部有正确的术语。
解决方法
这有帮助吗?这是对您作为起点发布的其中一个 SO 答案的进一步解释。
https://stackoverflow.com/a/2781290/7778287
,经过两天的搜索,我发现了一篇有价值的文章:
Cascading Style Sheet (CSS) File Format
在那篇文章中有关于 UTType 的详细信息:
关键信息是:
public.css
text/css
Here 声明:
如果您的代码依赖于系统中可能不存在的第三方 UTI 类型,您应该在您的包中将这些 UTI 声明为导入类型。
我所做的只是出口。这是我最终的 Info.plist 内容:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>Cascade Style Sheet</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>co.uk.trucklesoft.ElderlyRota.css</string>
</array>
</dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeDescription</key>
<string>Cascade Style Sheet</string>
<key>UTTypeIdentifier</key>
<string>co.uk.trucklesoft.ElderlyInfirm.css</string>
<key>UTTypeConformsTo</key>
<array>
<string>public.css</string>
</array>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>css</string>
<key>public.mime-type</key>
<string>text/css</string>
</dict>
</dict>
</array>
<key>UTImportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeDescription</key>
<string>Cascade Style Sheet</string>
<key>UTTypeIdentifier</key>
<string>public.css</string>
<key>UTTypeConformsTo</key>
<array>
<string>text/css</string>
</array>
</dict>
</array>
在 Visual Studio for Mac 中,它在“高级”选项卡中如下所示:
我不是 100% 确定我是否仍然需要导出文件类型,但我将它保留在以防万一。我知道导入的文件类型将优先。
当我现在运行我的应用程序时:
所有 CSS 文件都可用。 ?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。