为什么在 iOS 模拟器上使用 FilePick 选择我的自定义 CSS 文件类型不显示?
Why is my custom CSS filetype not displaying for selection with FilePick on iOS Simulator?
我已经按照这个 tutorial 和其他几个尝试创建我的 CSS 文件类型。
我也看到了这个 tutorial,即使我使用 Visual Studio 作为 Mac。
所以我手动编辑了 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 个文件。我不能 select 他们。如果我从我的 FileTypePicker
对象中删除 iOS 条目,那么我可以选择它们,因为没有任何东西被过滤掉。而且 macOS 过滤器仍然有效。
我做错了什么?
更新
Visual Studio for Mac 不会公开“高级”选项卡中的所有属性:
所以我手动添加的其他指示。
感谢您的帮助。
更新 2
我关注了另一个 tutorial 所以现在我有:
<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 中注意到 Mac
每次我重新打开我的 iOS 项目时,信息列表都会恢复为:
看到了吗?它不断重置其中两个元素。我希望这是问题的一部分。错误?
这不是错误。 Mac 的 VS 只显示这些标签,但内部有正确的术语。
这有帮助吗?这是对您作为起点发布的 SO 答案之一的进一步解释。
经过两天的搜索,我发现了一篇有价值的文章:
Cascading Style Sheet (CSS) File Format
在那篇文章中有关于 UTType 的详细信息:
关键信息是:
public.css
text/css
Here 它指出:
If your code relies on third-party UTI types that may not be present on the system, you should declare those UTIs as imported types in your bundle.
我所做的只是导出。这是我最后的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 中,Mac 在“高级”选项卡中看起来像这样:
我不是 100% 确定我是否还需要 导出 文件类型,但我保留它以防万一。我知道 imported 文件类型优先。
当我 运行 我的应用程序现在:
所有 CSS 文件都可用。
我已经按照这个 tutorial 和其他几个尝试创建我的 CSS 文件类型。
我也看到了这个 tutorial,即使我使用 Visual Studio 作为 Mac。
所以我手动编辑了 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 个文件。我不能 select 他们。如果我从我的 FileTypePicker
对象中删除 iOS 条目,那么我可以选择它们,因为没有任何东西被过滤掉。而且 macOS 过滤器仍然有效。
我做错了什么?
更新
Visual Studio for Mac 不会公开“高级”选项卡中的所有属性:
所以我手动添加的其他指示。
感谢您的帮助。
更新 2
我关注了另一个 tutorial 所以现在我有:
<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 中注意到 Mac
每次我重新打开我的 iOS 项目时,信息列表都会恢复为:
看到了吗?它不断重置其中两个元素。我希望这是问题的一部分。错误?
这不是错误。 Mac 的 VS 只显示这些标签,但内部有正确的术语。
这有帮助吗?这是对您作为起点发布的 SO 答案之一的进一步解释。
经过两天的搜索,我发现了一篇有价值的文章:
Cascading Style Sheet (CSS) File Format
在那篇文章中有关于 UTType 的详细信息:
关键信息是:
public.css
text/css
Here 它指出:
If your code relies on third-party UTI types that may not be present on the system, you should declare those UTIs as imported types in your bundle.
我所做的只是导出。这是我最后的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 中,Mac 在“高级”选项卡中看起来像这样:
我不是 100% 确定我是否还需要 导出 文件类型,但我保留它以防万一。我知道 imported 文件类型优先。
当我 运行 我的应用程序现在:
所有 CSS 文件都可用。