为 iOS、Mac Catalyst、macOS 和 tvOS 创建项目

生成项控制如何生成适用于 iOS、Mac Catalyst、macOS 和 tvOS 应用程序或库项目的 .NET。

附加应用扩展

一个项组,其中包含要复制到应用捆绑包的任何其他应用扩展。

可以设置以下元数据:

  • 包括:Xcode 应用扩展项目的生成目录的路径。
  • 名称:扩展的名称。
  • BuildOutput:此值追加到 Include 值,以生成 appex 捆绑包的位置。 通常,Xcode 会将模拟器和设备的构建放置在不同的位置,因此可以利用这一点,使单个 AdditionalAppExtensions 入口指向两个不同的 appex 包,具体情况取决于是为模拟器还是设备进行构建。
  • CodesignEntitlements:指定在为应用扩展签名时使用的权利。 默认值是 'Include' 生成目录中的 '%(Name).entitlements'(如果该文件存在)。
  • CodesignWarnIfNoEntitlements:如果没有设置任何 CodesignEntitlements 值,将生成警告。 此属性可以设置为 false 静音此警告。

例:

<ItemGroup>
    <AdditionalAppExtensions Include="path/to/my.appex">
        <Name>MyAppExtensionName</Name>
        <BuildOutput Condition="'$(SdkIsSimulator)' == 'false'">DerivedData/MyAppExtensionName/Build/Products/Debug-iphoneos</BuildOutput>
        <BuildOutput Condition="'$(SdkIsSimulator)' == 'true'">DerivedData/MyAppExtensionName/Build/Products/Debug-iphonesimulator</BuildOutput>
        <CodesignEntitlements>path/to/Entitlements-appextension.plist</CodesignEntitlements>
        <CodesignWarnIfNoEntitlements>false</CodesignWarnIfNoEntitlements>
    </AdditionalAppExtensions>
</ItemGroup>

可在此处找到一个示例解决方案: TestApplication

备用应用图标

AlternateAppIcon 项组可用于指定备用应用图标。

Include 元数据必须指向资产目录中 .appiconset(适用于 iOS、macOS 和 Mac Catalyst)或 .imagestack(适用于 tvOS)图像资源的文件名。

例:

<ItemGroup>
    <!-- The value to put in here for the "Resources/MyImages.xcassets/MyAlternateAppIcon.appiconset" resource would be "MyAlternateAppIcon" -->
    <AlternateAppIcon Include="MyAlternateAppIcon" />
</ItemGroup>

另请参阅:

AtlasTexture

包含图集纹理的项目组。

BGenReferencePath

要传递给 bgen 工具(绑定生成器)的程序集引用列表。

通常,这通过将引用项添加为 ProjectReferencePackageReference 来自动完成。

BundleResource

要复制到应用程序包的文件。

另请参阅:

CodesignBundle

最终应用程序中应签名的其他捆绑包。

目的是将任何手动添加的其他捆绑包(例如在构建过程中通过自定义 MSBuild 目标添加的)包括在应用的签名中。

要包含的路径是应用捆绑包的路径,用于在主应用捆绑包内进行签署,其中包括应用捆绑包名称本身。

例:

<ItemGroup>
    <CodesignBundle Include="$(AssemblyName).app/Contents/SharedSupport/MyCustomBundle.app" />
</ItemGroup>

可以在 CodesignBundle 项上设置几个元数据,以指示签名的发生方式:

例:

<ItemGroup>
    <CodesignBundle Include="$(AssemblyName).app/Contents/SharedSupport/MyCustomBundle.app">
        <CodesignEntitlements>path/to/Entitlements.plist</CodesignEntitlements>
    </CodesignBundle>
</ItemGroup>

未设置的任何元数据将改用相应的属性(例如,如果未设置 CodesignSigningKey 元数据,则会改用 CodesignSigningKey 属性的值。

Collada

包含 collada 资产的项目组。

内容

要复制到应用捆绑包的资源(文件)。

它们将放置在应用捆绑包中的以下目录中:

  • /Resources:iOS 和 tvOS
  • /Contents/Resources:macOS 和 Mac Catalyst

可以将 Link 元数据设置为相对于目标目录的路径,以更改应用捆绑包中的位置。

例:

<ItemGroup>
    <Content Include="Readme.txt" Link="Documentation/Readme.txt" />
</ItemGroup>

会将文件放置在以下位置:

  • /Resources/Documentation/Readme.txt:iOS、tvOS
  • /Contents/Resources/Documentation/Readme.txt:macOS、Mac Catalyst

另请参阅:

CoreML模型

包含 CoreML 模型的项组。

自定义权限

包含自定义权利的项群,以添加到应用程序中。

这些权限是最后处理的,并将覆盖任何其他权限,无论是来自CodesignEntitlements 属性指定的文件,还是来自使用中的配置文件(如果有)。

这是格式:

<ItemGroup>
    <CustomEntitlements Include="name.of.entitlement" Type="Boolean" Value="true" /> <!-- value can be 'false' too (case doesn't matter) -->
    <CustomEntitlements Include="name.of.entitlement" Type="String" Value="stringvalue" />
    <CustomEntitlements Include="name.of.entitlement" Type="StringArray" Value="a;b" /> <!-- array of strings, separated by semicolon -->
    <CustomEntitlements Include="name.of.entitlement" Type="StringArray" Value="a😁b" ArraySeparator="😁" /> <!-- array of strings, separated by 😁 -->
    <CustomEntitlements Include="name.of.entitlement" Type="Remove" /> <!-- This will remove the corresponding entitlement  -->
</ItemGroup>

iTunes艺术作品

一个项组,其中包含适用于 IPA 的 iTunes 插图。

仅适用于 iOS 和 tvOS 项目。

ITunesMetadata

仅适用于 iOS 和 tvOS 项目。

ImageAsset

包含图像资源的项目组。

接口定义

包含接口定义的项组(*.xib 或 *.storyboard 文件)。

链接描述

要传递给剪裁器的其他 xml 文件。

这与 TrimmerRootDescriptor设置相同。

金属

包含金属资产的项目组。

Mlaunch附加参数

一个项组,其中包含该工具的额外参数 mlaunch ,该工具用于在设备和模拟器中启动应用。 该工具 mlaunch 被视为内部工具,并且行为随时可能会更改。

注释

这仅适用于从命令行dotnet run (或 dotnet build -t:Run),而不是从 IDE 启动时启动应用。

Mlaunch环境变量

一个项组,其中包含将在设备或模拟器中启动应用时设置的环境变量。

注释

这仅适用于从命令行dotnet run (或 dotnet build -t:Run),而不是从 IDE 启动时启动应用。

NativeReference

一个项组,其中包含在生成本机可执行文件时应链接到或与其链接的任何本机引用。

Objc绑定Api定义

列出所有用于绑定项目的 API 定义的项目组。

ObjcBindingCoreSource

列出所有绑定项目核心源代码的项目组。

Objective-C绑定原生框架

列出应包含在绑定项目中的所有本机框架的项组。

此项目组已弃用,请改用 NativeReference

ObjcBindingNativeLibrary

列出应包含在绑定项目中的所有本机库的项组。

此项目组已弃用,请改用 NativeReference

部分应用清单

PartialAppManifest 可用于添加将与主应用清单(Info.plist)合并的其他部分应用清单。

部分应用清单中的任何值都将替代主应用清单中的值,除非 Overwrite 元数据设置为 false

如果在多个部分应用清单中指定了相同的值,则不确定将使用哪个值。

<ItemGroup>
    <PartialAppManifest Include="my-partial-manifest.plist" Overwrite="false" />
</ItemGroup>

如果开发人员需要执行目标来计算要添加到 PartialAppManifest 项组的内容,则可以通过将其添加到 PartialAppManifest 属性来确保在处理 CollectAppManifestsDependsOn 项之前执行此目标:

<PropertyGroup>
    <CollectAppManifestsDependsOn>
        AddPartialAppManifests;
        $(CollectAppManifestsDependsOn);
    </CollectAppManifestsDependsOn>
</PropertyGroup>
<Target Name="AddPartialAppManifests">
    <ItemGroup>
        <PartialAppManifest Include="MyPartialAppManifest.plist" />
    </ItemGroup>
</Target>

XcodeProject

<XcodeProject> 可用于生成和使用 Xcode 或 elsewehere 中创建的 Xcode 框架项目的输出。

Include 元数据应指向要生成的 XCODEPROJ 文件的路径。

<ItemGroup>
  <XcodeProject Include="path/to/MyProject.xcodeproj" SchemeName="MyLibrary" />
</ItemGroup>

支持以下 MSBuild 元数据:

  • %(SchemeName):用于生成项目的生成方案或目标的名称。

  • %(Configuration):用于生成项目的配置的名称。 默认值为 Release

  • %(CreateNativeReference):输出 XCFRAMEWORK 文件将作为 @(NativeReference) 添加到项目中。 @(NativeReference) 支持的元数据(如 %(Kind)%(Frameworks)%(SmartLink))将在设置时转发。 默认值为 true

  • %(OutputPath):可以设置为替代 Xcode 项目的 XCARCHIVE 和 XCFRAMEWORK 输出路径。 默认值为 $(IntermediateOutputPath)xcode/{SchemeName}-{Hash}

.NET 9 中引入了此生成操作。