diff --git a/Make.config b/Make.config index 17621d4fc1..a2d42fedec 100644 --- a/Make.config +++ b/Make.config @@ -59,9 +59,9 @@ IOS_PACKAGE_VERSION_BUILD=$(IOS_COMMIT_DISTANCE) IOS_PACKAGE_UPDATE_ID=$(shell printf "2%02d%02d%02d%03d" $(IOS_PACKAGE_VERSION_MAJOR) $(IOS_PACKAGE_VERSION_MINOR) $(IOS_PACKAGE_VERSION_REV) $(IOS_PACKAGE_VERSION_BUILD)) # Xcode version should have both a major and a minor version (even if the minor version is 0) -XCODE_VERSION=11.3 -XCODE_URL=http://xamarin-storage/bot-provisioning/xcodes/Xcode_11.3.xip -XCODE_DEVELOPER_ROOT=/Applications/Xcode113.app/Contents/Developer +XCODE_VERSION=11.4 +XCODE_URL=http://xamarin-storage/bot-provisioning/xcodes/Xcode_11.4_beta_2.xip +XCODE_DEVELOPER_ROOT=/Applications/Xcode114-beta2.app/Contents/Developer XCODE_PRODUCT_BUILD_VERSION:=$(shell /usr/libexec/PlistBuddy -c 'Print :ProductBuildVersion' $(XCODE_DEVELOPER_ROOT)/../version.plist) # Mono version embedded in XI/XM (NEEDED_MONO_VERSION/BRANCH) are specified in mk/mono.mk @@ -89,28 +89,27 @@ MIN_CMAKE_VERSION=2.8.8 # ObjectiveSharpie min/max versions MIN_SHARPIE_VERSION=3.4.43 -MAX_SHARPIE_VERSION=3.4.99 +MAX_SHARPIE_VERSION=3.5.99 MIN_SHARPIE_URL=https://download.visualstudio.microsoft.com/download/pr/2319addc-fc41-42b9-b6f8-245c1deb39c5/34f249d93ca3cf853a8b7f6408ab564e/objectivesharpie-3.4.43.pkg # Minimum OSX versions for building XI/XM -MIN_OSX_BUILD_VERSION=10.14 +MIN_OSX_BUILD_VERSION=10.15 # Minimum OSX version for executing XI/XM tooling. MIN_OSX_VERSION_FOR_IOS=10.11 MIN_OSX_VERSION_FOR_MAC=10.11 -# WARNING: Do **not** use versions higher than the available Xcode SDK or else we will have issues with mtouch (See https://github.com/xamarin/xamarin-macios/issues/7705) -IOS_SDK_VERSION=13.2 +IOS_SDK_VERSION=13.4 # When bumping OSX_SDK_VERSION also update the macOS version where we execute on bots in jenkins/Jenkinsfile (in the 'node' element) OSX_SDK_VERSION=10.15 -WATCH_SDK_VERSION=6.1 -TVOS_SDK_VERSION=13.2 +WATCH_SDK_VERSION=6.2 +TVOS_SDK_VERSION=13.4 -MAX_IOS_DEPLOYMENT_TARGET=13.3 +MAX_IOS_DEPLOYMENT_TARGET=$(IOS_SDK_VERSION) MAX_WATCH_DEPLOYMENT_TARGET=$(WATCH_SDK_VERSION) -MAX_TVOS_DEPLOYMENT_TARGET=13.3 +MAX_TVOS_DEPLOYMENT_TARGET=$(TVOS_SDK_VERSION) -MAX_IOS_SIMULATOR_VERSION=13.3 -MAX_TVOS_SIMULATOR_VERSION=13.3 +MAX_IOS_SIMULATOR_VERSION=$(IOS_SDK_VERSION) +MAX_TVOS_SIMULATOR_VERSION=$(TVOS_SDK_VERSION) MAX_WATCH_SIMULATOR_VERSION=$(WATCH_SDK_VERSION) # Minimum OS versions for running XI/XM apps. @@ -356,7 +355,8 @@ JENKINS_RESULTS_DIRECTORY ?= $(abspath $(TOP)/jenkins-results) # Clone files instead of copying them on APFS file systems. Much faster. CP:=$(shell df -t apfs / >/dev/null 2>&1 && echo "cp -c" || echo "cp") -XCODE_ARCHIVE_VERSION=xcode-$(XCODE_PRODUCT_BUILD_VERSION) +# WORKAROUND, should be xcode-$(XCODE_PRODUCT_BUILD_VERSION) but we are stuck due to xcode 11.4 beta 1 issue: https://github.com/xamarin/xamarin-macios/issues/7872 +XCODE_ARCHIVE_VERSION=xcode-11C29 MONO_IOS_FILENAME:=ios-release-Darwin-$(MONO_HASH).7z MONO_IOS_URL:=https://xamjenkinsartifact.azureedge.net/mono-sdks/$(XCODE_ARCHIVE_VERSION)/$(MONO_IOS_FILENAME) MONO_MAC_FILENAME:=mac-release-Darwin-$(MONO_HASH).7z @@ -373,5 +373,9 @@ MONO_MAC_SDK_DESTDIR:=$(abspath $(MONO_PATH)/sdks/out) MONO_BUILD_MODE=compile-mono endif +# If we should inject an x86_64 slice into every binary that doesn't have one. +# This is sometimes necessary to work around an Apple bug wrt notarization where Apple flags all binaries that don't have a x86_64 slice, even if they're correctly signed. +INJECT_X86_64_SLICE= + .SUFFIXES: MAKEFLAGS += --no-builtin-rules diff --git a/Make.versions b/Make.versions index d286afa5d5..1cb861a6ad 100644 --- a/Make.versions +++ b/Make.versions @@ -43,5 +43,5 @@ # line changed in git). # -IOS_PACKAGE_VERSION=13.14.1.$(IOS_COMMIT_DISTANCE) -MAC_PACKAGE_VERSION=6.14.1.$(MAC_COMMIT_DISTANCE) +IOS_PACKAGE_VERSION=13.14.2.$(IOS_COMMIT_DISTANCE) +MAC_PACKAGE_VERSION=6.14.2.$(MAC_COMMIT_DISTANCE) diff --git a/Versions-ios.plist.in b/Versions-ios.plist.in index b4e9cebd8b..16cb651a83 100644 --- a/Versions-ios.plist.in +++ b/Versions-ios.plist.in @@ -37,6 +37,7 @@ 13.1 13.2 13.3 + 13.4 tvOS @@ -59,6 +60,7 @@ 13.0 13.2 13.3 + 13.4 watchOS @@ -79,6 +81,7 @@ 5.3 6.0 6.1 + 6.2 RecommendedXcodeVersion diff --git a/builds/Makefile b/builds/Makefile index fa039bc09b..914f72c949 100644 --- a/builds/Makefile +++ b/builds/Makefile @@ -54,28 +54,13 @@ downloads/%: downloads/%.7z clean-local:: $(Q) rm -Rf downloads .stamp-download-mono -x86-64-slice.c: Makefile - echo "void xamarin_x86_64_function_for_notarization_workaround () {}" > $@ - -x86-64-slice.o: x86-64-slice.c - $(MAC_CC) -c -ggdb3 $< -o $@ - -X86_64_SLICE_BASE=$(abspath $(CURDIR)/x86-64-slice) -X86_64_SLICE_DYLIB=$(X86_64_SLICE_BASE).dylib -X86_64_SLICE_A=$(X86_64_SLICE_BASE).a -X86_64_SLICE_NOEXT=$(X86_64_SLICE_BASE) -X86_64_SLICE=$(X86_64_SLICE_BASE)$(suffix $@) - -X86_64_SLICE_ALL=$(X86_64_SLICE_DYLIB) $(X86_64_SLICE_A) $(X86_64_SLICE_NOEXT) - -$(X86_64_SLICE_DYLIB): x86-64-slice.o - $(MAC_CC) -shared -o$@ $< - -$(X86_64_SLICE_A): x86-64-slice.o - $(AR) -rv $@ $< - -$(X86_64_SLICE_NOEXT): $(X86_64_SLICE_DYLIB) - $(Q) $(CP) $< $@ +ifdef INJECT_X86_64_SLICE +X86_64_SLICE=$(abspath $(CURDIR)/x86-64-slice.dylib) +$(X86_64_SLICE): Makefile + echo "void xamarin_x86_64_function_for_notarization_workaround () {}" | $(MAC_CC) -shared -x c -o$@ - +else +X86_64_SLICE= +endif ifeq ($(MONO_BUILD_FROM_SOURCE),) @@ -874,10 +859,12 @@ $(IOS_DESTDIR)$(XAMARIN_IPHONEOS_SDK)/usr/lib/%: .stamp-$(MONO_BUILD_MODE) $(X86 $(IOS_DESTDIR)$(XAMARIN_IPHONEOS_SDK)/Frameworks/Mono.framework/Mono: .stamp-$(MONO_BUILD_MODE) $(X86_64_SLICE_ALL) | $(IOS_DESTDIR)$(XAMARIN_IPHONEOS_SDK)/Frameworks $(Q) $(CP) -R $(MONO_IOS_SDK_DESTDIR)/ios-frameworks/ios/Mono.framework $(IOS_DESTDIR)$(XAMARIN_IPHONEOS_SDK)/Frameworks $(Q) $(CP) -R $(MONO_IOS_SDK_DESTDIR)/ios-frameworks/ios/Mono.framework.dSYM $(IOS_DESTDIR)$(XAMARIN_IPHONEOS_SDK)/Frameworks +ifdef INJECT_X86_64_SLICE @# inject x86-64 slice $(Q) mv $@ $@.tmp $(Q_LIPO) lipo $@.tmp $(X86_64_SLICE) -create -output $@ $(Q) rm $@.tmp +endif $(IPHONEOS_DIRECTORIES): $(Q) mkdir -p $@ @@ -916,10 +903,12 @@ $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib/%: .stamp-$(MONO_BUILD_MODE) $(X86_ $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/Frameworks/Mono.framework/Mono: .stamp-$(MONO_BUILD_MODE) $(X86_64_SLICE_ALL) | $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/Frameworks $(Q) $(CP) -R $(MONO_IOS_SDK_DESTDIR)/ios-frameworks/watchos/Mono.framework $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/Frameworks $(Q) $(CP) -R $(MONO_IOS_SDK_DESTDIR)/ios-frameworks/watchos/Mono.framework.dSYM $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/Frameworks +ifdef INJECT_X86_64_SLICE @# inject x86-64 slice $(Q) mv $@ $@.tmp $(Q_LIPO) lipo $@.tmp $(X86_64_SLICE) -create -output $@ $(Q) rm $@.tmp +endif $(WATCHOS_DIRECTORIES): $(Q) mkdir -p $@ @@ -958,10 +947,12 @@ $(IOS_DESTDIR)$(XAMARIN_TVOS_SDK)/usr/lib/%: .stamp-$(MONO_BUILD_MODE) $(X86_64_ $(IOS_DESTDIR)$(XAMARIN_TVOS_SDK)/Frameworks/Mono.framework/Mono: .stamp-$(MONO_BUILD_MODE) $(X86_64_SLICE_ALL) | $(IOS_DESTDIR)$(XAMARIN_TVOS_SDK)/Frameworks $(Q) $(CP) -R $(MONO_IOS_SDK_DESTDIR)/ios-frameworks/tvos/Mono.framework $(IOS_DESTDIR)$(XAMARIN_TVOS_SDK)/Frameworks $(Q) $(CP) -R $(MONO_IOS_SDK_DESTDIR)/ios-frameworks/tvos/Mono.framework.dSYM $(IOS_DESTDIR)$(XAMARIN_TVOS_SDK)/Frameworks +ifdef INJECT_X86_64_SLICE @# inject x86-64 slice $(Q) mv $@ $@.tmp $(Q_LIPO) lipo $@.tmp $(X86_64_SLICE) -create -output $@ $(Q) rm $@.tmp +endif $(TVOS_DIRECTORIES): $(Q) mkdir -p $@ diff --git a/external/macios-binaries b/external/macios-binaries index eb6980e8b6..bbaabd1430 160000 --- a/external/macios-binaries +++ b/external/macios-binaries @@ -1 +1 @@ -Subproject commit eb6980e8b6ee7bcd6edfd514e606b664bd93f33d +Subproject commit bbaabd14307336945971f7c092f3ceeeb812665c diff --git a/jenkins/Jenkinsfile b/jenkins/Jenkinsfile index 329f25d106..d23da6388e 100644 --- a/jenkins/Jenkinsfile +++ b/jenkins/Jenkinsfile @@ -397,7 +397,7 @@ def abortExecutingBuilds () } timestamps { - def mainMacOSVersion = 14 + def mainMacOSVersion = 15 node ("xamarin-macios && macos-10.${mainMacOSVersion}") { try { timeout (time: 15, unit: 'HOURS') { diff --git a/jenkins/productsign.sh b/jenkins/productsign.sh index 3f67766555..cbda67623b 100755 --- a/jenkins/productsign.sh +++ b/jenkins/productsign.sh @@ -46,7 +46,6 @@ echo 'cat (//xar/toc/signature/x:KeyInfo/x:X509Data/x:X509Certificate)[1]/text() echo Signature Verification for pkg in package/*.pkg; do - /usr/sbin/spctl -vvv --assess --type install "$pkg" pkgutil --check-signature "$pkg" xar -f "$pkg" --dump-toc="$pkg.toc" ( diff --git a/jenkins/vsts-device-tests-set-status.sh b/jenkins/vsts-device-tests-set-status.sh index e9c4a792fb..75e1f2808b 100755 --- a/jenkins/vsts-device-tests-set-status.sh +++ b/jenkins/vsts-device-tests-set-status.sh @@ -46,7 +46,7 @@ fi P=$(cat tmp.p) -VSTS_BUILD_URL="${SYSTEM_TEAMFOUNDATIONCOLLECTIONURI}${SYSTEM_TEAMPROJECT}/_build/index?buildId=${BUILD_BUILDID}" +VSTS_BUILD_URL="${SYSTEM_TEAMFOUNDATIONCOLLECTIONURI}${SYSTEM_TEAMPROJECT}/_build/index?buildId=${BUILD_BUILDID}&view=ms.vss-test-web.test-result-details" # Add a GitHub status to the commit we're testing GH_STATE=failure diff --git a/mk/xamarin.mk b/mk/xamarin.mk index 4f804b1644..18558b69ed 100644 --- a/mk/xamarin.mk +++ b/mk/xamarin.mk @@ -7,7 +7,7 @@ MONO_BRANCH := $(shell cd $(MONO_PATH) 2> /dev/null && git symbolic-ref --sho endif ifdef ENABLE_XAMARIN -NEEDED_MACCORE_VERSION := 89f83d012347661c0eb92b0196ee001b35d6f70f +NEEDED_MACCORE_VERSION := b1f738dd701b5f4b8932eeaadae7f3f619068f77 NEEDED_MACCORE_BRANCH := d16-5 MACCORE_DIRECTORY := maccore diff --git a/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets b/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets index cb6848f328..571bee18cd 100644 --- a/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets +++ b/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets @@ -343,6 +343,7 @@ Copyright (C) 2014 Xamarin. All rights reserved. TargetFrameworkIdentifier="$(TargetFrameworkIdentifier)" ResourcePrefix="$(XamMacResourcePrefix)" SdkDevPath="$(_SdkDevPath)" + SdkIsSimulator="false" SdkRoot="$(_SdkRoot)" SdkVersion="$(MacOSXSdkVersion)" SourceFile="@(Metal)"> diff --git a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/MetalTaskBase.cs b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/MetalTaskBase.cs index b4958721a6..e4e1438a6d 100644 --- a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/MetalTaskBase.cs +++ b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/MetalTaskBase.cs @@ -33,6 +33,9 @@ namespace Xamarin.MacDev.Tasks [Required] public string SdkVersion { get; set; } + [Required] + public bool SdkIsSimulator { get; set; } + [Required] public string SdkRoot { get; set; } @@ -55,13 +58,13 @@ namespace Xamarin.MacDev.Tasks get { switch (PlatformFrameworkHelper.GetFramework (TargetFrameworkIdentifier)) { case PlatformFramework.WatchOS: - return "watchos"; + return SdkIsSimulator ? "watchos-simulator" : "watchos"; case PlatformFramework.TVOS: - return "tvos"; + return SdkIsSimulator ? "tvos-simulator" : "tvos"; case PlatformFramework.MacOS: return "macosx"; case PlatformFramework.iOS: - return "ios"; + return SdkIsSimulator ? "iphonesimulator" : "ios"; default: Log.LogError ($"Unknown target framework identifier: {TargetFrameworkIdentifier}."); return string.Empty; diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets index 997cf1339f..b579bc37a8 100644 --- a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets +++ b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets @@ -597,8 +597,6 @@ Copyright (C) 2013-2016 Xamarin. All rights reserved. - - diff --git a/msbuild/tests/MyMetalGame/GameViewController.cs b/msbuild/tests/MyMetalGame/GameViewController.cs index b5da97593e..9999adb808 100644 --- a/msbuild/tests/MyMetalGame/GameViewController.cs +++ b/msbuild/tests/MyMetalGame/GameViewController.cs @@ -208,6 +208,8 @@ namespace MyMetalGame // If we need a depth texture and don't have one, or if the depth texture we have is the wrong size // Then allocate one of the proper size MTLTextureDescriptor desc = MTLTextureDescriptor.CreateTexture2DDescriptor (MTLPixelFormat.Depth32Float, texture.Width, texture.Height, false); + if (ObjCRuntime.Runtime.Arch == ObjCRuntime.Arch.SIMULATOR) + desc.StorageMode = MTLStorageMode.Private; depthTex = device.CreateTexture (desc); depthTex.Label = "Depth"; diff --git a/msbuild/tests/MyMetalGame/MyMetalGame.sln b/msbuild/tests/MyMetalGame/MyMetalGame.sln new file mode 100644 index 0000000000..496a3e6f2e --- /dev/null +++ b/msbuild/tests/MyMetalGame/MyMetalGame.sln @@ -0,0 +1,23 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyMetalGame", "MyMetalGame.csproj", "{4598E620-3F15-4F66-B01A-B7F9E45CE659}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|iPhoneSimulator = Debug|iPhoneSimulator + Release|iPhoneSimulator = Release|iPhoneSimulator + Debug|iPhone = Debug|iPhone + Release|iPhone = Release|iPhone + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4598E620-3F15-4F66-B01A-B7F9E45CE659}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator + {4598E620-3F15-4F66-B01A-B7F9E45CE659}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator + {4598E620-3F15-4F66-B01A-B7F9E45CE659}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator + {4598E620-3F15-4F66-B01A-B7F9E45CE659}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator + {4598E620-3F15-4F66-B01A-B7F9E45CE659}.Debug|iPhone.ActiveCfg = Debug|iPhone + {4598E620-3F15-4F66-B01A-B7F9E45CE659}.Debug|iPhone.Build.0 = Debug|iPhone + {4598E620-3F15-4F66-B01A-B7F9E45CE659}.Release|iPhone.ActiveCfg = Release|iPhone + {4598E620-3F15-4F66-B01A-B7F9E45CE659}.Release|iPhone.Build.0 = Release|iPhone + EndGlobalSection +EndGlobal diff --git a/msbuild/tests/MyTVMetalGame/AppDelegate.cs b/msbuild/tests/MyTVMetalGame/AppDelegate.cs new file mode 100644 index 0000000000..06c401b519 --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/AppDelegate.cs @@ -0,0 +1,56 @@ +using Foundation; +using UIKit; + +namespace MyTVMetalGame { + // The UIApplicationDelegate for the application. This class is responsible for launching the + // User Interface of the application, as well as listening (and optionally responding) to application events from iOS. + [Register ("AppDelegate")] + public class AppDelegate : UIApplicationDelegate { + // class-level declarations + + public override UIWindow Window { + get; + set; + } + + public override bool FinishedLaunching (UIApplication application, NSDictionary launchOptions) + { + // Override point for customization after application launch. + // If not required for your application you can safely delete this method + + return true; + } + + public override void OnResignActivation (UIApplication application) + { + // Invoked when the application is about to move from active to inactive state. + // This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) + // or when the user quits the application and it begins the transition to the background state. + // Games should use this method to pause the game. + } + + public override void DidEnterBackground (UIApplication application) + { + // Use this method to release shared resources, save user data, invalidate timers and store the application state. + // If your application supports background exection this method is called instead of WillTerminate when the user quits. + } + + public override void WillEnterForeground (UIApplication application) + { + // Called as part of the transiton from background to active state. + // Here you can undo many of the changes made on entering the background. + } + + public override void OnActivated (UIApplication application) + { + // Restart any tasks that were paused (or not yet started) while the application was inactive. + // If the application was previously in the background, optionally refresh the user interface. + } + + public override void WillTerminate (UIApplication application) + { + // Called when the application is about to terminate. Save data, if needed. See also DidEnterBackground. + } + } +} + diff --git a/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json new file mode 100644 index 0000000000..3767d60b0e --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json @@ -0,0 +1,54 @@ +{ + "images": [ + { + "idiom": "universal" + }, + { + "scale": "1x", + "idiom": "universal" + }, + { + "scale": "2x", + "idiom": "universal" + }, + { + "scale": "3x", + "idiom": "universal" + }, + { + "idiom": "iphone" + }, + { + "scale": "1x", + "idiom": "iphone" + }, + { + "scale": "2x", + "idiom": "iphone" + }, + { + "subtype": "retina4", + "scale": "2x", + "idiom": "iphone" + }, + { + "scale": "3x", + "idiom": "iphone" + }, + { + "idiom": "ipad" + }, + { + "scale": "1x", + "idiom": "ipad" + }, + { + "scale": "2x", + "idiom": "ipad" + } + ], + "info": { + "version": 1, + "author": "xcode" + } +} \ No newline at end of file diff --git a/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json new file mode 100644 index 0000000000..da4a164c91 --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json new file mode 100644 index 0000000000..d29f024ed5 --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json @@ -0,0 +1,17 @@ +{ + "layers" : [ + { + "filename" : "Front.imagestacklayer" + }, + { + "filename" : "Middle.imagestacklayer" + }, + { + "filename" : "Back.imagestacklayer" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json new file mode 100644 index 0000000000..3767d60b0e --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json @@ -0,0 +1,54 @@ +{ + "images": [ + { + "idiom": "universal" + }, + { + "scale": "1x", + "idiom": "universal" + }, + { + "scale": "2x", + "idiom": "universal" + }, + { + "scale": "3x", + "idiom": "universal" + }, + { + "idiom": "iphone" + }, + { + "scale": "1x", + "idiom": "iphone" + }, + { + "scale": "2x", + "idiom": "iphone" + }, + { + "subtype": "retina4", + "scale": "2x", + "idiom": "iphone" + }, + { + "scale": "3x", + "idiom": "iphone" + }, + { + "idiom": "ipad" + }, + { + "scale": "1x", + "idiom": "ipad" + }, + { + "scale": "2x", + "idiom": "ipad" + } + ], + "info": { + "version": 1, + "author": "xcode" + } +} \ No newline at end of file diff --git a/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json new file mode 100644 index 0000000000..da4a164c91 --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json new file mode 100644 index 0000000000..3767d60b0e --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json @@ -0,0 +1,54 @@ +{ + "images": [ + { + "idiom": "universal" + }, + { + "scale": "1x", + "idiom": "universal" + }, + { + "scale": "2x", + "idiom": "universal" + }, + { + "scale": "3x", + "idiom": "universal" + }, + { + "idiom": "iphone" + }, + { + "scale": "1x", + "idiom": "iphone" + }, + { + "scale": "2x", + "idiom": "iphone" + }, + { + "subtype": "retina4", + "scale": "2x", + "idiom": "iphone" + }, + { + "scale": "3x", + "idiom": "iphone" + }, + { + "idiom": "ipad" + }, + { + "scale": "1x", + "idiom": "ipad" + }, + { + "scale": "2x", + "idiom": "ipad" + } + ], + "info": { + "version": 1, + "author": "xcode" + } +} \ No newline at end of file diff --git a/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json new file mode 100644 index 0000000000..da4a164c91 --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json new file mode 100644 index 0000000000..3767d60b0e --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json @@ -0,0 +1,54 @@ +{ + "images": [ + { + "idiom": "universal" + }, + { + "scale": "1x", + "idiom": "universal" + }, + { + "scale": "2x", + "idiom": "universal" + }, + { + "scale": "3x", + "idiom": "universal" + }, + { + "idiom": "iphone" + }, + { + "scale": "1x", + "idiom": "iphone" + }, + { + "scale": "2x", + "idiom": "iphone" + }, + { + "subtype": "retina4", + "scale": "2x", + "idiom": "iphone" + }, + { + "scale": "3x", + "idiom": "iphone" + }, + { + "idiom": "ipad" + }, + { + "scale": "1x", + "idiom": "ipad" + }, + { + "scale": "2x", + "idiom": "ipad" + } + ], + "info": { + "version": 1, + "author": "xcode" + } +} \ No newline at end of file diff --git a/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json new file mode 100644 index 0000000000..da4a164c91 --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json new file mode 100644 index 0000000000..d29f024ed5 --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json @@ -0,0 +1,17 @@ +{ + "layers" : [ + { + "filename" : "Front.imagestacklayer" + }, + { + "filename" : "Middle.imagestacklayer" + }, + { + "filename" : "Back.imagestacklayer" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json new file mode 100644 index 0000000000..3767d60b0e --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json @@ -0,0 +1,54 @@ +{ + "images": [ + { + "idiom": "universal" + }, + { + "scale": "1x", + "idiom": "universal" + }, + { + "scale": "2x", + "idiom": "universal" + }, + { + "scale": "3x", + "idiom": "universal" + }, + { + "idiom": "iphone" + }, + { + "scale": "1x", + "idiom": "iphone" + }, + { + "scale": "2x", + "idiom": "iphone" + }, + { + "subtype": "retina4", + "scale": "2x", + "idiom": "iphone" + }, + { + "scale": "3x", + "idiom": "iphone" + }, + { + "idiom": "ipad" + }, + { + "scale": "1x", + "idiom": "ipad" + }, + { + "scale": "2x", + "idiom": "ipad" + } + ], + "info": { + "version": 1, + "author": "xcode" + } +} \ No newline at end of file diff --git a/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json new file mode 100644 index 0000000000..da4a164c91 --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json new file mode 100644 index 0000000000..3767d60b0e --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json @@ -0,0 +1,54 @@ +{ + "images": [ + { + "idiom": "universal" + }, + { + "scale": "1x", + "idiom": "universal" + }, + { + "scale": "2x", + "idiom": "universal" + }, + { + "scale": "3x", + "idiom": "universal" + }, + { + "idiom": "iphone" + }, + { + "scale": "1x", + "idiom": "iphone" + }, + { + "scale": "2x", + "idiom": "iphone" + }, + { + "subtype": "retina4", + "scale": "2x", + "idiom": "iphone" + }, + { + "scale": "3x", + "idiom": "iphone" + }, + { + "idiom": "ipad" + }, + { + "scale": "1x", + "idiom": "ipad" + }, + { + "scale": "2x", + "idiom": "ipad" + } + ], + "info": { + "version": 1, + "author": "xcode" + } +} \ No newline at end of file diff --git a/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json new file mode 100644 index 0000000000..da4a164c91 --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json new file mode 100644 index 0000000000..dea6e49fd5 --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json @@ -0,0 +1,32 @@ +{ + "assets" : [ + { + "size" : "1280x768", + "idiom" : "tv", + "filename" : "App Icon - Large.imagestack", + "role" : "primary-app-icon" + }, + { + "size" : "400x240", + "idiom" : "tv", + "filename" : "App Icon - Small.imagestack", + "role" : "primary-app-icon" + }, + { + "size" : "2320x720", + "idiom" : "tv", + "filename" : "Top Shelf Image Wide.imageset", + "role" : "top-shelf-image-wide" + }, + { + "size" : "1920x720", + "idiom" : "tv", + "filename" : "Top Shelf Image.imageset", + "role" : "top-shelf-image" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json new file mode 100644 index 0000000000..3767d60b0e --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json @@ -0,0 +1,54 @@ +{ + "images": [ + { + "idiom": "universal" + }, + { + "scale": "1x", + "idiom": "universal" + }, + { + "scale": "2x", + "idiom": "universal" + }, + { + "scale": "3x", + "idiom": "universal" + }, + { + "idiom": "iphone" + }, + { + "scale": "1x", + "idiom": "iphone" + }, + { + "scale": "2x", + "idiom": "iphone" + }, + { + "subtype": "retina4", + "scale": "2x", + "idiom": "iphone" + }, + { + "scale": "3x", + "idiom": "iphone" + }, + { + "idiom": "ipad" + }, + { + "scale": "1x", + "idiom": "ipad" + }, + { + "scale": "2x", + "idiom": "ipad" + } + ], + "info": { + "version": 1, + "author": "xcode" + } +} \ No newline at end of file diff --git a/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json new file mode 100644 index 0000000000..3767d60b0e --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json @@ -0,0 +1,54 @@ +{ + "images": [ + { + "idiom": "universal" + }, + { + "scale": "1x", + "idiom": "universal" + }, + { + "scale": "2x", + "idiom": "universal" + }, + { + "scale": "3x", + "idiom": "universal" + }, + { + "idiom": "iphone" + }, + { + "scale": "1x", + "idiom": "iphone" + }, + { + "scale": "2x", + "idiom": "iphone" + }, + { + "subtype": "retina4", + "scale": "2x", + "idiom": "iphone" + }, + { + "scale": "3x", + "idiom": "iphone" + }, + { + "idiom": "ipad" + }, + { + "scale": "1x", + "idiom": "ipad" + }, + { + "scale": "2x", + "idiom": "ipad" + } + ], + "info": { + "version": 1, + "author": "xcode" + } +} \ No newline at end of file diff --git a/msbuild/tests/MyTVMetalGame/Assets.xcassets/Contents.json b/msbuild/tests/MyTVMetalGame/Assets.xcassets/Contents.json new file mode 100644 index 0000000000..da4a164c91 --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/msbuild/tests/MyTVMetalGame/Entitlements.plist b/msbuild/tests/MyTVMetalGame/Entitlements.plist new file mode 100644 index 0000000000..5ea1ec76e1 --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/Entitlements.plist @@ -0,0 +1,6 @@ + + + + + + diff --git a/msbuild/tests/MyTVMetalGame/GameViewController.cs b/msbuild/tests/MyTVMetalGame/GameViewController.cs new file mode 100644 index 0000000000..2f30e4b138 --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/GameViewController.cs @@ -0,0 +1,366 @@ +using System; +using System.Runtime.InteropServices; +using System.Threading; + +using CoreAnimation; +using CoreGraphics; +using Foundation; +using OpenTK; +using Metal; +using UIKit; + +namespace MyTVMetalGame { + public partial class GameViewController : UIViewController { + struct Uniforms { + public Matrix4 ModelviewProjectionMatrix; + public Matrix4 NormalMatrix; + } + + // The max number of command buffers in flight + const int max_inflight_buffers = 3; + + // Max API memory buffer size + const int max_bytes_per_frame = 1024 * 1024; + + float [] cubeVertexData = { + // Data layout for each line below is: + // positionX, positionY, positionZ, normalX, normalY, normalZ, + 0.5f, -0.5f, 0.5f, 0.0f, -1.0f, 0.0f, + -0.5f, -0.5f, 0.5f, 0.0f, -1.0f, 0.0f, + -0.5f, -0.5f, -0.5f, 0.0f, -1.0f, 0.0f, + 0.5f, -0.5f, -0.5f, 0.0f, -1.0f, 0.0f, + 0.5f, -0.5f, 0.5f, 0.0f, -1.0f, 0.0f, + -0.5f, -0.5f, -0.5f, 0.0f, -1.0f, 0.0f, + + 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f, + 0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 0.0f, + 0.5f, -0.5f, -0.5f, 1.0f, 0.0f, 0.0f, + 0.5f, 0.5f, -0.5f, 1.0f, 0.0f, 0.0f, + 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f, + 0.5f, -0.5f, -0.5f, 1.0f, 0.0f, 0.0f, + + -0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, + 0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, + 0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, + -0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, + -0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, + 0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, + + -0.5f, -0.5f, 0.5f, -1.0f, 0.0f, 0.0f, + -0.5f, 0.5f, 0.5f, -1.0f, 0.0f, 0.0f, + -0.5f, 0.5f, -0.5f, -1.0f, 0.0f, 0.0f, + -0.5f, -0.5f, -0.5f, -1.0f, 0.0f, 0.0f, + -0.5f, -0.5f, 0.5f, -1.0f, 0.0f, 0.0f, + -0.5f, 0.5f, -0.5f, -1.0f, 0.0f, 0.0f, + + 0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f, + -0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f, + -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, + -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, + 0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, + 0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f, + + 0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f, + -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f, + -0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f, + 0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f, + 0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f, + -0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f + }; + + // Layer + CAMetalLayer metalLayer; + MTLRenderPassDescriptor renderPassDescriptor; + + // Controller + CADisplayLink timer; + Semaphore inflightSemaphore; + IMTLBuffer dynamicConstantBuffer; + byte constantDataBufferIndex; + + // Renderer + IMTLDevice device; + IMTLCommandQueue commandQueue; + IMTLLibrary defaultLibrary; + IMTLRenderPipelineState pipelineState; + IMTLBuffer vertexBuffer; + IMTLDepthStencilState depthState; + IMTLTexture depthTex; + + // Uniforms + Matrix4 projectionMatrix; + Matrix4 viewMatrix; + Uniforms uniformBuffer; + float rotation; + + public GameViewController (IntPtr handle) : base (handle) + { + } + + public override void ViewDidLoad () + { + base.ViewDidLoad (); + + constantDataBufferIndex = 0; + inflightSemaphore = new Semaphore (max_inflight_buffers, max_inflight_buffers); + + SetupMetal (); + LoadAssets (); + + timer = CADisplayLink.Create (Gameloop); + timer.FrameInterval = 1; + timer.AddToRunLoop (NSRunLoop.Main, NSRunLoop.NSDefaultRunLoopMode); + } + + public override void DidReceiveMemoryWarning () + { + base.DidReceiveMemoryWarning (); + // Dispose of any resources that can be recreated. + } + + void SetupMetal () + { + // Find a usable device + device = MTLDevice.SystemDefault; + + // Create a new command queue + commandQueue = device.CreateCommandQueue (); + + // Load all the shader files with a metal file extension in the project + NSError error; + + defaultLibrary = device.CreateLibrary ("default.metallib", out error); + + // Setup metal layer and add as sub layer to view + metalLayer = new CAMetalLayer (); + metalLayer.Device = device; + metalLayer.PixelFormat = MTLPixelFormat.BGRA8Unorm; + + // Change this to NO if the compute encoder is used as the last pass on the drawable texture + metalLayer.FramebufferOnly = true; + + // Add metal layer to the views layer hierarchy + metalLayer.Frame = View.Layer.Frame; + View.Layer.AddSublayer (metalLayer); + + View.Opaque = true; + View.BackgroundColor = null; + View.ContentScaleFactor = UIScreen.MainScreen.Scale; + } + + void LoadAssets () + { + // Allocate one region of memory for the uniform buffer + dynamicConstantBuffer = device.CreateBuffer (max_bytes_per_frame, 0); + dynamicConstantBuffer.Label = "UniformBuffer"; + + // Load the fragment program into the library + IMTLFunction fragmentProgram = defaultLibrary.CreateFunction ("lighting_fragment"); + + // Load the vertex program into the library + IMTLFunction vertexProgram = defaultLibrary.CreateFunction ("lighting_vertex"); + + // Setup the vertex buffers + vertexBuffer = device.CreateBuffer (cubeVertexData, (MTLResourceOptions)0); + vertexBuffer.Label = "Vertices"; + + // Create a reusable pipeline state + var pipelineStateDescriptor = new MTLRenderPipelineDescriptor { + Label = "MyPipeline", + SampleCount = 1, + VertexFunction = vertexProgram, + FragmentFunction = fragmentProgram, + DepthAttachmentPixelFormat = MTLPixelFormat.Depth32Float + }; + + pipelineStateDescriptor.ColorAttachments [0].PixelFormat = MTLPixelFormat.BGRA8Unorm; + + NSError error; + + pipelineState = device.CreateRenderPipelineState (pipelineStateDescriptor, out error); + + if (pipelineState == null) + Console.WriteLine ("Failed to created pipeline state, error " + error); + + var depthStateDesc = new MTLDepthStencilDescriptor { + DepthCompareFunction = MTLCompareFunction.Less, + DepthWriteEnabled = true + }; + + depthState = device.CreateDepthStencilState (depthStateDesc); + } + + void SetupRenderPassDescriptorForTexture (IMTLTexture texture) + { + if (renderPassDescriptor == null) + renderPassDescriptor = MTLRenderPassDescriptor.CreateRenderPassDescriptor (); + + renderPassDescriptor.ColorAttachments [0].Texture = texture; + renderPassDescriptor.ColorAttachments [0].LoadAction = MTLLoadAction.Clear; + renderPassDescriptor.ColorAttachments [0].ClearColor = new MTLClearColor (0.65f, 0.65f, 0.65f, 1.0f); + renderPassDescriptor.ColorAttachments [0].StoreAction = MTLStoreAction.Store; + + if (depthTex == null || (depthTex.Width != texture.Width || depthTex.Height != texture.Height)) { + // If we need a depth texture and don't have one, or if the depth texture we have is the wrong size + // Then allocate one of the proper size + MTLTextureDescriptor desc = MTLTextureDescriptor.CreateTexture2DDescriptor (MTLPixelFormat.Depth32Float, texture.Width, texture.Height, false); + if (ObjCRuntime.Runtime.Arch == ObjCRuntime.Arch.SIMULATOR) + desc.StorageMode = MTLStorageMode.Private; depthTex = device.CreateTexture (desc); + depthTex.Label = "Depth"; + + renderPassDescriptor.DepthAttachment.Texture = depthTex; + renderPassDescriptor.DepthAttachment.LoadAction = MTLLoadAction.Clear; + renderPassDescriptor.DepthAttachment.ClearDepth = 1.0f; + renderPassDescriptor.DepthAttachment.StoreAction = MTLStoreAction.DontCare; + } + } + + void Render () + { + inflightSemaphore.WaitOne (); + + Update (); + + // Create a new command buffer for each renderpass to the current drawable + IMTLCommandBuffer commandBuffer = commandQueue.CommandBuffer (); + commandBuffer.Label = "MyCommand"; + + // Obtain a drawable texture for this render pass and set up the renderpass descriptor for the command encoder to render into + ICAMetalDrawable drawable = GetCurrentDrawable (); + + SetupRenderPassDescriptorForTexture (drawable.Texture); + + // Create a render command encoder so we can render into something + IMTLRenderCommandEncoder renderEncoder = commandBuffer.CreateRenderCommandEncoder (renderPassDescriptor); + renderEncoder.Label = "MyRenderEncoder"; + renderEncoder.SetDepthStencilState (depthState); + + // Set context state + renderEncoder.PushDebugGroup ("DrawCube"); + renderEncoder.SetRenderPipelineState (pipelineState); + renderEncoder.SetVertexBuffer (vertexBuffer, 0, 0); + renderEncoder.SetVertexBuffer (dynamicConstantBuffer, (nuint)(Marshal.SizeOf (typeof (Uniforms)) * constantDataBufferIndex), 1); + + // Tell the render context we want to draw our primitives + renderEncoder.DrawPrimitives (MTLPrimitiveType.Triangle, 0, 36, 1); + renderEncoder.PopDebugGroup (); + + // We're done encoding commands + renderEncoder.EndEncoding (); + + // Call the view's completion handler which is required by the view since it will signal its semaphore and set up the next buffer + commandBuffer.AddCompletedHandler (buffer => { + drawable.Dispose (); + inflightSemaphore.Release (); + }); + + // Schedule a present once the framebuffer is complete + commandBuffer.PresentDrawable (drawable); + + // Finalize rendering here & push the command buffer to the GPU + commandBuffer.Commit (); + + // The renderview assumes it can now increment the buffer index and that the previous index won't be touched until we cycle back around to the same index + constantDataBufferIndex = (byte)((constantDataBufferIndex + 1) % max_inflight_buffers); + } + + void Reshape () + { + // When reshape is called, update the view and projection matricies since this means the view orientation or size changed + var aspect = (float)(View.Bounds.Size.Width / View.Bounds.Size.Height); + projectionMatrix = CreateMatrixFromPerspective (65.0f * ((float)Math.PI / 180.0f), aspect, 0.1f, 100.0f); + + viewMatrix = Matrix4.Identity; + } + + void Update () + { + var baseModel = Matrix4.Mult (CreateMatrixFromTranslation (0.0f, 0.0f, 5.0f), CreateMatrixFromRotation (rotation, 0.0f, 1.0f, 0.0f)); + var baseMv = Matrix4.Mult (viewMatrix, baseModel); + var modelViewMatrix = Matrix4.Mult (baseMv, CreateMatrixFromRotation (rotation, 1.0f, 1.0f, 1.0f)); + + uniformBuffer.NormalMatrix = Matrix4.Invert (Matrix4.Transpose (modelViewMatrix)); + uniformBuffer.ModelviewProjectionMatrix = Matrix4.Transpose (Matrix4.Mult (projectionMatrix, modelViewMatrix)); + + // Copy uniformBuffer's content into dynamicConstantBuffer.Contents + int rawsize = Marshal.SizeOf (typeof (Uniforms)); + var rawdata = new byte [rawsize]; + IntPtr ptr = Marshal.AllocHGlobal (rawsize); + Marshal.StructureToPtr (uniformBuffer, ptr, false); + Marshal.Copy (ptr, rawdata, 0, rawsize); + Marshal.FreeHGlobal (ptr); + + Marshal.Copy (rawdata, 0, dynamicConstantBuffer.Contents + rawsize * constantDataBufferIndex, rawsize); + + rotation += 0.01f; + } + + // The main game loop called by the CADisplayLine timer + public void Gameloop () + { + Render (); + } + + // Called whenever view changes orientation or layout is changed + public override void ViewDidLayoutSubviews () + { + Reshape (); + } + + ICAMetalDrawable GetCurrentDrawable () + { + ICAMetalDrawable currentDrawable = null; + + while (currentDrawable == null) { + currentDrawable = metalLayer.NextDrawable (); + if (currentDrawable == null) + Console.WriteLine ("CurrentDrawable is null"); + } + + return currentDrawable; + } + + static Matrix4 CreateMatrixFromPerspective (float fovY, float aspect, float nearZ, float farZ) + { + float yscale = 1.0f / (float)Math.Tan (fovY * 0.5f); + float xscale = yscale / aspect; + float q = farZ / (farZ - nearZ); + + var m = new Matrix4 { + Row0 = new Vector4 (xscale, 0.0f, 0.0f, 0.0f), + Row1 = new Vector4 (0.0f, yscale, 0.0f, 0.0f), + Row2 = new Vector4 (0.0f, 0.0f, q, q * -nearZ), + Row3 = new Vector4 (0.0f, 0.0f, 1.0f, 0.0f) + }; + + return m; + } + + static Matrix4 CreateMatrixFromTranslation (float x, float y, float z) + { + var m = Matrix4.Identity; + m.Row0.W = x; + m.Row1.W = y; + m.Row2.W = z; + m.Row3.W = 1.0f; + return m; + } + + static Matrix4 CreateMatrixFromRotation (float radians, float x, float y, float z) + { + Vector3 v = Vector3.Normalize (new Vector3 (x, y, z)); + var cos = (float)Math.Cos (radians); + var sin = (float)Math.Sin (radians); + float cosp = 1.0f - cos; + + var m = new Matrix4 { + Row0 = new Vector4 (cos + cosp * v.X * v.X, cosp * v.X * v.Y - v.Z * sin, cosp * v.X * v.Z + v.Y * sin, 0.0f), + Row1 = new Vector4 (cosp * v.X * v.Y + v.Z * sin, cos + cosp * v.Y * v.Y, cosp * v.Y * v.Z - v.X * sin, 0.0f), + Row2 = new Vector4 (cosp * v.X * v.Z - v.Y * sin, cosp * v.Y * v.Z + v.X * sin, cos + cosp * v.Z * v.Z, 0.0f), + Row3 = new Vector4 (0.0f, 0.0f, 0.0f, 1.0f) + }; + + return m; + } + } +} diff --git a/msbuild/tests/MyTVMetalGame/GameViewController.designer.cs b/msbuild/tests/MyTVMetalGame/GameViewController.designer.cs new file mode 100644 index 0000000000..df0cae3777 --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/GameViewController.designer.cs @@ -0,0 +1,11 @@ +using Foundation; +using System.CodeDom.Compiler; + +namespace MyTVMetalGame { + [Register ("GameViewController")] + partial class GameViewController { + void ReleaseDesignerOutlets () + { + } + } +} diff --git a/msbuild/tests/MyTVMetalGame/Info.plist b/msbuild/tests/MyTVMetalGame/Info.plist new file mode 100644 index 0000000000..ebb4fa7dbc --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/Info.plist @@ -0,0 +1,45 @@ + + + + + CFBundleDisplayName + MyTVMetalGame + CFBundleName + MyTVMetalGame + CFBundleIdentifier + com.xamarin.MyTVMetalGame + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1.0 + MinimumOSVersion + 13.0 + UIDeviceFamily + + 3 + + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + arm64 + + GCSupportedGameControllers + + + ProfileName + ExtendedGamepad + + + ProfileName + MicroGamepad + + + GCSupportsControllerUserInteraction + + XSAppIconAssets + Assets.xcassets/App Icon & Top Shelf Image.brandassets + XSLaunchImageAssets + Assets.xcassets/LaunchImages.launchimage + + diff --git a/msbuild/tests/MyTVMetalGame/Main.cs b/msbuild/tests/MyTVMetalGame/Main.cs new file mode 100644 index 0000000000..d3e9ecbc84 --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/Main.cs @@ -0,0 +1,13 @@ +using UIKit; + +namespace MyTVMetalGame { + public class Application { + // This is the main entry point of the application. + static void Main (string [] args) + { + // if you want to use a different Application Delegate class from "AppDelegate" + // you can specify it here. + UIApplication.Main (args, null, "AppDelegate"); + } + } +} diff --git a/msbuild/tests/MyTVMetalGame/Main.storyboard b/msbuild/tests/MyTVMetalGame/Main.storyboard new file mode 100644 index 0000000000..3fd9e87a9e --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/Main.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/msbuild/tests/MyTVMetalGame/MyTVMetalGame.csproj b/msbuild/tests/MyTVMetalGame/MyTVMetalGame.csproj new file mode 100644 index 0000000000..056c6622be --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/MyTVMetalGame.csproj @@ -0,0 +1,125 @@ + + + + Debug + iPhoneSimulator + {CE09F37A-C1E9-488D-B72D-26269D735ECD} + {06FA79CB-D6CD-4721-BB4B-1BD202089C55};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Exe + MyTVMetalGame + MyTVMetalGame + Resources + + + true + full + false + bin\iPhoneSimulator\Debug + DEBUG; + prompt + 4 + iPhone Developer + true + true + true + 51092 + None + x86_64 + NSUrlSessionHandler + + + pdbonly + true + bin\iPhone\Release + prompt + 4 + iPhone Developer + true + true + true + Entitlements.plist + SdkOnly + ARM64 + NSUrlSessionHandler + + + pdbonly + true + bin\iPhoneSimulator\Release + prompt + 4 + iPhone Developer + true + None + x86_64 + NSUrlSessionHandler + + + true + full + false + bin\iPhone\Debug + DEBUG; + prompt + 4 + iPhone Developer + true + true + true + true + true + Entitlements.plist + 39926 + SdkOnly + ARM64 + NSUrlSessionHandler + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GameViewController.cs + + + + + + + \ No newline at end of file diff --git a/msbuild/tests/MyTVMetalGame/MyTVMetalGame.sln b/msbuild/tests/MyTVMetalGame/MyTVMetalGame.sln new file mode 100644 index 0000000000..6ad6a0c475 --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/MyTVMetalGame.sln @@ -0,0 +1,23 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyTVMetalGame", "MyTVMetalGame.csproj", "{CE09F37A-C1E9-488D-B72D-26269D735ECD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|iPhoneSimulator = Debug|iPhoneSimulator + Release|iPhone = Release|iPhone + Release|iPhoneSimulator = Release|iPhoneSimulator + Debug|iPhone = Debug|iPhone + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CE09F37A-C1E9-488D-B72D-26269D735ECD}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator + {CE09F37A-C1E9-488D-B72D-26269D735ECD}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator + {CE09F37A-C1E9-488D-B72D-26269D735ECD}.Release|iPhone.ActiveCfg = Release|iPhone + {CE09F37A-C1E9-488D-B72D-26269D735ECD}.Release|iPhone.Build.0 = Release|iPhone + {CE09F37A-C1E9-488D-B72D-26269D735ECD}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator + {CE09F37A-C1E9-488D-B72D-26269D735ECD}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator + {CE09F37A-C1E9-488D-B72D-26269D735ECD}.Debug|iPhone.ActiveCfg = Debug|iPhone + {CE09F37A-C1E9-488D-B72D-26269D735ECD}.Debug|iPhone.Build.0 = Debug|iPhone + EndGlobalSection +EndGlobal diff --git a/msbuild/tests/MyTVMetalGame/Shaders.metal b/msbuild/tests/MyTVMetalGame/Shaders.metal new file mode 100644 index 0000000000..8784015fd0 --- /dev/null +++ b/msbuild/tests/MyTVMetalGame/Shaders.metal @@ -0,0 +1,53 @@ +#include +#include + +using namespace metal; + +// Variables in constant address space +constant float3 light_position = float3(0.0, 1.0, -1.0); +constant float4 ambient_color = float4(0.18, 0.24, 0.8, 1.0); +constant float4 diffuse_color = float4(0.4, 0.4, 1.0, 1.0); + +typedef struct +{ + float4x4 modelview_projection_matrix; + float4x4 normal_matrix; +} uniforms_t; + +typedef struct +{ + packed_float3 position; + packed_float3 normal; +} vertex_t; + +typedef struct { + float4 position [[position]]; + half4 color; +} ColorInOut; + +// Vertex shader function +vertex ColorInOut lighting_vertex(device vertex_t* vertex_array [[ buffer(0) ]], + constant uniforms_t& uniforms [[ buffer(1) ]], + unsigned int vid [[ vertex_id ]]) +{ + ColorInOut out; + + float4 in_position = float4(float3(vertex_array[vid].position), 1.0); + out.position = uniforms.modelview_projection_matrix * in_position; + + + float3 normal = vertex_array[vid].normal; + float4 eye_normal = normalize(uniforms.normal_matrix * float4(normal, 0.0)); + float n_dot_l = dot(eye_normal.rgb, normalize(light_position)); + n_dot_l = fmax(0.0, n_dot_l); + + out.color = half4(ambient_color + diffuse_color * n_dot_l); + + return out; +} + +// Fragment shader function +fragment half4 lighting_fragment(ColorInOut in [[stage_in]]) +{ + return in.color; +} diff --git a/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/Extensions/CustomKeyboard.cs b/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/Extensions/CustomKeyboard.cs index 05cf526aa9..1334fb2fd5 100644 --- a/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/Extensions/CustomKeyboard.cs +++ b/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/Extensions/CustomKeyboard.cs @@ -17,13 +17,8 @@ namespace Xamarin.iOS.Tasks { [Test] public void BasicTest () { - if (Platform == "iPhoneSimulator") { - // Note: we expect an error due to Metal not being supported on iPhoneSimulator - // Note 2: msbuild now is aware that Metal is device-only and throws an error thus this test becomes device-only for time being - //this.BuildExtension ("MyMetalGame", "MyKeyboardExtension", Platform, 1); - return; - } - + if (Platform == "iPhoneSimulator" && Environment.OSVersion.Version.Major < 19) // Environment.OSVersion = 19.* in macOS Catalina. + Assert.Ignore ("Metal support is not available in the simulator until macOS 10.15."); this.BuildExtension ("MyMetalGame", "MyKeyboardExtension", Platform, "Debug"); this.TestStoryboardC (AppBundlePath); } diff --git a/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/TVOS/TVApp.cs b/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/TVOS/TVApp.cs index f32bcf818c..3078c24ffd 100644 --- a/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/TVOS/TVApp.cs +++ b/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/TVOS/TVApp.cs @@ -1,4 +1,6 @@ -using NUnit.Framework; +using System; + +using NUnit.Framework; namespace Xamarin.iOS.Tasks { @@ -13,7 +15,9 @@ namespace Xamarin.iOS.Tasks [Test] public void BasicTest() { - BuildExtension("MyTVApp", "MyTVServicesExtension", BundlePath, Platform, "Debug"); + if (Platform == "iPhoneSimulator" && Environment.OSVersion.Version.Major < 19) // Environment.OSVersion = 19.* in macOS Catalina. + Assert.Ignore ("Metal support is not available in the simulator until macOS 10.15."); + BuildExtension ("MyTVApp", "MyTVServicesExtension", BundlePath, Platform, "Debug"); } public override string TargetFrameworkIdentifier { diff --git a/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/TVOS/TVMetalGameTests.cs b/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/TVOS/TVMetalGameTests.cs new file mode 100644 index 0000000000..7ad2e384d1 --- /dev/null +++ b/msbuild/tests/Xamarin.iOS.Tasks.Tests/ProjectsTests/TVOS/TVMetalGameTests.cs @@ -0,0 +1,28 @@ +using System; + +using NUnit.Framework; + +namespace Xamarin.iOS.Tasks { + [TestFixture ("iPhone")] + [TestFixture ("iPhoneSimulator")] + public class TVMetalGameTests : ProjectTest { + public TVMetalGameTests (string platform) : base (platform) + { + } + + [Test] + public void BasicTest () + { + if (Platform == "iPhoneSimulator" && Environment.OSVersion.Version.Major < 19) // Environment.OSVersion = 19.* in macOS Catalina. + Assert.Ignore ("Metal support is not available in the simulator until macOS 10.15."); + BuildProject ("MyTVMetalGame", Platform, "Debug"); + } + + public override string TargetFrameworkIdentifier { + get { + return "Xamarin.TVOS"; + } + } + } +} + diff --git a/msbuild/tests/Xamarin.iOS.Tasks.Tests/TargetTests/TargetTests.cs b/msbuild/tests/Xamarin.iOS.Tasks.Tests/TargetTests/TargetTests.cs index afa7c0fdbf..d9c7fd1d3b 100644 --- a/msbuild/tests/Xamarin.iOS.Tasks.Tests/TargetTests/TargetTests.cs +++ b/msbuild/tests/Xamarin.iOS.Tasks.Tests/TargetTests/TargetTests.cs @@ -473,11 +473,9 @@ namespace Xamarin.iOS.Tasks Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (actool, "LaunchImage-568h@2x.png") && i.GetMetadataValue ("LogicalName") == "LaunchImage-568h@2x.png"), "#11"); Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (actool, "LaunchImage.png") && i.GetMetadataValue ("LogicalName") == "LaunchImage.png"), "#12"); Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (actool, "LaunchImage@2x.png") && i.GetMetadataValue ("LogicalName") == "LaunchImage@2x.png"), "#13"); - Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (ibtool, "MainStoryboard.storyboardc", "1-view-2.nib", "objects-13.0+.nib") && i.GetMetadataValue ("LogicalName") == "MainStoryboard.storyboardc/1-view-2.nib/objects-13.0+.nib"), "#14.1"); - Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (ibtool, "MainStoryboard.storyboardc", "1-view-2.nib", "runtime.nib") && i.GetMetadataValue ("LogicalName") == "MainStoryboard.storyboardc/1-view-2.nib/runtime.nib"), "#14.2"); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (ibtool, "MainStoryboard.storyboardc", "1-view-2.nib") && i.GetMetadataValue ("LogicalName") == "MainStoryboard.storyboardc/1-view-2.nib"), "#14"); Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (ibtool, "MainStoryboard.storyboardc", "Info.plist") && i.GetMetadataValue ("LogicalName") == "MainStoryboard.storyboardc/Info.plist"), "#15"); - Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (ibtool, "MainStoryboard.storyboardc", "UIViewController-1.nib", "objects-13.0+.nib") && i.GetMetadataValue ("LogicalName") == "MainStoryboard.storyboardc/UIViewController-1.nib/objects-13.0+.nib"), "#16.1"); - Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (ibtool, "MainStoryboard.storyboardc", "UIViewController-1.nib", "runtime.nib") && i.GetMetadataValue ("LogicalName") == "MainStoryboard.storyboardc/UIViewController-1.nib/runtime.nib"), "#16.2"); + Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (ibtool, "MainStoryboard.storyboardc", "UIViewController-1.nib") && i.GetMetadataValue ("LogicalName") == "MainStoryboard.storyboardc/UIViewController-1.nib"), "#16"); if (bundleItems.Length > ExpectedExecutableBundleResources.Length) { Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (ibtool, "en.lproj", "TranslatedView.nib", "runtime.nib") && i.GetMetadataValue ("LogicalName") == "en.lproj/TranslatedView.nib/runtime.nib"), "#17"); Assert.IsTrue (bundleItems.Any (i => i.EvaluatedInclude == Path.Combine (ibtool, "FolderView.nib", "runtime.nib") && i.GetMetadataValue ("LogicalName") == "FolderView.nib/runtime.nib"), "#18"); diff --git a/msbuild/tests/Xamarin.iOS.Tasks.Tests/TaskTests/IBToolTaskTests.cs b/msbuild/tests/Xamarin.iOS.Tasks.Tests/TaskTests/IBToolTaskTests.cs index 97e066c9ca..99ac8e2654 100644 --- a/msbuild/tests/Xamarin.iOS.Tasks.Tests/TaskTests/IBToolTaskTests.cs +++ b/msbuild/tests/Xamarin.iOS.Tasks.Tests/TaskTests/IBToolTaskTests.cs @@ -80,26 +80,21 @@ namespace Xamarin.iOS.Tasks bundleResources.Add (bundleResource.GetMetadata ("LogicalName")); } - string[] expected = { "LaunchScreen~ipad.nib/objects-8.0+.nib", - "LaunchScreen~ipad.nib/objects-13.0+.nib", + string[] expected = { "LaunchScreen~ipad.nib/runtime.nib", - "LaunchScreen~iphone.nib/objects-13.0+.nib", - "LaunchScreen~iphone.nib/objects-8.0+.nib", - "LaunchScreen~iphone.nib/runtime.nib", - "Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC~ipad.nib/objects-13.0+.nib", - "Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC~ipad.nib/objects-8.0+.nib", - "Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC~ipad.nib/runtime.nib", - "Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC~iphone.nib/objects-13.0+.nib", - "Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC~iphone.nib/objects-8.0+.nib", - "Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC~iphone.nib/runtime.nib", - "Main.storyboardc/UIViewController-BYZ-38-t0r~ipad.nib/objects-13.0+.nib", - "Main.storyboardc/UIViewController-BYZ-38-t0r~ipad.nib/objects-8.0+.nib", - "Main.storyboardc/UIViewController-BYZ-38-t0r~ipad.nib/runtime.nib", - "Main.storyboardc/UIViewController-BYZ-38-t0r~iphone.nib/objects-13.0+.nib", - "Main.storyboardc/UIViewController-BYZ-38-t0r~iphone.nib/objects-8.0+.nib", - "Main.storyboardc/UIViewController-BYZ-38-t0r~iphone.nib/runtime.nib", + "LaunchScreen~ipad.nib/objects-8.0+.nib", "Main~ipad.storyboardc/Info-8.0+.plist", "Main~ipad.storyboardc/Info.plist", + "Main.storyboardc/UIViewController-BYZ-38-t0r~ipad.nib/runtime.nib", + "Main.storyboardc/UIViewController-BYZ-38-t0r~ipad.nib/objects-8.0+.nib", + "Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC~iphone.nib/runtime.nib", + "Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC~iphone.nib/objects-8.0+.nib", + "Main.storyboardc/UIViewController-BYZ-38-t0r~iphone.nib/runtime.nib", + "Main.storyboardc/UIViewController-BYZ-38-t0r~iphone.nib/objects-8.0+.nib", + "Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC~ipad.nib/runtime.nib", + "Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC~ipad.nib/objects-8.0+.nib", + "LaunchScreen~iphone.nib/runtime.nib", + "LaunchScreen~iphone.nib/objects-8.0+.nib", "Main~iphone.storyboardc/Info-8.0+.plist", "Main~iphone.storyboardc/Info.plist", }; @@ -153,35 +148,23 @@ namespace Xamarin.iOS.Tasks ibtool.EnableOnDemandResources = true; string[] expected = { - "Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib/objects-13.0+.nib", - "Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib/runtime.nib", - "Base.lproj/LaunchScreen.storyboardc/Info.plist", - "Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib/objects-13.0+.nib", - "Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib/runtime.nib", - "Base.lproj/Linked.storyboardc/5xv-Yx-H4r-view-gMo-tm-chA.nib/objects-13.0+.nib", - "Base.lproj/Linked.storyboardc/5xv-Yx-H4r-view-gMo-tm-chA.nib/runtime.nib", - "Base.lproj/Linked.storyboardc/Info.plist", - "Base.lproj/Linked.storyboardc/MyLinkedViewController.nib/objects-13.0+.nib", - "Base.lproj/Linked.storyboardc/MyLinkedViewController.nib/runtime.nib", - "Base.lproj/Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC.nib/objects-13.0+.nib", - "Base.lproj/Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC.nib/runtime.nib", - "Base.lproj/Main.storyboardc/Info.plist", - "Base.lproj/Main.storyboardc/MyLinkedViewController.nib/objects-13.0+.nib", - "Base.lproj/Main.storyboardc/MyLinkedViewController.nib/runtime.nib", - "Base.lproj/Main.storyboardc/UIViewController-BYZ-38-t0r.nib/objects-13.0+.nib", - "Base.lproj/Main.storyboardc/UIViewController-BYZ-38-t0r.nib/runtime.nib", - "en.lproj/Linked.storyboardc/5xv-Yx-H4r-view-gMo-tm-chA.nib/objects-13.0+.nib", - "en.lproj/Linked.storyboardc/5xv-Yx-H4r-view-gMo-tm-chA.nib/runtime.nib", - "en.lproj/Linked.storyboardc/Info.plist", - "en.lproj/Linked.storyboardc/MyLinkedViewController.nib/objects-13.0+.nib", - "en.lproj/Linked.storyboardc/MyLinkedViewController.nib/runtime.nib", - "en.lproj/Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC.nib/objects-13.0+.nib", - "en.lproj/Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC.nib/runtime.nib", + "en.lproj/Main.storyboardc/UIViewController-BYZ-38-t0r.nib", + "en.lproj/Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC.nib", "en.lproj/Main.storyboardc/Info.plist", - "en.lproj/Main.storyboardc/MyLinkedViewController.nib/objects-13.0+.nib", - "en.lproj/Main.storyboardc/MyLinkedViewController.nib/runtime.nib", - "en.lproj/Main.storyboardc/UIViewController-BYZ-38-t0r.nib/objects-13.0+.nib", - "en.lproj/Main.storyboardc/UIViewController-BYZ-38-t0r.nib/runtime.nib", + "en.lproj/Main.storyboardc/MyLinkedViewController.nib", + "en.lproj/Linked.storyboardc/5xv-Yx-H4r-view-gMo-tm-chA.nib", + "en.lproj/Linked.storyboardc/Info.plist", + "en.lproj/Linked.storyboardc/MyLinkedViewController.nib", + "Base.lproj/Main.storyboardc/UIViewController-BYZ-38-t0r.nib", + "Base.lproj/Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC.nib", + "Base.lproj/Main.storyboardc/Info.plist", + "Base.lproj/Main.storyboardc/MyLinkedViewController.nib", + "Base.lproj/Linked.storyboardc/5xv-Yx-H4r-view-gMo-tm-chA.nib", + "Base.lproj/Linked.storyboardc/Info.plist", + "Base.lproj/Linked.storyboardc/MyLinkedViewController.nib", + "Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib", + "Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib", + "Base.lproj/LaunchScreen.storyboardc/Info.plist", }; var inexistentResource = bundleResources.Except (expected).ToArray (); @@ -237,16 +220,14 @@ namespace Xamarin.iOS.Tasks Assert.IsNotNullOrEmpty (bundleResource.GetMetadata ("Optimize"), "The 'Optimize' metadata must be set."); Assert.IsNotNullOrEmpty (tag, "The 'ResourceTags' metadata should be set."); - Assert.AreEqual (Path.Combine (tmp, "ibtool", tag + ".nib", Path.GetFileName (bundleName)), bundleResource.ItemSpec, $"BundleResource {bundleName} is not at the expected location."); + Assert.AreEqual (Path.Combine (tmp, "ibtool", tag + ".nib"), bundleResource.ItemSpec, $"BundleResource {bundleName} is not at the expected location."); bundleResources.Add (bundleName); } string[] expected = { - "View~ipad.nib/objects-13.0+.nib", - "View~ipad.nib/runtime.nib", - "View.nib/objects-13.0+.nib", - "View.nib/runtime.nib", + "View.nib", + "View~ipad.nib", }; var inexistentResource = bundleResources.Except (expected).ToArray (); diff --git a/runtime/Makefile b/runtime/Makefile index 6370c972e7..b4d74e1b4a 100644 --- a/runtime/Makefile +++ b/runtime/Makefile @@ -30,9 +30,13 @@ SHARED_FILES = $(SHARED_SOURCES) $(SHARED_HEADERS) $(SHARED_I386_SOURCES) $(SHAR EXTRA_DEPENDENCIES = $(SHARED_HEADERS) $(TOP)/Make.config $(TOP)/mk/mono.mk +ifdef INJECT_X86_64_SLICE X86_64_SLICE=$(abspath $(CURDIR)/x86-64-slice.dylib) $(X86_64_SLICE): Makefile $(Q) echo "void xamarin_x86_64_function_for_notarization_workaround_v2 () {}" | $(MAC_CC) -shared -x c -o$@ - +else +X86_64_SLICE= +endif xamarin/mono-runtime.h: mono-runtime.h.t4 exports.t4 $(Q_GEN) $(TT) $< -o $@ diff --git a/src/CoreBluetooth/Enums.cs b/src/CoreBluetooth/Enums.cs index 351c8286a8..33437e5cf0 100644 --- a/src/CoreBluetooth/Enums.cs +++ b/src/CoreBluetooth/Enums.cs @@ -117,6 +117,8 @@ namespace CoreBluetooth { UnknownDevice, [iOS (12,0)][TV (12,0)][Mac (10,14)][Watch (5,0)] OperationNotSupported, + PeerRemovedPairingInformation, + EncryptionTimedOut, } [Watch (4,0)] diff --git a/src/CoreGraphics/CGColorSpace.cs b/src/CoreGraphics/CGColorSpace.cs index 140d644572..9cc755ab3a 100644 --- a/src/CoreGraphics/CGColorSpace.cs +++ b/src/CoreGraphics/CGColorSpace.cs @@ -535,11 +535,19 @@ namespace CoreGraphics { [Mac (10,15)][iOS(13,0)] [TV (13,0)][Watch (6,0)] + [Deprecated (PlatformName.MacOSX, 10,15,4)] + [Deprecated (PlatformName.iOS, 13,4)] + [Deprecated (PlatformName.TvOS, 13,4)] + [Deprecated (PlatformName.WatchOS, 6,2)] [DllImport (Constants.CoreGraphicsLibrary)] static extern bool CGColorSpaceIsHDR (/* CGColorSpaceRef */ IntPtr space); [Mac (10,15)][iOS(13,0)] [TV (13,0)][Watch (6,0)] + [Deprecated (PlatformName.MacOSX, 10,15,4)] + [Deprecated (PlatformName.iOS, 13,4)] + [Deprecated (PlatformName.TvOS, 13,4)] + [Deprecated (PlatformName.WatchOS, 6,2)] public bool IsHdr { get { return CGColorSpaceIsHDR (handle); diff --git a/src/CoreText/CTEnums.cs b/src/CoreText/CTEnums.cs index ac02320166..18bd7caaba 100644 --- a/src/CoreText/CTEnums.cs +++ b/src/CoreText/CTEnums.cs @@ -41,6 +41,7 @@ namespace CoreText { InvalidFontData = 104, AlreadyRegistered = 105, ExceededResourceLimit = 106, + AssetNotFound = 107, NotRegistered = 201, InUse = 202, SystemRequired = 203, diff --git a/src/Intents/INIntentResolutionResult.cs b/src/Intents/INIntentResolutionResult.cs index b0dfed9dc6..01470f2361 100644 --- a/src/Intents/INIntentResolutionResult.cs +++ b/src/Intents/INIntentResolutionResult.cs @@ -44,6 +44,14 @@ namespace Intents { throw new NotImplementedException ("All subclasses of INIntentResolutionResult must re-implement this property"); } } + +#if !MONOMAC + [Watch (6,0), iOS (13,0)] + public static INIntentResolutionResult GetUnsupported (nint reason) => throw new NotImplementedException ("All subclasses of INIntentResolutionResult must re-implement this method"); + + [Watch (6,0), iOS (13,0)] + public static INIntentResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason) => throw new NotImplementedException ("All subclasses of INIntentResolutionResult must re-implement this method"); +#endif } } #endif // XAMCORE_2_0 diff --git a/src/LocalAuthentication/LAEnums.cs b/src/LocalAuthentication/LAEnums.cs index b06bc463bd..13e2213b1d 100644 --- a/src/LocalAuthentication/LAEnums.cs +++ b/src/LocalAuthentication/LAEnums.cs @@ -60,7 +60,9 @@ namespace LocalAuthentication { [iOS (9,0), Mac (10,11), Watch (3,0), TV (11,0)] [Native] public enum LACredentialType : long { - ApplicationPassword = 0 + ApplicationPassword = 0, + [iOS (13,4), Mac (10,15,4), NoWatch, NoTV] + SmartCardPin = -3, } [iOS (9,0)] diff --git a/src/SafariServices/SSEnums.cs b/src/SafariServices/SSEnums.cs index f3214628fa..14e77b28c1 100644 --- a/src/SafariServices/SSEnums.cs +++ b/src/SafariServices/SSEnums.cs @@ -27,7 +27,7 @@ namespace SafariServices { [NoMac] [iOS (9,0)] [Deprecated (PlatformName.iOS, 10,0, message: "Use 'SFErrorCode' enum.")] - [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")] + [Introduced (PlatformName.MacCatalyst, 13, 4)] [Native] [ErrorDomain ("SFContentBlockerErrorDomain")] public enum SFContentBlockerErrorCode : long { diff --git a/src/UIKit/UIEnums.cs b/src/UIKit/UIEnums.cs index c46d0d5afe..2a62fcb206 100644 --- a/src/UIKit/UIEnums.cs +++ b/src/UIKit/UIEnums.cs @@ -2672,4 +2672,198 @@ namespace UIKit { [Field ("UIActivityItemsConfigurationPreviewIntentThumbnail")] Thumbnail, } + + [NoWatch, NoTV, iOS (13,4)] + [Native] + public enum UIDatePickerStyle : long { + Automatic, + Wheels, + Compact, + } + + [Introduced (PlatformName.MacCatalyst, 13, 4)] + [iOS (13,4), NoWatch, TV (13,4)] + [Native] + public enum UIKeyboardHidUsage : long { + KeyboardErrorRollOver = 1, + KeyboardPostFail = 2, + KeyboardErrorUndefined = 3, + KeyboardA = 4, + KeyboardB = 5, + KeyboardC = 6, + KeyboardD = 7, + KeyboardE = 8, + KeyboardF = 9, + KeyboardG = 10, + KeyboardH = 11, + KeyboardI = 12, + KeyboardJ = 13, + KeyboardK = 14, + KeyboardL = 15, + KeyboardM = 16, + KeyboardN = 17, + KeyboardO = 18, + KeyboardP = 19, + KeyboardQ = 20, + KeyboardR = 21, + KeyboardS = 22, + KeyboardT = 23, + KeyboardU = 24, + KeyboardV = 25, + KeyboardW = 26, + KeyboardX = 27, + KeyboardY = 28, + KeyboardZ = 29, + Keyboard1 = 30, + Keyboard2 = 31, + Keyboard3 = 32, + Keyboard4 = 33, + Keyboard5 = 34, + Keyboard6 = 35, + Keyboard7 = 36, + Keyboard8 = 37, + Keyboard9 = 38, + Keyboard0 = 39, + KeyboardReturnOrEnter = 40, + KeyboardEscape = 41, + KeyboardDeleteOrBackspace = 42, + KeyboardTab = 43, + KeyboardSpacebar = 44, + KeyboardHyphen = 45, + KeyboardEqualSign = 46, + KeyboardOpenBracket = 47, + KeyboardCloseBracket = 48, + KeyboardBackslash = 49, + KeyboardNonUSPound = 50, + KeyboardSemicolon = 51, + KeyboardQuote = 52, + KeyboardGraveAccentAndTilde = 53, + KeyboardComma = 54, + KeyboardPeriod = 55, + KeyboardSlash = 56, + KeyboardCapsLock = 57, + KeyboardF1 = 58, + KeyboardF2 = 59, + KeyboardF3 = 60, + KeyboardF4 = 61, + KeyboardF5 = 62, + KeyboardF6 = 63, + KeyboardF7 = 64, + KeyboardF8 = 65, + KeyboardF9 = 66, + KeyboardF10 = 67, + KeyboardF11 = 68, + KeyboardF12 = 69, + KeyboardPrintScreen = 70, + KeyboardScrollLock = 71, + KeyboardPause = 72, + KeyboardInsert = 73, + KeyboardHome = 74, + KeyboardPageUp = 75, + KeyboardDeleteForward = 76, + KeyboardEnd = 77, + KeyboardPageDown = 78, + KeyboardRightArrow = 79, + KeyboardLeftArrow = 80, + KeyboardDownArrow = 81, + KeyboardUpArrow = 82, + KeypadNumLock = 83, + KeypadSlash = 84, + KeypadAsterisk = 85, + KeypadHyphen = 86, + KeypadPlus = 87, + KeypadEnter = 88, + Keypad1 = 89, + Keypad2 = 90, + Keypad3 = 91, + Keypad4 = 92, + Keypad5 = 93, + Keypad6 = 94, + Keypad7 = 95, + Keypad8 = 96, + Keypad9 = 97, + Keypad0 = 98, + KeypadPeriod = 99, + KeyboardNonUSBackslash = 100, + KeyboardApplication = 101, + KeyboardPower = 102, + KeypadEqualSign = 103, + KeyboardF13 = 104, + KeyboardF14 = 105, + KeyboardF15 = 106, + KeyboardF16 = 107, + KeyboardF17 = 108, + KeyboardF18 = 109, + KeyboardF19 = 110, + KeyboardF20 = 111, + KeyboardF21 = 112, + KeyboardF22 = 113, + KeyboardF23 = 114, + KeyboardF24 = 115, + KeyboardExecute = 116, + KeyboardHelp = 117, + KeyboardMenu = 118, + KeyboardSelect = 119, + KeyboardStop = 120, + KeyboardAgain = 121, + KeyboardUndo = 122, + KeyboardCut = 123, + KeyboardCopy = 124, + KeyboardPaste = 125, + KeyboardFind = 126, + KeyboardMute = 127, + KeyboardVolumeUp = 128, + KeyboardVolumeDown = 129, + KeyboardLockingCapsLock = 130, + KeyboardLockingNumLock = 131, + KeyboardLockingScrollLock = 132, + KeypadComma = 133, + KeypadEqualSignAS400 = 134, + KeyboardInternational1 = 135, + KeyboardInternational2 = 136, + KeyboardInternational3 = 137, + KeyboardInternational4 = 138, + KeyboardInternational5 = 139, + KeyboardInternational6 = 140, + KeyboardInternational7 = 141, + KeyboardInternational8 = 142, + KeyboardInternational9 = 143, + KeyboardLang1 = 144, + KeyboardLang2 = 145, + KeyboardLang3 = 146, + KeyboardLang4 = 147, + KeyboardLang5 = 148, + KeyboardLang6 = 149, + KeyboardLang7 = 150, + KeyboardLang8 = 151, + KeyboardLang9 = 152, + KeyboardAlternateErase = 153, + KeyboardSysReqOrAttention = 154, + KeyboardCancel = 155, + KeyboardClear = 156, + KeyboardPrior = 157, + KeyboardReturn = 158, + KeyboardSeparator = 159, + KeyboardOut = 160, + KeyboardOper = 161, + KeyboardClearOrAgain = 162, + KeyboardCrSelOrProps = 163, + KeyboardExSel = 164, + KeyboardLeftControl = 224, + KeyboardLeftShift = 225, + KeyboardLeftAlt = 226, + KeyboardLeftGui = 227, + KeyboardRightControl = 228, + KeyboardRightShift = 229, + KeyboardRightAlt = 230, + KeyboardRightGui = 231, + KeyboardReserved = 65535, + KeyboardHangul = KeyboardLang1, + KeyboardHanja = KeyboardLang2, + KeyboardKanaSwitch = KeyboardLang1, + KeyboardAlphanumericSwitch = KeyboardLang2, + KeyboardKatakana = KeyboardLang3, + KeyboardHiragana = KeyboardLang4, + KeyboardZenkakuHankakuKanji = KeyboardLang5, + } } diff --git a/src/appkit.cs b/src/appkit.cs index 8fb16251d8..0be24a4014 100644 --- a/src/appkit.cs +++ b/src/appkit.cs @@ -5210,6 +5210,10 @@ namespace AppKit { [Export ("maxDate", ArgumentSemantic.Copy)] NSDate MaxDate { get; set; } + [Mac (10,15,4)] + [Export ("presentsCalendarOverlay")] + bool PresentsCalendarOverlay { get; set; } + [Export ("delegate", ArgumentSemantic.Assign), NullAllowed] NSObject WeakDelegate { get; set; } diff --git a/src/authenticationservices.cs b/src/authenticationservices.cs index c2b9a464b5..a22580344b 100644 --- a/src/authenticationservices.cs +++ b/src/authenticationservices.cs @@ -55,13 +55,16 @@ namespace AuthenticationServices { Url, } - [NoTV][NoWatch] + [NoTV] + [Watch (6,2)] [Mac (10,15)] [iOS (12,0)] [Native] [ErrorDomain ("ASWebAuthenticationSessionErrorDomain")] public enum ASWebAuthenticationSessionErrorCode : long { CanceledLogin = 1, + PresentationContextNotProvided = 2, + PresentationContextInvalid = 3, } delegate void ASCredentialIdentityStoreCompletionHandler (bool success, NSError error); @@ -213,7 +216,8 @@ namespace AuthenticationServices { delegate void ASWebAuthenticationSessionCompletionHandler ([NullAllowed] NSUrl callbackUrl, [NullAllowed] NSError error); - [NoTV][NoWatch] + [NoTV] + [Watch (6,2)] [Mac (10, 15)] [iOS (12,0)] [BaseType (typeof (NSObject))] @@ -228,13 +232,17 @@ namespace AuthenticationServices { [Export ("cancel")] void Cancel (); - [iOS (13,0)] + [iOS (13,0), NoWatch] [NullAllowed, Export ("presentationContextProvider", ArgumentSemantic.Weak)] IASWebAuthenticationPresentationContextProviding PresentationContextProvider { get; set; } [iOS (13,0)] [Export ("prefersEphemeralWebBrowserSession")] bool PrefersEphemeralWebBrowserSession { get; set; } + + [Mac (10,15,4), iOS (13,4)] + [Export ("canStart")] + bool CanStart { get; } } [Watch (6,0), TV (13,0), Mac (10,15), iOS (13,0)] diff --git a/src/avfoundation.cs b/src/avfoundation.cs index da307d3d1a..0cf6a984be 100644 --- a/src/avfoundation.cs +++ b/src/avfoundation.cs @@ -10843,13 +10843,13 @@ namespace AVFoundation { [Export ("preventsDisplaySleepDuringVideoPlayback")] bool PreventsDisplaySleepDuringVideoPlayback { get; set; } - [NoWatch, NoTV, NoiOS, Mac (10,15)] + [TV (13,4), NoWatch, Mac (10,15), iOS (13,4)] [Static] [Export ("eligibleForHDRPlayback")] bool EligibleForHdrPlayback { get; } [Notification] - [NoWatch, NoTV, NoiOS, Mac (10, 15)] + [TV (13,4), NoWatch, Mac (10,15), iOS (13,4)] [Field ("AVPlayerEligibleForHDRPlaybackDidChangeNotification")] NSString EligibleForHdrPlaybackDidChangeNotification { get; } } diff --git a/src/callkit.cs b/src/callkit.cs index ef76cc2527..d8e143ac6b 100644 --- a/src/callkit.cs +++ b/src/callkit.cs @@ -302,6 +302,13 @@ namespace CallKit { [Async] [Export ("getEnabledStatusForExtensionWithIdentifier:completionHandler:")] void GetEnabledStatusForExtension (string identifier, Action completion); + + [Unavailable (PlatformName.MacCatalyst)] + [NoWatch, NoTV, NoMac, iOS (13,4)] + [Advice ("This API is not available when using UIKit on macOS.")] + [Async] + [Export ("openSettingsWithCompletionHandler:")] + void OpenSettings ([NullAllowed] Action completion); } [iOS (10, 0)] diff --git a/src/carplay.cs b/src/carplay.cs index 72ff70abc7..10aab1755d 100644 --- a/src/carplay.cs +++ b/src/carplay.cs @@ -940,5 +940,72 @@ namespace CarPlay { [Export ("actions", ArgumentSemantic.Strong)] CPAlertAction [] Actions { get; } } + + [NoWatch, NoTV, NoMac, iOS (13,4)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface CPDashboardButton : NSSecureCoding { + + [Export ("initWithTitleVariants:subtitleVariants:image:handler:")] + [DesignatedInitializer] + IntPtr Constructor (string[] titleVariants, string[] subtitleVariants, UIImage image, [NullAllowed] Action handler); + + [Export ("image")] + UIImage Image { get; } + + [Export ("titleVariants")] + string [] TitleVariants { get; } + + [Export ("subtitleVariants")] + string [] SubtitleVariants { get; } + } + + [NoWatch, NoTV, NoMac, iOS (13,4)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface CPDashboardController { + + [Export ("shortcutButtons", ArgumentSemantic.Copy)] + CPDashboardButton [] ShortcutButtons { get; set; } + } + + interface ICPTemplateApplicationDashboardSceneDelegate { } + + [NoWatch, NoTV, NoMac, iOS (13,4)] + [Protocol, Model (AutoGeneratedName = true)] + [BaseType (typeof (NSObject))] + interface CPTemplateApplicationDashboardSceneDelegate : UISceneDelegate { + + [Export ("templateApplicationDashboardScene:didConnectDashboardController:toWindow:")] + void DidConnectDashboardController (CPTemplateApplicationDashboardScene templateApplicationDashboardScene, CPDashboardController dashboardController, UIWindow window); + + [Export ("templateApplicationDashboardScene:didDisconnectDashboardController:fromWindow:")] + void DidDisconnectDashboardController (CPTemplateApplicationDashboardScene templateApplicationDashboardScene, CPDashboardController dashboardController, UIWindow window); + } + + [NoWatch, NoTV, NoMac, iOS (13,4)] + [BaseType (typeof (UIScene))] + interface CPTemplateApplicationDashboardScene { + + [Field ("CPTemplateApplicationDashboardSceneSessionRoleApplication")] + NSString SessionRoleApplication { get; } + + [Export ("initWithSession:connectionOptions:")] + [DesignatedInitializer] + IntPtr Constructor (UISceneSession session, UISceneConnectionOptions connectionOptions); + + [Wrap ("WeakDelegate")] + [NullAllowed, New] + ICPTemplateApplicationDashboardSceneDelegate Delegate { get; set; } + + [NullAllowed, Export ("delegate", ArgumentSemantic.Strong), New] + NSObject WeakDelegate { get; set; } + + [Export ("dashboardController", ArgumentSemantic.Strong)] + CPDashboardController DashboardController { get; } + + [Export ("dashboardWindow", ArgumentSemantic.Strong)] + UIWindow DashboardWindow { get; } + } } #endif // XAMCORE_2_0 diff --git a/src/classkit.cs b/src/classkit.cs index 264b292181..f40953295b 100644 --- a/src/classkit.cs +++ b/src/classkit.cs @@ -11,6 +11,7 @@ using System; using Foundation; using ObjCRuntime; +using CoreGraphics; using System.Reflection; namespace ClassKit { @@ -44,6 +45,10 @@ namespace ClassKit { Document, Audio, Video, + [iOS (13,4)] + Course, + [iOS (13,4)] + Custom, } [NoWatch, NoTV, NoMac, iOS (11,4)] @@ -195,6 +200,10 @@ namespace ClassKit { [DisableDefaultCtor] interface CLSContext { + [iOS (13,4)] + [Export ("identifierPath", ArgumentSemantic.Copy)] + string [] IdentifierPath { get; } + [Export ("identifier")] string Identifier { get; } @@ -204,12 +213,24 @@ namespace ClassKit { [Export ("type", ArgumentSemantic.Assign)] CLSContextType Type { get; } + [iOS (13,4)] + [NullAllowed, Export ("customTypeName")] + string CustomTypeName { get; set; } + [Export ("title")] string Title { get; set; } [Export ("displayOrder")] nint DisplayOrder { get; set; } + [iOS (13,4)] + [NullAllowed, Export ("summary")] + string Summary { get; set; } + + [iOS (13,4)] + [NullAllowed, Export ("thumbnail", ArgumentSemantic.Assign)] + CGImage Thumbnail { get; set; } + [Protected] [NullAllowed, Export ("topic")] NSString WeakTopic { get; set; } diff --git a/src/contacts.cs b/src/contacts.cs index c92c9d1628..308d9ec984 100644 --- a/src/contacts.cs +++ b/src/contacts.cs @@ -1443,7 +1443,7 @@ namespace Contacts { [Export ("value", ArgumentSemantic.Strong)] NSObject Value { get; } - [Export ("currentHistoryToken", ArgumentSemantic.Copy)] + [Export ("currentHistoryToken", ArgumentSemantic.Copy), NullAllowed] NSData CurrentHistoryToken { get; } } diff --git a/src/coregraphics.cs b/src/coregraphics.cs index ae5f7ead6d..553e850a6d 100644 --- a/src/coregraphics.cs +++ b/src/coregraphics.cs @@ -207,14 +207,30 @@ namespace CoreGraphics { [Mac (10,14)][iOS (12,0)] [TV (12,0)][Watch (5,0)] + [Deprecated (PlatformName.MacOSX, 10,15,4)] + [Deprecated (PlatformName.iOS, 13,4)] + [Deprecated (PlatformName.TvOS, 13,4)] + [Deprecated (PlatformName.WatchOS, 6,2)] [Field ("kCGColorSpaceITUR_2020_PQ_EOTF")] NSString Itur_2020_PQ_Eotf { get; } + [Mac (10,15,4), iOS (13,4), TV (13,4), Watch (6,2)] + [Field ("kCGColorSpaceITUR_2020_PQ")] + NSString Itur_2020_PQ { get; } + [Mac (10,15)][iOS (13,0)] [TV (13,0)][Watch (6,0)] + [Deprecated (PlatformName.MacOSX, 10,15,4)] + [Deprecated (PlatformName.iOS, 13,4)] + [Deprecated (PlatformName.TvOS, 13,4)] + [Deprecated (PlatformName.WatchOS, 6,2)] [Field ("kCGColorSpaceDisplayP3_PQ_EOTF")] NSString DisplayP3_PQ_Eotf { get; } + [Mac (10,15,4), iOS (13,4), TV (13,4), Watch (6,2)] + [Field ("kCGColorSpaceDisplayP3_PQ")] + NSString DisplayP3_PQ { get; } + [Mac (10,15)][iOS (13,0)] [TV (13,0)][Watch (6,0)] [Field ("kCGColorSpaceDisplayP3_HLG")] diff --git a/src/coreimage.cs b/src/coreimage.cs index 89a8582b3e..ed79da64d5 100644 --- a/src/coreimage.cs +++ b/src/coreimage.cs @@ -2863,10 +2863,9 @@ namespace CoreImage { [CoreImageFilterProperty ("outputImageNonMPS")] CIImage OutputImageNonMps { get; } -#if MONOMAC + [iOS (13,4)] [CoreImageFilterProperty ("outputImageMPS")] CIImage OutputImageMps { get; } -#endif } [CoreImageFilter] @@ -5331,10 +5330,9 @@ namespace CoreImage { [CoreImageFilterProperty ("outputImageNonMPS")] CIImage OutputImageNonMps { get; } -#if MONOMAC + [iOS (13,4)] [CoreImageFilterProperty ("outputImageMPS")] CIImage OutputImageMps { get; } -#endif } [CoreImageFilter] diff --git a/src/corelocation.cs b/src/corelocation.cs index 52fb16e09d..893cd057dc 100644 --- a/src/corelocation.cs +++ b/src/corelocation.cs @@ -92,11 +92,19 @@ namespace CoreLocation { [Export ("course")] double Course { get; } + [Watch (6,2), TV (13,4), Mac (10,15,4), iOS (13,4)] + [Export ("courseAccuracy")] + double CourseAccuracy { get; } + [TV (13,0)] // API_UNAVAILABLE(tvos) removed in Xcode 11 beta 1 [Watch (3,0)] // __WATCHOS_PROHIBITED removed in Xcode 8 beta 3 [Export ("speed")] double Speed { get; } + [Watch (6,2), TV (13,4), Mac (10,15,4), iOS (13,4)] + [Export ("speedAccuracy")] + double SpeedAccuracy { get; } + [Export ("timestamp", ArgumentSemantic.Copy)] NSDate Timestamp { get; } @@ -112,6 +120,10 @@ namespace CoreLocation { [Export ("initWithCoordinate:altitude:horizontalAccuracy:verticalAccuracy:course:speed:timestamp:")] IntPtr Constructor (CLLocationCoordinate2D coordinate, double altitude, double hAccuracy, double vAccuracy, double course, double speed, NSDate timestamp); + [Watch (6,2), TV (13,4), Mac (10,15,4), iOS (13,4)] + [Export ("initWithCoordinate:altitude:horizontalAccuracy:verticalAccuracy:course:courseAccuracy:speed:speedAccuracy:timestamp:")] + IntPtr Constructor (CLLocationCoordinate2D coordinate, double altitude, double hAccuracy, double vAccuracy, double course, double courseAccuracy, double speed, double speedAccuracy, NSDate timestamp); + // Apple keep changing the 'introduction' of this field (5.0->8.0->5.0) but it was not available in 6.1 // nor in 7.0 - but it works on my iPad3 running iOS 7.1 [NoTV][NoWatch] diff --git a/src/gamekit.cs b/src/gamekit.cs index 35c333d655..31c8893ca5 100644 --- a/src/gamekit.cs +++ b/src/gamekit.cs @@ -689,6 +689,9 @@ namespace GameKit { GKLeaderboardTimeScope TimeScope { get; set; } } + [Watch (6,2), TV (13,4), Mac (10,15,4), iOS (13,4)] + delegate void GKFetchItemsForIdentityVerificationSignatureCompletionHandler (NSUrl publicKeyUrl, NSData signature, NSData salt, ulong timestamp, NSError error); + [Watch (3,0)] [BaseType (typeof (GKPlayer))] interface GKLocalPlayer @@ -791,11 +794,20 @@ namespace GameKit { [Export ("unregisterAllListeners")] void UnregisterAllListeners (); + [Deprecated (PlatformName.iOS, 13, 4, message: "Use 'FetchItemsForIdentityVerificationSignature' instead.")] + [Deprecated (PlatformName.TvOS, 13, 4, message: "Use 'FetchItemsForIdentityVerificationSignature' instead.")] + [Deprecated (PlatformName.MacOSX, 10, 15, 4, message: "Use 'FetchItemsForIdentityVerificationSignature' instead.")] + [Deprecated (PlatformName.WatchOS, 6, 2, message: "Use 'FetchItemsForIdentityVerificationSignature' instead.")] [iOS (7,0), Mac (10,10)] [Async (ResultTypeName = "GKIdentityVerificationSignatureResult")] [Export ("generateIdentityVerificationSignatureWithCompletionHandler:")] void GenerateIdentityVerificationSignature ([NullAllowed] GKIdentityVerificationSignatureHandler completionHandler); + [Watch (6,2), TV (13,4), Mac (10,15,4), iOS (13,4)] + [Async (ResultTypeName = "GKFetchItemsForIdentityVerificationSignature")] + [Export ("fetchItemsForIdentityVerificationSignature:")] + void FetchItemsForIdentityVerificationSignature ([NullAllowed] GKFetchItemsForIdentityVerificationSignatureCompletionHandler completionHandler); + [iOS (8,0), Mac (10,10)] [Deprecated (PlatformName.iOS, 10, 0)] [Deprecated (PlatformName.MacOSX, 10, 11)] diff --git a/src/intents.cs b/src/intents.cs index 03e6a16b87..15b2bf855a 100644 --- a/src/intents.cs +++ b/src/intents.cs @@ -26,6 +26,15 @@ using UIKit; namespace Intents { + // HACK only to please the generator - which does not (normally) know the type hierarchy in the + // binding files. The lack of namespace will generate the correct code for the C# compiler + // this is used for NSMeasurement objects. + interface NSUnitTemperature : NSUnit {} + interface NSUnitVolume : NSUnit {} + interface NSUnitSpeed : NSUnit {} + interface NSUnitEnergy : NSUnit {} + interface NSUnitMass : NSUnit {} + [iOS (10, 0)] [Unavailable (PlatformName.MacOSX)] [Unavailable (PlatformName.WatchOS)] @@ -62,6 +71,12 @@ namespace Intents { Latest, [Watch (4,0), Mac (10,13), iOS (11,0)] Voicemail, + [Watch (6,0), Mac (10,15), iOS (13,0)] + Ringing, + [Watch (6,0), Mac (10,15), iOS (13,0)] + InProgress, + [Watch (6,0), Mac (10,15), iOS (13,0)] + OnHold, } [iOS (10, 0)] @@ -509,7 +524,9 @@ namespace Intents { FailureRequiringAppLaunchMustVerifyCredentials, FailureRequiringAppLaunchNoServiceInArea, FailureRequiringAppLaunchServiceTemporarilyUnavailable, - FailureRequiringAppLaunchPreviousRideNeedsCompletion + FailureRequiringAppLaunchPreviousRideNeedsCompletion, + [iOS (13,0), Watch (6,0)] + FailureRequiringAppLaunchRideScheduledTooFar, } [iOS (10, 0)] @@ -762,6 +779,9 @@ namespace Intents { Authorized } + [Deprecated (PlatformName.iOS, 13, 0, message: "Use 'INStartCallIntentResponseCode' instead.")] + [Deprecated (PlatformName.MacOSX, 10, 15, message: "Use 'INStartCallIntentResponseCode' instead.")] + [Deprecated (PlatformName.WatchOS, 6, 0, message: "Use 'INStartCallIntentResponseCode' instead.")] [iOS (10, 0)] [Mac (10, 12, 0, PlatformArchitecture.Arch64)] [Watch (3, 2)] @@ -798,6 +818,9 @@ namespace Intents { FailureAppConfigurationRequired, } + [Deprecated (PlatformName.iOS, 13, 0, message: "Use 'INStartCallIntentResponseCode' instead.")] + [Deprecated (PlatformName.MacOSX, 10, 15, message: "Use 'INStartCallIntentResponseCode' instead.")] + [Deprecated (PlatformName.WatchOS, 6, 0, message: "Use 'INStartCallIntentResponseCode' instead.")] [iOS (10, 0)] [Mac (10, 12, 0, PlatformArchitecture.Arch64)] [Unavailable (PlatformName.WatchOS)] @@ -842,7 +865,7 @@ namespace Intents { [iOS (10, 0)] [Unavailable (PlatformName.MacOSX)] - [Unavailable (PlatformName.WatchOS)] + [Watch (6, 0)] [Native] public enum INVocabularyStringType : long { ContactName = 1, @@ -861,6 +884,16 @@ namespace Intents { NotebookItemTitle = 500, [iOS (11,0)] NotebookItemGroupName, + [iOS (13,0)] + MediaPlaylistTitle = 700, + [iOS (13,0)] + MediaMusicArtistName, + [iOS (13,0)] + MediaAudiobookTitle, + [iOS (13,0)] + MediaAudiobookAuthorName, + [iOS (13,0)] + MediaShowTitle, } [iOS (10, 0)] @@ -1103,6 +1136,8 @@ namespace Intents { Emergency, Voicemail, Redial, + [Watch (6,0), Mac (10,15), iOS (13,0)] + CallBack, } [Watch (3,2), Mac (10,12), iOS (10,0)] @@ -1114,6 +1149,12 @@ namespace Intents { Received = (1 << 2), Latest = (1 << 3), Voicemail = (1 << 4), + [Watch (6,0), Mac (10,15), iOS (13,0)] + Ringing = (1 << 5), + [Watch (6,0), Mac (10,15), iOS (13,0)] + InProgress = (1 << 6), + [Watch (6,0), Mac (10,15), iOS (13,0)] + OnHold = (1 << 7), } [NoWatch, NoMac, iOS (11,0)] @@ -1420,6 +1461,16 @@ namespace Intents { TVShow, TVShowEpisode, MusicVideo, + [Watch (6,0), iOS (13,0)] + PodcastStation, + [Watch (6,0), iOS (13,0)] + RadioStation, + [Watch (6,0), iOS (13,0)] + Station, + [Watch (6,0), iOS (13,0)] + Music, + [Watch (6,0), iOS (13,0)] + AlgorithmicRadioStation, } [Watch (5,0), NoMac, iOS (12,0)] @@ -1456,6 +1507,14 @@ namespace Intents { Work, School, Gym, + [Watch (6,0), iOS (13,0)] + Commute, + [Watch (6,0), iOS (13,0)] + HeadphonesConnected, + [Watch (6,0), iOS (13,0)] + ActiveWorkout, + [Watch (6,0), iOS (13,0)] + PhysicalActivityIncomplete, } [Watch (5,0), NoMac, iOS (12,0)] @@ -1472,6 +1531,310 @@ namespace Intents { Information, } + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INAddMediaIntentResponseCode : long { + Unspecified = 0, + Ready, + InProgress, + Success, + HandleInApp, + Failure, + FailureRequiringAppLaunch, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INAddMediaMediaItemUnsupportedReason : long { + LoginRequired = 1, + SubscriptionRequired, + UnsupportedMediaType, + ExplicitContentSettings, + CellularDataSettings, + RestrictedContent, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INAddTasksTargetTaskListConfirmationReason : long { + ListShouldBeCreated = 1, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INAddTasksTemporalEventTriggerUnsupportedReason : long { + TimeInPast = 1, + InvalidRecurrence, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INCallAudioRoute : long { + Unknown = 0, + SpeakerphoneAudioRoute, + BluetoothAudioRoute, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INDeleteTasksIntentResponseCode : long { + Unspecified = 0, + Ready, + InProgress, + Success, + Failure, + FailureRequiringAppLaunch, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INDeleteTasksTaskListUnsupportedReason : long { + NoTaskListFound = 1, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INDeleteTasksTaskUnsupportedReason : long { + Found = 1, + InApp, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INGetReservationDetailsIntentResponseCode : long { + Unspecified = 0, + Ready, + InProgress, + Success, + Failure, + FailureRequiringAppLaunch, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INMediaAffinityType : long { + Unknown = 0, + Like, + Dislike, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INMediaDestinationType : long { + Unknown = 0, + Library, + Playlist, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INMediaReference : long { + Unknown = 0, + CurrentlyPlaying, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INMediaSortOrder : long { + Unknown = 0, + Newest, + Oldest, + Best, + Worst, + Popular, + Unpopular, + Trending, + Recommended, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INMediaUserContextSubscriptionStatus : long { + Unknown = 0, + NotSubscribed, + Subscribed, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INPlayMediaMediaItemUnsupportedReason : long { + LoginRequired = 1, + SubscriptionRequired, + UnsupportedMediaType, + ExplicitContentSettings, + CellularDataSettings, + RestrictedContent, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INPlayMediaPlaybackSpeedUnsupportedReason : long { + BelowMinimum = 1, + AboveMaximum, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INPlaybackQueueLocation : long { + Unknown = 0, + Now, + Next, + Later, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INReservationActionType : long { + Unknown = 0, + CheckIn, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INReservationStatus : long { + Unknown = 0, + Canceled, + Pending, + Hold, + Confirmed, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INSearchForMediaIntentResponseCode : long { + Unspecified = 0, + Ready, + ContinueInApp, + InProgress, + Success, + Failure, + FailureRequiringAppLaunch, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INSearchForMediaMediaItemUnsupportedReason : long { + LoginRequired = 1, + SubscriptionRequired, + UnsupportedMediaType, + ExplicitContentSettings, + CellularDataSettings, + RestrictedContent, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INSetTaskAttributeTemporalEventTriggerUnsupportedReason : long { + TimeInPast = 1, + InvalidRecurrence, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INSnoozeTasksIntentResponseCode : long { + Unspecified = 0, + Ready, + InProgress, + Success, + Failure, + FailureRequiringAppLaunch, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INSnoozeTasksTaskUnsupportedReason : long { + NoTasksFound = 1, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INStartCallCallCapabilityUnsupportedReason : long { + VideoCallUnsupported = 1, + MicrophoneNotAccessible, + CameraNotAccessible, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INStartCallContactUnsupportedReason : long { + NoContactFound = 1, + MultipleContactsUnsupported, + NoHandleForLabel, + InvalidHandle, + UnsupportedMmiUssd, + NoCallHistoryForRedial, + NoUsableHandleForRedial, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INStartCallIntentResponseCode : long { + Unspecified = 0, + Ready, + ContinueInApp, + UserConfirmationRequired, + Failure, + FailureRequiringAppLaunch, + FailureCallingServiceNotAvailable, + FailureContactNotSupportedByApp, + FailureAirplaneModeEnabled, + FailureUnableToHandOff, + FailureAppConfigurationRequired, + FailureCallInProgress, + FailureCallRinging, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INTaskPriority : long { + Unknown = 0, + NotFlagged, + Flagged, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INTemporalEventTriggerTypeOptions : ulong { + NotScheduled = (1uL << 0), + ScheduledNonRecurring = (1uL << 1), + ScheduledRecurring = (1uL << 2), + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INTicketedEventCategory : long { + Unknown = 0, + Movie, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INUpdateMediaAffinityIntentResponseCode : long { + Unspecified = 0, + Ready, + InProgress, + Success, + Failure, + FailureRequiringAppLaunch, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INUpdateMediaAffinityMediaItemUnsupportedReason : long { + LoginRequired = 1, + SubscriptionRequired, + UnsupportedMediaType, + ExplicitContentSettings, + CellularDataSettings, + RestrictedContent, + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Native] + public enum INAddMediaMediaDestinationUnsupportedReason : long { + PlaylistNameNotFound = 1, + } + [iOS (10, 0)] [Mac (10, 12, 0, PlatformArchitecture.Arch64)] [Watch (3, 2)] @@ -1660,6 +2023,14 @@ namespace Intents { [Field ("INPersonRelationshipManager")] Manager, + + [Watch (6,0), NoTV, Mac (10,15), iOS (13,0)] + [Field ("INPersonRelationshipSon")] + Son, + + [Watch (6,0), NoTV, Mac (10,15), iOS (13,0)] + [Field ("INPersonRelationshipDaughter")] + Daughter, } [iOS (10, 2)] @@ -1866,6 +2237,18 @@ namespace Intents { [Static] [Export ("unsupported")] INBooleanResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INBooleanResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INBooleanResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 0)] @@ -1920,6 +2303,18 @@ namespace Intents { [Static] [Export ("unsupported")] INCallRecordTypeResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INCallRecordTypeResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INCallRecordTypeResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 0)] @@ -2021,6 +2416,18 @@ namespace Intents { [Static] [Export ("unsupported")] INCarAirCirculationModeResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INCarAirCirculationModeResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INCarAirCirculationModeResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 0)] @@ -2071,6 +2478,18 @@ namespace Intents { [Static] [Export ("unsupported")] INCarAudioSourceResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INCarAudioSourceResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INCarAudioSourceResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 0)] @@ -2121,6 +2540,18 @@ namespace Intents { [Static] [Export ("unsupported")] INCarDefrosterResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INCarDefrosterResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INCarDefrosterResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 0)] @@ -2171,6 +2602,18 @@ namespace Intents { [Static] [Export ("unsupported")] INCarSeatResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INCarSeatResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INCarSeatResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 0)] @@ -2227,6 +2670,18 @@ namespace Intents { [Static] [Export ("unsupported")] INCurrencyAmountResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INCurrencyAmountResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INCurrencyAmountResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 0)] @@ -2300,6 +2755,18 @@ namespace Intents { [Static] [Export ("unsupported")] INDateComponentsRangeResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INDateComponentsRangeResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INDateComponentsRangeResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } #if XAMCORE_4_0 // TODO: Double check this if XAMCORE_4_0 happens, its been 2 years (2018) and still not usable in macOS @@ -2307,6 +2774,8 @@ namespace Intents { #else [Mac (10, 12, 0, PlatformArchitecture.Arch64)] #endif + [Deprecated (PlatformName.iOS, 13, 0, message: "Implement 'INStartAudioCallIntentHandling, INStartVideoCallIntentHandling and INSearchCallHistoryIntentHandling' instead.")] + [Deprecated (PlatformName.WatchOS, 13, 0, message: "Implement 'INStartAudioCallIntentHandling and INSearchCallHistoryIntentHandling' instead.")] [iOS (10, 0)] [Watch (3, 2)] [Protocol] @@ -2318,6 +2787,8 @@ namespace Intents { #endif } + [Deprecated (PlatformName.iOS, 13, 0, message: "Implement 'INActivateCarSignalIntentHandling, INSetCarLockStatusIntentHandling, INGetCarLockStatusIntentHandling and INGetCarPowerLevelStatusIntentHandling' instead.")] + [Deprecated (PlatformName.WatchOS, 6, 0, message: "Implement 'INActivateCarSignalIntentHandling, INSetCarLockStatusIntentHandling, INGetCarLockStatusIntentHandling and INGetCarPowerLevelStatusIntentHandling' instead.")] [iOS (10, 0)] [Watch (3, 2)] [Unavailable (PlatformName.MacOSX)] @@ -2325,6 +2796,7 @@ namespace Intents { interface INCarCommandsDomainHandling : INActivateCarSignalIntentHandling, INSetCarLockStatusIntentHandling, INGetCarLockStatusIntentHandling, INGetCarPowerLevelStatusIntentHandling { } + [Deprecated (PlatformName.iOS, 13, 0, message: "Implement 'INSetAudioSourceInCarIntentHandling, INSetClimateSettingsInCarIntentHandling, INSetDefrosterSettingsInCarIntentHandling, INSetSeatSettingsInCarIntentHandling, INSetProfileInCarIntentHandling and INSaveProfileInCarIntentHandling' instead.")] [iOS (10, 0)] [Unavailable (PlatformName.WatchOS)] [Unavailable (PlatformName.MacOSX)] @@ -2332,6 +2804,8 @@ namespace Intents { interface INCarPlayDomainHandling : INSetAudioSourceInCarIntentHandling, INSetClimateSettingsInCarIntentHandling, INSetDefrosterSettingsInCarIntentHandling, INSetSeatSettingsInCarIntentHandling, INSetProfileInCarIntentHandling, INSaveProfileInCarIntentHandling { } + [Deprecated (PlatformName.iOS, 13, 0, message: "Implement 'INStartWorkoutIntentHandling, INPauseWorkoutIntentHandling, INEndWorkoutIntentHandling, INCancelWorkoutIntentHandling and INResumeWorkoutIntentHandling' instead.")] + [Deprecated (PlatformName.WatchOS, 6, 0, message: "Implement 'INStartWorkoutIntentHandling, INPauseWorkoutIntentHandling, INEndWorkoutIntentHandling, INCancelWorkoutIntentHandling and INResumeWorkoutIntentHandling' instead.")] [iOS (10, 0)] [Watch (3, 2)] [Unavailable (PlatformName.MacOSX)] @@ -2339,6 +2813,7 @@ namespace Intents { interface INWorkoutsDomainHandling : INStartWorkoutIntentHandling, INPauseWorkoutIntentHandling, INEndWorkoutIntentHandling, INCancelWorkoutIntentHandling, INResumeWorkoutIntentHandling { } + [Deprecated (PlatformName.iOS, 13, 0, message: "Implement 'INSetRadioStationIntentHandling' instead.")] [iOS (10, 0)] [Unavailable (PlatformName.MacOSX)] [Unavailable (PlatformName.WatchOS)] @@ -2346,6 +2821,8 @@ namespace Intents { interface INRadioDomainHandling : INSetRadioStationIntentHandling { } + [Deprecated (PlatformName.iOS, 13, 0, message: "Implement 'INSendMessageIntentHandling, INSearchForMessagesIntentHandling and INSetMessageAttributeIntentHandling' instead.")] + [Deprecated (PlatformName.WatchOS, 13, 0, message: "Implement 'INSendMessageIntentHandling and INSearchForMessagesIntentHandling' instead.")] [iOS (10, 0)] [Watch (3, 2)] [Unavailable (PlatformName.MacOSX)] @@ -2358,6 +2835,8 @@ namespace Intents { #endif } + [Deprecated (PlatformName.iOS, 13, 0, message: "Implement 'INSendPaymentIntentHandling, INRequestPaymentIntentHandling, INPayBillIntentHandling, INSearchForBillsIntentHandling, INSearchForAccountsIntentHandling and INTransferMoneyIntentHandling' instead.")] + [Deprecated (PlatformName.WatchOS, 6, 0, message: "Implement 'INSendPaymentIntentHandling and INRequestPaymentIntentHandling' instead.")] [iOS (10, 0)] [Watch (3, 2)] [Unavailable (PlatformName.MacOSX)] @@ -2369,6 +2848,8 @@ namespace Intents { { } + [Deprecated (PlatformName.iOS, 13, 0, message: "Implement 'INSearchForPhotosIntentHandling and INStartPhotoPlaybackIntentHandling' instead.")] + [Deprecated (PlatformName.WatchOS, 6, 0, message: "Implement 'INSearchForPhotosIntentHandling and INStartPhotoPlaybackIntentHandling' instead.")] [iOS (10, 0)] [Watch (3, 2)] [Unavailable (PlatformName.MacOSX)] @@ -2376,6 +2857,8 @@ namespace Intents { interface INPhotosDomainHandling : INSearchForPhotosIntentHandling, INStartPhotoPlaybackIntentHandling { } + [Deprecated (PlatformName.iOS, 13, 0, message: "Implement 'INListRideOptionsIntentHandling, INRequestRideIntentHandling, INGetRideStatusIntentHandling, INCancelRideIntentHandling and INSendRideFeedbackIntentHandling' instead.")] + [Deprecated (PlatformName.WatchOS, 6, 0, message: "Implement 'INListRideOptionsIntentHandling, INRequestRideIntentHandling, INGetRideStatusIntentHandling, INCancelRideIntentHandling and INSendRideFeedbackIntentHandling' instead.")] [iOS (10, 0)] [Watch (3, 2)] [Unavailable (PlatformName.MacOSX)] @@ -2387,11 +2870,15 @@ namespace Intents { { } + [Deprecated (PlatformName.iOS, 13, 0, message: "Implement 'INCreateNoteIntentHandling, INAppendToNoteIntentHandling, INAddTasksIntentHandling, INCreateTaskListIntentHandling, INSetTaskAttributeIntentHandling and INSearchForNotebookItemsIntentHandling' instead.")] + [Deprecated (PlatformName.WatchOS, 6, 0, message: "Implement 'INCreateNoteIntentHandling, INAppendToNoteIntentHandling, INAddTasksIntentHandling, INCreateTaskListIntentHandling, INSetTaskAttributeIntentHandling and INSearchForNotebookItemsIntentHandling' instead.")] [Watch (4,0), NoMac, iOS (11,0)] [Protocol] interface INNotebookDomainHandling : INCreateNoteIntentHandling, INAppendToNoteIntentHandling, INAddTasksIntentHandling, INCreateTaskListIntentHandling, INSetTaskAttributeIntentHandling, INSearchForNotebookItemsIntentHandling { } + [Deprecated (PlatformName.iOS, 13, 0, message: "Implement 'INGetVisualCodeIntentHandling' instead.")] + [Deprecated (PlatformName.WatchOS, 6, 0, message: "Implement 'INGetVisualCodeIntentHandling' instead.")] [Watch (4,0), NoMac, iOS (11,0)] [Protocol] interface INVisualCodeDomainHandling : INGetVisualCodeIntentHandling { @@ -2429,6 +2916,18 @@ namespace Intents { [Static] [Export ("unsupported")] INDoubleResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INDoubleResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INDoubleResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 0)] @@ -2467,6 +2966,18 @@ namespace Intents { [Static] [Export ("unsupported")] INDateComponentsResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INDateComponentsResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INDateComponentsResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 0)] @@ -2956,6 +3467,18 @@ namespace Intents { [Static] [Export ("unsupported")] INIntegerResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INIntegerResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INIntegerResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 0)] @@ -3018,6 +3541,16 @@ namespace Intents { //[Static] //[Export ("unsupported")] //INIntentResolutionResult Unsupported { get; } + + // [Watch (6,0), iOS (13,0), NoMac] + // [Static] + // [Export ("unsupportedWithReason:")] + // INIntentResolutionResult GetUnsupported (nint reason); + + // [Watch (6,0), iOS (13,0), NoMac] + // [Static] + // [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + // INIntentResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 0)] @@ -3169,6 +3702,11 @@ namespace Intents { [DisableDefaultCtor] interface INMessage : NSCopying, NSSecureCoding { + [Watch (6,1), NoMac, iOS (13,2)] + [Export ("initWithIdentifier:conversationIdentifier:content:dateSent:sender:recipients:groupName:messageType:serviceName:")] + [DesignatedInitializer] + IntPtr Constructor (string identifier, [NullAllowed] string conversationIdentifier, [NullAllowed] string content, [NullAllowed] NSDate dateSent, [NullAllowed] INPerson sender, [NullAllowed] INPerson[] recipients, [NullAllowed] INSpeakableString groupName, INMessageType messageType, [NullAllowed] string serviceName); + [Watch (4,0), Mac (10,13), iOS (11,0)] [Export ("initWithIdentifier:conversationIdentifier:content:dateSent:sender:recipients:groupName:messageType:")] [DesignatedInitializer] @@ -3207,6 +3745,10 @@ namespace Intents { [Watch (4,0), Mac (10,13), iOS (11,0)] [Export ("messageType")] INMessageType MessageType { get; } + + [Watch (6, 1), NoMac, iOS (13, 2)] + [NullAllowed, Export ("serviceName")] + string ServiceName { get; } } [iOS (10, 0)] @@ -3261,6 +3803,18 @@ namespace Intents { [Static] [Export ("unsupported")] INMessageAttributeOptionsResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INMessageAttributeOptionsResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INMessageAttributeOptionsResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } #if XAMCORE_4_0 // TODO: Double check this if XAMCORE_4_0 happens, its been 2 years (2018) and still not usable in macOS @@ -3319,6 +3873,18 @@ namespace Intents { [Static] [Export ("unsupported")] INMessageAttributeResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INMessageAttributeResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INMessageAttributeResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 0)] @@ -3577,6 +4143,18 @@ namespace Intents { [Static] [Export ("unsupported")] INPersonResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INPersonResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INPersonResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 0)] @@ -3615,6 +4193,18 @@ namespace Intents { [Static] [Export ("unsupported")] INPlacemarkResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INPlacemarkResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INPlacemarkResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 0)] @@ -3626,12 +4216,12 @@ namespace Intents { [BaseType (typeof (NSObject))] interface INPreferences { - [NoWatch] + [Watch (6,0)] [Static] [Export ("siriAuthorizationStatus")] INSiriAuthorizationStatus SiriAuthorizationStatus { get; } - [NoWatch] + [Watch (6,0)] [Static] [Async] [Export ("requestSiriAuthorization:")] @@ -3722,6 +4312,18 @@ namespace Intents { [Static] [Export ("unsupported")] INRadioTypeResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INRadioTypeResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INRadioTypeResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 0)] @@ -3772,6 +4374,18 @@ namespace Intents { [Static] [Export ("unsupported")] INRelativeReferenceResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INRelativeReferenceResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INRelativeReferenceResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 0)] @@ -3822,6 +4436,18 @@ namespace Intents { [Static] [Export ("unsupported")] INRelativeSettingResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INRelativeSettingResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INRelativeSettingResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 0)] @@ -4101,6 +4727,18 @@ namespace Intents { [Static] [Export ("unsupported")] INRestaurantGuestResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INRestaurantGuestResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INRestaurantGuestResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 0)] @@ -4231,6 +4869,18 @@ namespace Intents { [Static] [Export ("unsupported")] INRestaurantResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INRestaurantResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INRestaurantResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 0)] @@ -5194,10 +5844,6 @@ namespace Intents { INSetAudioSourceInCarIntentResponseCode Code { get; } } - // HACK only to please the generator - which does not (normally) know the type hierarchy in the - // binding files. The lack of namespace will generate the correct code for the C# compiler - interface NSUnitTemperature : NSUnit {} - [iOS (10, 0)] [Unavailable (PlatformName.MacOSX)] [Unavailable (PlatformName.WatchOS)] @@ -5831,8 +6477,23 @@ namespace Intents { [Static] [Export ("unsupported")] INSpeakableStringResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INSpeakableStringResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INSpeakableStringResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } + [Deprecated (PlatformName.iOS, 13, 0, message: "Use 'INStartCallIntent' instead.")] + [Deprecated (PlatformName.MacOSX, 10, 15, message: "Use 'INStartCallIntent' instead.")] + [Deprecated (PlatformName.WatchOS, 6, 0, message: "Use 'INStartCallIntent' instead.")] [iOS (10, 0)] [Mac (10, 12, 0, PlatformArchitecture.Arch64)] [Watch (3, 2)] @@ -5858,6 +6519,9 @@ namespace Intents { INPerson [] Contacts { get; } } + [Deprecated (PlatformName.iOS, 13, 0, message: "Use 'INStartCallIntentHandling' instead.")] + [Deprecated (PlatformName.MacOSX, 10, 15, message: "Use 'INStartCallIntentHandling' instead.")] + [Deprecated (PlatformName.WatchOS, 6, 0, message: "Use 'INStartCallIntentHandling' instead.")] [iOS (10, 0)] [Mac (10, 12, 0, PlatformArchitecture.Arch64)] [Watch (3, 2)] @@ -5885,6 +6549,9 @@ namespace Intents { void ResolveContacts (INStartAudioCallIntent intent, Action completion); } + [Deprecated (PlatformName.iOS, 13, 0, message: "Use 'INStartCallIntentResponse' instead.")] + [Deprecated (PlatformName.MacOSX, 10, 15, message: "Use 'INStartCallIntentResponse' instead.")] + [Deprecated (PlatformName.WatchOS, 6, 0, message: "Use 'INStartCallIntentResponse' instead.")] [iOS (10, 0)] [Mac (10, 12, 0, PlatformArchitecture.Arch64)] [Watch (3, 2)] @@ -5988,6 +6655,9 @@ namespace Intents { NSNumber SearchResultsCount { get; set; } } + [Deprecated (PlatformName.iOS, 13, 0, message: "Use 'INStartCallIntent' instead.")] + [Deprecated (PlatformName.MacOSX, 10, 15, message: "Use 'INStartCallIntent' instead.")] + [Deprecated (PlatformName.WatchOS, 6, 0, message: "Use 'INStartCallIntent' instead.")] [iOS (10, 0)] [Mac (10, 12, 0, PlatformArchitecture.Arch64)] [Unavailable (PlatformName.WatchOS)] @@ -6002,6 +6672,9 @@ namespace Intents { INPerson [] Contacts { get; } } + [Deprecated (PlatformName.iOS, 13, 0, message: "Use 'INStartCallIntentHandling' instead.")] + [Deprecated (PlatformName.MacOSX, 10, 15, message: "Use 'INStartCallIntentHandling' instead.")] + [Deprecated (PlatformName.WatchOS, 6, 0, message: "Use 'INStartCallIntentHandling' instead.")] [iOS (10, 0)] [Mac (10, 12, 0, PlatformArchitecture.Arch64)] [Unavailable (PlatformName.WatchOS)] @@ -6025,6 +6698,9 @@ namespace Intents { void ResolveContacts (INStartVideoCallIntent intent, Action completion); } + [Deprecated (PlatformName.iOS, 13, 0, message: "Use 'INStartCallIntentResponse' instead.")] + [Deprecated (PlatformName.MacOSX, 10, 15, message: "Use 'INStartCallIntentResponse' instead.")] + [Deprecated (PlatformName.WatchOS, 6, 0, message: "Use 'INStartCallIntentResponse' instead.")] [iOS (10, 0)] [Mac (10, 12, 0, PlatformArchitecture.Arch64)] [Unavailable (PlatformName.WatchOS)] @@ -6154,6 +6830,18 @@ namespace Intents { [Static] [Export ("unsupported")] INStringResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INStringResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INStringResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 0)] @@ -6192,6 +6880,18 @@ namespace Intents { [Static] [Export ("unsupported")] INTemperatureResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INTemperatureResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INTemperatureResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 0)] @@ -6216,7 +6916,7 @@ namespace Intents { [iOS (10, 0)] [Unavailable (PlatformName.MacOSX)] - [Unavailable (PlatformName.WatchOS)] + [Watch (6, 0)] [BaseType (typeof (NSObject))] [DisableDefaultCtor] interface INVocabulary { @@ -6225,16 +6925,13 @@ namespace Intents { [Export ("sharedVocabulary")] INVocabulary SharedVocabulary { get; } - [Advice ("This API is not allowed in extensions.")] [Export ("setVocabularyStrings:ofType:")] void SetVocabularyStrings (NSOrderedSet vocabulary, INVocabularyStringType type); - [Advice ("This API is not allowed in extensions.")] [iOS (11,0)] [Export ("setVocabulary:ofType:")] void SetVocabulary (NSOrderedSet vocabulary, INVocabularyStringType type); - [Advice ("This API is not allowed in extensions.")] [Export ("removeAllVocabularyStrings")] void RemoveAllVocabularyStrings (); } @@ -6289,6 +6986,18 @@ namespace Intents { [Static] [Export ("unsupported")] INWorkoutGoalUnitTypeResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INWorkoutGoalUnitTypeResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INWorkoutGoalUnitTypeResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 0)] @@ -6341,6 +7050,18 @@ namespace Intents { [Static] [Export ("unsupported")] INWorkoutLocationTypeResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INWorkoutLocationTypeResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INWorkoutLocationTypeResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 0)] @@ -6491,6 +7212,18 @@ namespace Intents { [Static] [Export ("unsupported")] INBillPayeeResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INBillPayeeResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INBillPayeeResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 3)] @@ -6543,6 +7276,18 @@ namespace Intents { [Static] [Export ("unsupported")] INBillTypeResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INBillTypeResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INBillTypeResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 3)] @@ -6595,6 +7340,18 @@ namespace Intents { [Static] [Export ("unsupported")] INCarSignalOptionsResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INCarSignalOptionsResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INCarSignalOptionsResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 3)] @@ -6920,6 +7677,18 @@ namespace Intents { [Static] [Export ("unsupported")] INPaymentAccountResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INPaymentAccountResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INPaymentAccountResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 3)] @@ -6976,6 +7745,18 @@ namespace Intents { [Static] [Export ("unsupported")] INPaymentAmountResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INPaymentAmountResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INPaymentAmountResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 3)] @@ -7028,6 +7809,18 @@ namespace Intents { [Static] [Export ("unsupported")] INPaymentStatusResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INPaymentStatusResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INPaymentStatusResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [iOS (10, 3)] @@ -7224,14 +8017,32 @@ namespace Intents { [Static] [Export ("unsupported")] INAccountTypeResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INAccountTypeResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INAccountTypeResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [Watch (4,0), NoMac, iOS (11,0)] [BaseType (typeof (INIntent))] interface INAddTasksIntent { - [Export ("initWithTargetTaskList:taskTitles:spatialEventTrigger:temporalEventTrigger:")] + [Watch (6,0), iOS (13,0)] + [Export ("initWithTargetTaskList:taskTitles:spatialEventTrigger:temporalEventTrigger:priority:")] [DesignatedInitializer] + IntPtr Constructor ([NullAllowed] INTaskList targetTaskList, [NullAllowed] INSpeakableString[] taskTitles, [NullAllowed] INSpatialEventTrigger spatialEventTrigger, [NullAllowed] INTemporalEventTrigger temporalEventTrigger, INTaskPriority priority); + + [Deprecated (PlatformName.WatchOS, 6, 0, message: "Use the constructor with 'INTaskPriority priority' instead.")] + [Deprecated (PlatformName.iOS, 13, 0, message: "Use the constructor with 'INTaskPriority priority' instead.")] + [Export ("initWithTargetTaskList:taskTitles:spatialEventTrigger:temporalEventTrigger:")] IntPtr Constructor ([NullAllowed] INTaskList targetTaskList, [NullAllowed] INSpeakableString[] taskTitles, [NullAllowed] INSpatialEventTrigger spatialEventTrigger, [NullAllowed] INTemporalEventTrigger temporalEventTrigger); [NullAllowed, Export ("targetTaskList", ArgumentSemantic.Copy)] @@ -7245,6 +8056,10 @@ namespace Intents { [NullAllowed, Export ("temporalEventTrigger", ArgumentSemantic.Copy)] INTemporalEventTrigger TemporalEventTrigger { get; } + + [Watch (6,0), iOS (13,0)] + [Export ("priority", ArgumentSemantic.Assign)] + INTaskPriority Priority { get; } } [Watch (4,0), NoMac, iOS (11,0)] @@ -7258,17 +8073,33 @@ namespace Intents { [Export ("confirmAddTasks:completion:")] void Confirm (INAddTasksIntent intent, Action completion); + [Deprecated (PlatformName.iOS, 13, 0, message: "Use 'ResolveTargetTaskList (Action)' overload instead.")] + [Deprecated (PlatformName.WatchOS, 6, 0, message: "Use 'ResolveTargetTaskList (Action)' overload instead.")] [Export ("resolveTargetTaskListForAddTasks:withCompletion:")] void ResolveTargetTaskList (INAddTasksIntent intent, Action completion); + [Watch (6,0), iOS (13,0)] + [Export ("resolveTargetTaskListForAddTasks:completion:")] + void ResolveTargetTaskList (INAddTasksIntent intent, Action completionHandler); + [Export ("resolveTaskTitlesForAddTasks:withCompletion:")] void ResolveTaskTitles (INAddTasksIntent intent, Action completion); [Export ("resolveSpatialEventTriggerForAddTasks:withCompletion:")] void ResolveSpatialEventTrigger (INAddTasksIntent intent, Action completion); + [Deprecated (PlatformName.iOS, 13, 0, message: "Use 'ResolveTemporalEventTrigger (Action)' overload instead.")] + [Deprecated (PlatformName.WatchOS, 6, 0, message: "Use 'ResolveTemporalEventTrigger (Action)' overload instead.")] [Export ("resolveTemporalEventTriggerForAddTasks:withCompletion:")] void ResolveTemporalEventTrigger (INAddTasksIntent intent, Action completion); + + [Watch (6,0), iOS (13,0)] + [Export ("resolveTemporalEventTriggerForAddTasks:completion:")] + void ResolveTemporalEventTrigger (INAddTasksIntent intent, Action completionHandler); + + [Watch (6,0), iOS (13,0)] + [Export ("resolvePriorityForAddTasks:withCompletion:")] + void ResolvePriority (INAddTasksIntent intent, Action completion); } [Watch (4,0), NoMac, iOS (11,0)] @@ -7392,6 +8223,18 @@ namespace Intents { [Static] [Export ("unsupported")] INBalanceTypeResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INBalanceTypeResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INBalanceTypeResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [Watch (4,0), Mac (10,13), iOS (11,0)] @@ -7424,6 +8267,18 @@ namespace Intents { [Static] [Export ("unsupported")] INCallDestinationTypeResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INCallDestinationTypeResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INCallDestinationTypeResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [Watch (4,0), Mac (10,13), iOS (11,0)] @@ -7431,8 +8286,12 @@ namespace Intents { [DisableDefaultCtor] interface INCallRecord : NSCopying, NSSecureCoding { - [Export ("initWithIdentifier:dateCreated:caller:callRecordType:callCapability:callDuration:unseen:")] + [Watch (6,0), Mac (10,15), iOS (13,0)] + [Export ("initWithIdentifier:dateCreated:caller:callRecordType:callCapability:callDuration:unseen:numberOfCalls:")] [DesignatedInitializer] + IntPtr Constructor (string identifier, [NullAllowed] NSDate dateCreated, [NullAllowed] INPerson caller, INCallRecordType callRecordType, INCallCapability callCapability, [NullAllowed] [BindAs (typeof (double?))] NSNumber callDuration, [NullAllowed] [BindAs (typeof (bool?))] NSNumber unseen, [NullAllowed] [BindAs (typeof (int?))] NSNumber numberOfCalls); + + [Export ("initWithIdentifier:dateCreated:caller:callRecordType:callCapability:callDuration:unseen:")] IntPtr Constructor (string identifier, [NullAllowed] NSDate dateCreated, [NullAllowed] INPerson caller, INCallRecordType callRecordType, INCallCapability callCapability, [NullAllowed] NSNumber callDuration, [NullAllowed] NSNumber unseen); [Export ("identifier")] @@ -7457,6 +8316,11 @@ namespace Intents { [Protected] [NullAllowed, Export ("unseen", ArgumentSemantic.Copy)] NSNumber WeakUnseen { get; } + + [BindAs (typeof (int?))] + [Watch (6,0), NoMac, iOS (13,0)] + [NullAllowed, Export ("numberOfCalls", ArgumentSemantic.Copy)] + NSNumber NumberOfCalls { get; } } [Watch (4,0), Mac (10,13), iOS (11,0)] @@ -7489,6 +8353,18 @@ namespace Intents { [Static] [Export ("unsupported")] INCallRecordTypeOptionsResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INCallRecordTypeOptionsResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INCallRecordTypeOptionsResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [NoWatch, NoMac, iOS (11,0)] @@ -7677,6 +8553,18 @@ namespace Intents { [Static] [Export ("unsupported")] INDateSearchTypeResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INDateSearchTypeResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INDateSearchTypeResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [Watch (4,0), NoMac, iOS (11,0)] @@ -7764,6 +8652,18 @@ namespace Intents { [Static] [Export ("unsupported")] INLocationSearchTypeResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INLocationSearchTypeResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INLocationSearchTypeResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [Watch (4,0), NoMac, iOS (11,0)] @@ -7832,8 +8732,22 @@ namespace Intents { [Static] [Export ("unsupported")] INNoteContentResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INNoteContentResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INNoteContentResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } + [Deprecated (PlatformName.iOS, 13, 0, message: "Not used anymore.")] + [Deprecated (PlatformName.WatchOS, 6, 0, message: "Not used anymore.")] [Watch (4,0), NoMac, iOS (11,0)] [BaseType (typeof (INIntentResolutionResult))] interface INNoteContentTypeResolutionResult { @@ -7863,6 +8777,18 @@ namespace Intents { [Static] [Export ("unsupported")] INNoteContentTypeResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INNoteContentTypeResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INNoteContentTypeResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [Watch (4,0), NoMac, iOS (11,0)] @@ -7898,6 +8824,18 @@ namespace Intents { [Static] [Export ("unsupported")] INNoteResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INNoteResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INNoteResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [Watch (4,0), NoMac, iOS (11,0)] @@ -7933,6 +8871,18 @@ namespace Intents { [Static] [Export ("unsupported")] INNotebookItemTypeResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INNotebookItemTypeResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INNotebookItemTypeResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [Watch (4,0), Mac (10,14), iOS (11,0)] @@ -8011,6 +8961,18 @@ namespace Intents { [Static] [Export ("unsupported")] INRequestPaymentCurrencyAmountResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INRequestPaymentCurrencyAmountResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INRequestPaymentCurrencyAmountResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [Watch (4,0), NoMac, iOS (11,0)] @@ -8025,6 +8987,22 @@ namespace Intents { [Export ("initWithPersonResolutionResult:")] IntPtr Constructor (INPersonResolutionResult personResolutionResult); + // Inlined from parent class to avoid bug 43205 scenario + [New] + [Static] + [Export ("successWithResolvedPerson:")] + INRequestPaymentPayerResolutionResult GetSuccess (INPerson resolvedPerson); + + [New] + [Static] + [Export ("disambiguationWithPeopleToDisambiguate:")] + INRequestPaymentPayerResolutionResult GetDisambiguation (INPerson [] peopleToDisambiguate); + + [New] + [Static] + [Export ("confirmationRequiredWithPersonToConfirm:")] + INRequestPaymentPayerResolutionResult GetConfirmationRequired ([NullAllowed] INPerson personToConfirm); + // Fixes bug 43205. We need to return the inherited type not the base type // because users won't be able to downcast easily @@ -8042,6 +9020,18 @@ namespace Intents { [Static] [Export ("unsupported")] INRequestPaymentPayerResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INRequestPaymentPayerResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INRequestPaymentPayerResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [Watch (4,0), NoMac, iOS (11,0)] @@ -8114,11 +9104,17 @@ namespace Intents { [Export ("initWithTitle:content:itemType:status:location:locationSearchType:dateTime:dateSearchType:")] IntPtr Constructor ([NullAllowed] INSpeakableString title, [NullAllowed] string content, INNotebookItemType itemType, INTaskStatus status, [NullAllowed] CLPlacemark location, INLocationSearchType locationSearchType, [NullAllowed] INDateComponentsRange dateTime, INDateSearchType dateSearchType); + [Deprecated (PlatformName.WatchOS, 6, 0, message: "Use the constructor with 'INTemporalEventTriggerTypeOptions temporalEventTriggerTypes' instead.")] + [Deprecated (PlatformName.iOS, 13, 0, message: "Use the constructor with 'INTemporalEventTriggerTypeOptions temporalEventTriggerTypes' instead.")] [Watch (4,2), iOS (11,2)] [Export ("initWithTitle:content:itemType:status:location:locationSearchType:dateTime:dateSearchType:notebookItemIdentifier:")] - [DesignatedInitializer] IntPtr Constructor ([NullAllowed] INSpeakableString title, [NullAllowed] string content, INNotebookItemType itemType, INTaskStatus status, [NullAllowed] CLPlacemark location, INLocationSearchType locationSearchType, [NullAllowed] INDateComponentsRange dateTime, INDateSearchType dateSearchType, [NullAllowed] string notebookItemIdentifier); + [Watch (6,0), Mac (10,15), iOS (13,0)] + [Export ("initWithTitle:content:itemType:status:location:locationSearchType:dateTime:dateSearchType:temporalEventTriggerTypes:taskPriority:notebookItemIdentifier:")] + [DesignatedInitializer] + IntPtr Constructor ([NullAllowed] INSpeakableString title, [NullAllowed] string content, INNotebookItemType itemType, INTaskStatus status, [NullAllowed] CLPlacemark location, INLocationSearchType locationSearchType, [NullAllowed] INDateComponentsRange dateTime, INDateSearchType dateSearchType, INTemporalEventTriggerTypeOptions temporalEventTriggerTypes, INTaskPriority taskPriority, [NullAllowed] string notebookItemIdentifier); + [NullAllowed, Export ("title", ArgumentSemantic.Copy)] INSpeakableString Title { get; } @@ -8143,6 +9139,14 @@ namespace Intents { [Export ("dateSearchType", ArgumentSemantic.Assign)] INDateSearchType DateSearchType { get; } + [Watch (6,0), iOS (13,0)] + [Export ("temporalEventTriggerTypes", ArgumentSemantic.Assign)] + INTemporalEventTriggerTypeOptions TemporalEventTriggerTypes { get; } + + [Watch (6,0), iOS (13,0)] + [Export ("taskPriority", ArgumentSemantic.Assign)] + INTaskPriority TaskPriority { get; } + [Watch (4,2), iOS (11,2)] [NullAllowed, Export ("notebookItemIdentifier")] string NotebookItemIdentifier { get; } @@ -8182,6 +9186,14 @@ namespace Intents { [Export ("resolveDateSearchTypeForSearchForNotebookItems:withCompletion:")] void ResolveDateSearchType (INSearchForNotebookItemsIntent intent, Action completion); + + [Watch (6,0), iOS (13,0)] + [Export ("resolveTemporalEventTriggerTypesForSearchForNotebookItems:withCompletion:")] + void ResolveTemporalEventTriggerTypes (INSearchForNotebookItemsIntent intent, Action completion); + + [Watch (6,0), iOS (13,0)] + [Export ("resolveTaskPriorityForSearchForNotebookItems:withCompletion:")] + void ResolveTaskPriority (INSearchForNotebookItemsIntent intent, Action completion); } [Watch (4,0), NoMac, iOS (11,0)] @@ -8221,6 +9233,22 @@ namespace Intents { [Export ("initWithPersonResolutionResult:")] IntPtr Constructor (INPersonResolutionResult personResolutionResult); + // Inlined from parent class to avoid bug 43205 scenario + [New] + [Static] + [Export ("successWithResolvedPerson:")] + INSendMessageRecipientResolutionResult GetSuccess (INPerson resolvedPerson); + + [New] + [Static] + [Export ("disambiguationWithPeopleToDisambiguate:")] + INSendMessageRecipientResolutionResult GetDisambiguation (INPerson [] peopleToDisambiguate); + + [New] + [Static] + [Export ("confirmationRequiredWithPersonToConfirm:")] + INSendMessageRecipientResolutionResult GetConfirmationRequired ([NullAllowed] INPerson personToConfirm); + // Fixes bug 43205. We need to return the inherited type not the base type // because users won't be able to downcast easily @@ -8238,6 +9266,18 @@ namespace Intents { [Static] [Export ("unsupported")] INSendMessageRecipientResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INSendMessageRecipientResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INSendMessageRecipientResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [Watch (4,0), NoMac, iOS (11,0)] @@ -8269,6 +9309,18 @@ namespace Intents { [Static] [Export ("unsupported")] INSendPaymentCurrencyAmountResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INSendPaymentCurrencyAmountResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INSendPaymentCurrencyAmountResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [Watch (4,0), NoMac, iOS (11,0)] @@ -8283,6 +9335,22 @@ namespace Intents { [Export ("initWithPersonResolutionResult:")] IntPtr Constructor (INPersonResolutionResult personResolutionResult); + // Inlined from parent class to avoid bug 43205 scenario + [New] + [Static] + [Export ("successWithResolvedPerson:")] + INSendPaymentPayeeResolutionResult GetSuccess (INPerson resolvedPerson); + + [New] + [Static] + [Export ("disambiguationWithPeopleToDisambiguate:")] + INSendPaymentPayeeResolutionResult GetDisambiguation (INPerson [] peopleToDisambiguate); + + [New] + [Static] + [Export ("confirmationRequiredWithPersonToConfirm:")] + INSendPaymentPayeeResolutionResult GetConfirmationRequired ([NullAllowed] INPerson personToConfirm); + // Fixes bug 43205. We need to return the inherited type not the base type // because users won't be able to downcast easily @@ -8300,6 +9368,18 @@ namespace Intents { [Static] [Export ("unsupported")] INSendPaymentPayeeResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INSendPaymentPayeeResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INSendPaymentPayeeResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [NoWatch, NoMac, iOS (11,0)] @@ -8350,16 +9430,30 @@ namespace Intents { [BaseType (typeof (INIntent))] interface INSetTaskAttributeIntent { - [Export ("initWithTargetTask:status:spatialEventTrigger:temporalEventTrigger:")] + [Watch (6,0), iOS (13,0)] + [Export ("initWithTargetTask:taskTitle:status:priority:spatialEventTrigger:temporalEventTrigger:")] [DesignatedInitializer] + IntPtr Constructor ([NullAllowed] INTask targetTask, [NullAllowed] INSpeakableString taskTitle, INTaskStatus status, INTaskPriority priority, [NullAllowed] INSpatialEventTrigger spatialEventTrigger, [NullAllowed] INTemporalEventTrigger temporalEventTrigger); + + [Deprecated (PlatformName.WatchOS, 6, 0, message: "Use the 'INTaskPriority priority' overload instead.")] + [Deprecated (PlatformName.iOS, 13, 0, message: "Use the 'INTaskPriority priority' overload instead.")] + [Export ("initWithTargetTask:status:spatialEventTrigger:temporalEventTrigger:")] IntPtr Constructor ([NullAllowed] INTask targetTask, INTaskStatus status, [NullAllowed] INSpatialEventTrigger spatialEventTrigger, [NullAllowed] INTemporalEventTrigger temporalEventTrigger); [NullAllowed, Export ("targetTask", ArgumentSemantic.Copy)] INTask TargetTask { get; } + [Watch (6,0), iOS (13,0)] + [NullAllowed, Export ("taskTitle", ArgumentSemantic.Copy)] + INSpeakableString TaskTitle { get; } + [Export ("status", ArgumentSemantic.Assign)] INTaskStatus Status { get; } + [Watch (6, 0), iOS (13, 0)] + [Export ("priority", ArgumentSemantic.Assign)] + INTaskPriority Priority { get; } + [NullAllowed, Export ("spatialEventTrigger", ArgumentSemantic.Copy)] INSpatialEventTrigger SpatialEventTrigger { get; } @@ -8381,14 +9475,28 @@ namespace Intents { [Export ("resolveTargetTaskForSetTaskAttribute:withCompletion:")] void ResolveTargetTask (INSetTaskAttributeIntent intent, Action completion); + [Watch (6,0), iOS (13,0)] + [Export ("resolveTaskTitleForSetTaskAttribute:withCompletion:")] + void ResolveTaskTitle (INSetTaskAttributeIntent intent, Action completion); + [Export ("resolveStatusForSetTaskAttribute:withCompletion:")] void ResolveStatus (INSetTaskAttributeIntent intent, Action completion); + [Watch (6,0), iOS (13,0)] + [Export ("resolvePriorityForSetTaskAttribute:withCompletion:")] + void ResolvePriority (INSetTaskAttributeIntent intent, Action completion); + [Export ("resolveSpatialEventTriggerForSetTaskAttribute:withCompletion:")] void ResolveSpatialEventTrigger (INSetTaskAttributeIntent intent, Action completion); + [Deprecated (PlatformName.iOS, 13, 0, message: "Use 'ResolveTemporalEventTrigger (INSetTaskAttributeIntent Action)' overload instead.")] + [Deprecated (PlatformName.WatchOS, 6, 0, message: "Use 'ResolveTemporalEventTrigger (INSetTaskAttributeIntent Action)' overload instead.")] [Export ("resolveTemporalEventTriggerForSetTaskAttribute:withCompletion:")] void ResolveTemporalEventTrigger (INSetTaskAttributeIntent intent, Action completion); + + [Watch (6,0), iOS (13,0)] + [Export ("resolveTemporalEventTriggerForSetTaskAttribute:completion:")] + void ResolveTemporalEventTrigger (INSetTaskAttributeIntent intent, Action completionHandler); } [Watch (4,0), NoMac, iOS (11,0)] @@ -8457,6 +9565,18 @@ namespace Intents { [Static] [Export ("unsupported")] INSpatialEventTriggerResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INSpatialEventTriggerResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INSpatialEventTriggerResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [Watch (4,0), NoMac, iOS (11,0)] @@ -8464,8 +9584,12 @@ namespace Intents { [DisableDefaultCtor] interface INTask : NSCopying, NSSecureCoding { - [Export ("initWithTitle:status:taskType:spatialEventTrigger:temporalEventTrigger:createdDateComponents:modifiedDateComponents:identifier:")] + [Watch (6,0), iOS (13,0)] + [Export ("initWithTitle:status:taskType:spatialEventTrigger:temporalEventTrigger:createdDateComponents:modifiedDateComponents:identifier:priority:")] [DesignatedInitializer] + IntPtr Constructor (INSpeakableString title, INTaskStatus status, INTaskType taskType, [NullAllowed] INSpatialEventTrigger spatialEventTrigger, [NullAllowed] INTemporalEventTrigger temporalEventTrigger, [NullAllowed] NSDateComponents createdDateComponents, [NullAllowed] NSDateComponents modifiedDateComponents, [NullAllowed] string identifier, INTaskPriority priority); + + [Export ("initWithTitle:status:taskType:spatialEventTrigger:temporalEventTrigger:createdDateComponents:modifiedDateComponents:identifier:")] IntPtr Constructor (INSpeakableString title, INTaskStatus status, INTaskType taskType, [NullAllowed] INSpatialEventTrigger spatialEventTrigger, [NullAllowed] INTemporalEventTrigger temporalEventTrigger, [NullAllowed] NSDateComponents createdDateComponents, [NullAllowed] NSDateComponents modifiedDateComponents, [NullAllowed] string identifier); [Export ("title", ArgumentSemantic.Copy)] @@ -8491,6 +9615,10 @@ namespace Intents { [NullAllowed, Export ("identifier")] string Identifier { get; } + + [Watch (6,0), iOS (13,0)] + [Export ("priority", ArgumentSemantic.Assign)] + INTaskPriority Priority { get; } } [Watch (4,0), NoMac, iOS (11,0)] @@ -8555,6 +9683,18 @@ namespace Intents { [Static] [Export ("unsupported")] INTaskListResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INTaskListResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INTaskListResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [Watch (4,0), NoMac, iOS (11,0)] @@ -8591,6 +9731,18 @@ namespace Intents { [Static] [Export ("unsupported")] INTaskResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INTaskResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INTaskResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [Watch (4,0), NoMac, iOS (11,0)] @@ -8623,6 +9775,18 @@ namespace Intents { [Static] [Export ("unsupported")] INTaskStatusResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INTaskStatusResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INTaskStatusResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [Watch (4,0), NoMac, iOS (11,0)] @@ -8672,6 +9836,18 @@ namespace Intents { [Static] [Export ("unsupported")] INTemporalEventTriggerResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INTemporalEventTriggerResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INTemporalEventTriggerResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [Watch (4,0), NoMac, iOS (11,0)] @@ -8799,6 +9975,18 @@ namespace Intents { [Static] [Export ("unsupported")] INVisualCodeTypeResolutionResult Unsupported { get; } + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("unsupportedWithReason:")] + INVisualCodeTypeResolutionResult GetUnsupported (nint reason); + + [New] + [Watch (6,0), iOS (13,0), NoMac] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INVisualCodeTypeResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); } [Watch (5,0), NoMac, iOS (12,0)] @@ -8825,8 +10013,12 @@ namespace Intents { [DisableDefaultCtor] interface INMediaItem : NSCopying, NSSecureCoding { - [Export ("initWithIdentifier:title:type:artwork:")] + [Watch (6,0), iOS (13,0)] + [Export ("initWithIdentifier:title:type:artwork:artist:")] [DesignatedInitializer] + IntPtr Constructor ([NullAllowed] string identifier, [NullAllowed] string title, INMediaItemType type, [NullAllowed] INImage artwork, [NullAllowed] string artist); + + [Export ("initWithIdentifier:title:type:artwork:")] IntPtr Constructor ([NullAllowed] string identifier, [NullAllowed] string title, INMediaItemType type, [NullAllowed] INImage artwork); [NullAllowed, Export ("identifier")] @@ -8840,6 +10032,10 @@ namespace Intents { [NullAllowed, Export ("artwork", ArgumentSemantic.Copy)] INImage Artwork { get; } + + [Watch (6, 0), iOS (13, 0)] + [NullAllowed, Export ("artist")] + string Artist { get; } } [Watch (5,0), NoMac, iOS (12,0)] @@ -8864,6 +10060,17 @@ namespace Intents { // Inlined by INSpeakable //[NullAllowed, Export ("pronunciationHint", ArgumentSemantic.Strong)] //string PronunciationHint { get; } + + [Sealed] + [Watch (6,0), NoMac, iOS (13,0)] + [Export ("alternativeSpeakableMatches")] + [return: NullAllowed] + INSpeakableString [] GetAlternativeSpeakableMatches (); + + // Not [Sealed] since the 'AlternativeSpeakableMatches' inlined property is read-only + [Watch (6,0), NoMac, iOS (13,0)] + [Export ("setAlternativeSpeakableMatches:")] + void SetAlternativeSpeakableMatches ([NullAllowed] INSpeakableString [] alternativeSpeakableMatches); } [Watch (5,0), NoMac, iOS (12,0)] @@ -8871,8 +10078,14 @@ namespace Intents { [DisableDefaultCtor] interface INPlayMediaIntent { - [Export ("initWithMediaItems:mediaContainer:playShuffled:playbackRepeatMode:resumePlayback:")] + [Watch (6,0), Mac (10,15), iOS (13,0)] + [Export ("initWithMediaItems:mediaContainer:playShuffled:playbackRepeatMode:resumePlayback:playbackQueueLocation:playbackSpeed:mediaSearch:")] [DesignatedInitializer] + IntPtr Constructor ([NullAllowed] INMediaItem [] mediaItems, [NullAllowed] INMediaItem mediaContainer, [NullAllowed, BindAs (typeof (bool?))] NSNumber playShuffled, INPlaybackRepeatMode playbackRepeatMode, [NullAllowed, BindAs (typeof (bool?))] NSNumber resumePlayback, INPlaybackQueueLocation playbackQueueLocation, [NullAllowed, BindAs (typeof (double?))] NSNumber playbackSpeed, [NullAllowed] INMediaSearch mediaSearch); + + [Deprecated (PlatformName.iOS, 13, 0, message: "Use the '.ctor (INMediaItem [], INMediaItem, bool?, INPlaybackRepeatMode, bool?, INPlaybackQueueLocation, double?, INMediaSearch)' instead.")] + [Deprecated (PlatformName.WatchOS, 6, 0, message: "Use the '.ctor (INMediaItem [], INMediaItem, bool?, INPlaybackRepeatMode, bool?, INPlaybackQueueLocation, double?, INMediaSearch)' instead.")] + [Export ("initWithMediaItems:mediaContainer:playShuffled:playbackRepeatMode:resumePlayback:")] IntPtr Constructor ([NullAllowed] INMediaItem [] mediaItems, [NullAllowed] INMediaItem mediaContainer, [NullAllowed, BindAs (typeof (bool?))] NSNumber playShuffled, INPlaybackRepeatMode playbackRepeatMode, [NullAllowed, BindAs (typeof (bool?))] NSNumber resumePlayback); [NullAllowed, Export ("mediaItems", ArgumentSemantic.Copy)] @@ -8891,6 +10104,19 @@ namespace Intents { [BindAs (typeof (bool?))] [NullAllowed, Export ("resumePlayback", ArgumentSemantic.Copy)] NSNumber ResumePlayback { get; } + + [Watch (6,0), iOS (13,0)] + [Export ("playbackQueueLocation", ArgumentSemantic.Assign)] + INPlaybackQueueLocation PlaybackQueueLocation { get; } + + [BindAs (typeof (double?))] + [Watch (6,0), iOS (13,0)] + [NullAllowed, Export ("playbackSpeed", ArgumentSemantic.Copy)] + NSNumber PlaybackSpeed { get; } + + [Watch (6,0), iOS (13,0)] + [NullAllowed, Export ("mediaSearch", ArgumentSemantic.Copy)] + INMediaSearch MediaSearch { get; } } [Watch (5,0), NoMac, iOS (12,0)] @@ -8903,6 +10129,30 @@ namespace Intents { [Export ("confirmPlayMedia:completion:")] void Confirm (INPlayMediaIntent intent, Action completion); + + [Watch (6,0), iOS (13,0)] + [Export ("resolveMediaItemsForPlayMedia:withCompletion:")] + void ResolveMediaItems (INPlayMediaIntent intent, Action> completion); + + [Watch (6,0), iOS (13,0)] + [Export ("resolvePlayShuffledForPlayMedia:withCompletion:")] + void ResolvePlayShuffled (INPlayMediaIntent intent, Action completion); + + [Watch (6,0), iOS (13,0)] + [Export ("resolvePlaybackRepeatModeForPlayMedia:withCompletion:")] + void ResolvePlaybackRepeatMode (INPlayMediaIntent intent, Action completion); + + [Watch (6,0), iOS (13,0)] + [Export ("resolveResumePlaybackForPlayMedia:withCompletion:")] + void ResolveResumePlayback (INPlayMediaIntent intent, Action completion); + + [Watch (6,0), iOS (13,0)] + [Export ("resolvePlaybackQueueLocationForPlayMedia:withCompletion:")] + void ResolvePlaybackQueueLocation (INPlayMediaIntent intent, Action completion); + + [Watch (6,0), iOS (13,0)] + [Export ("resolvePlaybackSpeedForPlayMedia:withCompletion:")] + void ResolvePlaybackSpeed (INPlayMediaIntent intent, Action completion); } [Watch (5,0), NoMac, iOS (12,0)] @@ -9099,5 +10349,2474 @@ namespace Intents { // [Export ("deferredLocalizedIntentsStringWithFormat:fromTable:arguments:", IsVariadic = true)] // string DeferredLocalizedIntentsStringWithFormat (string format, [NullAllowed] string table, IntPtr arguments); //} + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INIntent))] + [DisableDefaultCtor] + interface INAddMediaIntent { + + [Export ("initWithMediaItems:mediaSearch:mediaDestination:")] + [DesignatedInitializer] + IntPtr Constructor ([NullAllowed] INMediaItem[] mediaItems, [NullAllowed] INMediaSearch mediaSearch, [NullAllowed] INMediaDestination mediaDestination); + + [NullAllowed, Export ("mediaItems", ArgumentSemantic.Copy)] + INMediaItem [] MediaItems { get; } + + [NullAllowed, Export ("mediaSearch", ArgumentSemantic.Copy)] + INMediaSearch MediaSearch { get; } + + [NullAllowed, Export ("mediaDestination", ArgumentSemantic.Copy)] + INMediaDestination MediaDestination { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Protocol] + interface INAddMediaIntentHandling { + + [Abstract] + [Export ("handleAddMedia:completion:")] + void HandleAddMedia (INAddMediaIntent intent, Action completion); + + [Export ("confirmAddMedia:completion:")] + void Confirm (INAddMediaIntent intent, Action completion); + + [Export ("resolveMediaItemsForAddMedia:withCompletion:")] + void ResolveMediaItems (INAddMediaIntent intent, Action completion); + + [Export ("resolveMediaDestinationForAddMedia:withCompletion:")] + void ResolveMediaDestination (INAddMediaIntent intent, Action completion); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResponse))] + [DisableDefaultCtor] + interface INAddMediaIntentResponse { + + [Export ("initWithCode:userActivity:")] + [DesignatedInitializer] + IntPtr Constructor (INAddMediaIntentResponseCode code, [NullAllowed] NSUserActivity userActivity); + + [Export ("code")] + INAddMediaIntentResponseCode Code { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INMediaItemResolutionResult))] + [DisableDefaultCtor] + interface INAddMediaMediaItemResolutionResult { + + [Static] + [Export ("unsupportedForReason:")] + INAddMediaMediaItemResolutionResult GetUnsupported (INAddMediaMediaItemUnsupportedReason reason); + + [Export ("initWithMediaItemResolutionResult:")] + IntPtr Constructor (INMediaItemResolutionResult mediaItemResolutionResult); + + // Inlined from parent class to avoid bug like 43205 + + [New] + [Static] + [Export ("successWithResolvedMediaItem:")] + INAddMediaMediaItemResolutionResult GetSuccess (INMediaItem resolvedMediaItem); + + [New] + [Static] + [Export ("successesWithResolvedMediaItems:")] + INAddMediaMediaItemResolutionResult [] GetSuccesses (INMediaItem [] resolvedMediaItems); + + [New] + [Static] + [Export ("disambiguationWithMediaItemsToDisambiguate:")] + INAddMediaMediaItemResolutionResult GetDisambiguation (INMediaItem[] mediaItemsToDisambiguate); + + [New] + [Static] + [Export ("confirmationRequiredWithMediaItemToConfirm:")] + INAddMediaMediaItemResolutionResult GetConfirmationRequired ([NullAllowed] INMediaItem mediaItemToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INAddMediaMediaItemResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INAddMediaMediaItemResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INAddMediaMediaItemResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INAddMediaMediaItemResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INAddMediaMediaItemResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INTaskListResolutionResult))] + [DisableDefaultCtor] + interface INAddTasksTargetTaskListResolutionResult { + + [Static] + [Export ("confirmationRequiredWithTaskListToConfirm:forReason:")] + INAddTasksTargetTaskListResolutionResult GetConfirmationRequired ([NullAllowed] INTaskList taskListToConfirm, INAddTasksTargetTaskListConfirmationReason reason); + + [Export ("initWithTaskListResolutionResult:")] + IntPtr Constructor (INTaskListResolutionResult taskListResolutionResult); + + // Inlined from parent class to avoid bug like 43205 + [New] + [Static] + [Export ("successWithResolvedTaskList:")] + INAddTasksTargetTaskListResolutionResult GetSuccess (INTaskList resolvedTaskList); + + [New] + [Static] + [Export ("disambiguationWithTaskListsToDisambiguate:")] + INAddTasksTargetTaskListResolutionResult GetDisambiguation (INTaskList [] taskListsToDisambiguate); + + [New] + [Static] + [Export ("confirmationRequiredWithTaskListToConfirm:")] + INAddTasksTargetTaskListResolutionResult GetConfirmationRequired ([NullAllowed] INTaskList taskListToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INAddTasksTargetTaskListResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INAddTasksTargetTaskListResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INAddTasksTargetTaskListResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INAddTasksTargetTaskListResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INAddTasksTargetTaskListResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INTemporalEventTriggerResolutionResult))] + [DisableDefaultCtor] + interface INAddTasksTemporalEventTriggerResolutionResult { + + [Static] + [Export ("unsupportedForReason:")] + INAddTasksTemporalEventTriggerResolutionResult GetUnsupported (INAddTasksTemporalEventTriggerUnsupportedReason reason); + + [Export ("initWithTemporalEventTriggerResolutionResult:")] + IntPtr Constructor (INTemporalEventTriggerResolutionResult temporalEventTriggerResolutionResult); + + // Inlined from parent to avoid bug like 43205 + + [New] + [Static] + [Export ("successWithResolvedTemporalEventTrigger:")] + INAddTasksTemporalEventTriggerResolutionResult GetSuccess (INTemporalEventTrigger resolvedTemporalEventTrigger); + + [New] + [Static] + [Export ("disambiguationWithTemporalEventTriggersToDisambiguate:")] + INAddTasksTemporalEventTriggerResolutionResult GetDisambiguation (INTemporalEventTrigger [] temporalEventTriggersToDisambiguate); + + [New] + [Static] + [Export ("confirmationRequiredWithTemporalEventTriggerToConfirm:")] + INAddTasksTemporalEventTriggerResolutionResult GetConfirmationRequired ([NullAllowed] INTemporalEventTrigger temporalEventTriggerToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INAddTasksTemporalEventTriggerResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INAddTasksTemporalEventTriggerResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INAddTasksTemporalEventTriggerResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INAddTasksTemporalEventTriggerResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INAddTasksTemporalEventTriggerResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface INAirline : NSCopying, NSSecureCoding { + + [Export ("initWithName:iataCode:icaoCode:")] + [DesignatedInitializer] + IntPtr Constructor ([NullAllowed] string name, [NullAllowed] string iataCode, [NullAllowed] string icaoCode); + + [NullAllowed, Export ("name")] + string Name { get; } + + [NullAllowed, Export ("iataCode")] + string IataCode { get; } + + [NullAllowed, Export ("icaoCode")] + string IcaoCode { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface INAirport : NSCopying, NSSecureCoding { + + [Export ("initWithName:iataCode:icaoCode:")] + [DesignatedInitializer] + IntPtr Constructor ([NullAllowed] string name, [NullAllowed] string iataCode, [NullAllowed] string icaoCode); + + [NullAllowed, Export ("name")] + string Name { get; } + + [NullAllowed, Export ("iataCode")] + string IataCode { get; } + + [NullAllowed, Export ("icaoCode")] + string IcaoCode { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof(NSObject))] + [DisableDefaultCtor] + interface INAirportGate : NSCopying, NSSecureCoding { + + [Export ("initWithAirport:terminal:gate:")] + [DesignatedInitializer] + IntPtr Constructor (INAirport airport, [NullAllowed] string terminal, [NullAllowed] string gate); + + [Export ("airport", ArgumentSemantic.Copy)] + INAirport Airport { get; } + + [NullAllowed, Export ("terminal")] + string Terminal { get; } + + [NullAllowed, Export ("gate")] + string Gate { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResolutionResult))] + [DisableDefaultCtor] + interface INCallCapabilityResolutionResult { + + [Static] + [Export ("successWithResolvedCallCapability:")] + INCallCapabilityResolutionResult GetSuccess (INCallCapability resolvedCallCapability); + + [Static] + [Export ("confirmationRequiredWithCallCapabilityToConfirm:")] + INCallCapabilityResolutionResult GetConfirmationRequired (INCallCapability callCapabilityToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INCallCapabilityResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INCallCapabilityResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INCallCapabilityResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INCallCapabilityResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INCallCapabilityResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INIntent))] + [DisableDefaultCtor] + interface INDeleteTasksIntent { + + [Export ("initWithTaskList:tasks:all:")] + [DesignatedInitializer] + IntPtr Constructor ([NullAllowed] INTaskList taskList, [NullAllowed] INTask[] tasks, [NullAllowed] [BindAs (typeof (bool?))] NSNumber all); + + [NullAllowed, Export ("taskList", ArgumentSemantic.Copy)] + INTaskList TaskList { get; } + + [NullAllowed, Export ("tasks", ArgumentSemantic.Copy)] + INTask[] Tasks { get; } + + [BindAs (typeof (bool?))] + [NullAllowed, Export ("all", ArgumentSemantic.Copy)] + NSNumber All { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Protocol] + interface INDeleteTasksIntentHandling { + + [Abstract] + [Export ("handleDeleteTasks:completion:")] + void HandleDeleteTasks (INDeleteTasksIntent intent, Action completion); + + [Export ("confirmDeleteTasks:completion:")] + void Confirm (INDeleteTasksIntent intent, Action completion); + + [Export ("resolveTaskListForDeleteTasks:withCompletion:")] + void ResolveTaskList (INDeleteTasksIntent intent, Action completion); + + [Export ("resolveTasksForDeleteTasks:withCompletion:")] + void ResolveTasks (INDeleteTasksIntent intent, Action completion); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResponse))] + [DisableDefaultCtor] + interface INDeleteTasksIntentResponse { + + [Export ("initWithCode:userActivity:")] + [DesignatedInitializer] + IntPtr Constructor (INDeleteTasksIntentResponseCode code, [NullAllowed] NSUserActivity userActivity); + + [Export ("code")] + INDeleteTasksIntentResponseCode Code { get; } + + [NullAllowed, Export ("deletedTasks", ArgumentSemantic.Copy)] + INTask[] DeletedTasks { get; set; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INTaskListResolutionResult))] + [DisableDefaultCtor] + interface INDeleteTasksTaskListResolutionResult { + + [Static] + [Export ("unsupportedForReason:")] + INDeleteTasksTaskListResolutionResult GetUnsupported (INDeleteTasksTaskListUnsupportedReason reason); + + [Export ("initWithTaskListResolutionResult:")] + IntPtr Constructor (INTaskListResolutionResult taskListResolutionResult); + + // Inlined from parent class to avoid bug like 43205 + [New] + [Static] + [Export ("successWithResolvedTaskList:")] + INDeleteTasksTaskListResolutionResult GetSuccess (INTaskList resolvedTaskList); + + [New] + [Static] + [Export ("disambiguationWithTaskListsToDisambiguate:")] + INDeleteTasksTaskListResolutionResult GetDisambiguation (INTaskList [] taskListsToDisambiguate); + + [New] + [Static] + [Export ("confirmationRequiredWithTaskListToConfirm:")] + INDeleteTasksTaskListResolutionResult GetConfirmationRequired ([NullAllowed] INTaskList taskListToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INDeleteTasksTaskListResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INDeleteTasksTaskListResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INDeleteTasksTaskListResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INDeleteTasksTaskListResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INDeleteTasksTaskListResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INTaskResolutionResult))] + [DisableDefaultCtor] + interface INDeleteTasksTaskResolutionResult { + + [Static] + [Export ("unsupportedForReason:")] + INDeleteTasksTaskResolutionResult GetUnsupported (INDeleteTasksTaskUnsupportedReason reason); + + [Export ("initWithTaskResolutionResult:")] + IntPtr Constructor (INTaskResolutionResult taskResolutionResult); + + // Inlined from parent class to avoid bug 43205 scenario + [New] + [Static] + [Export ("successWithResolvedTask:")] + INDeleteTasksTaskResolutionResult GetSuccess (INTask resolvedTask); + + [New] + [Static] + [Export ("disambiguationWithTasksToDisambiguate:")] + INDeleteTasksTaskResolutionResult GetDisambiguation (INTask [] tasksToDisambiguate); + + [New] + [Static] + [Export ("confirmationRequiredWithTaskToConfirm:")] + INDeleteTasksTaskResolutionResult GetConfirmationRequired ([NullAllowed] INTask taskToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INDeleteTasksTaskResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INDeleteTasksTaskResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INDeleteTasksTaskResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INDeleteTasksTaskResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INDeleteTasksTaskResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResolutionResult))] + [DisableDefaultCtor] + interface INEnergyResolutionResult { + + [Static] + [Export ("successWithResolvedEnergy:")] + INEnergyResolutionResult GetSuccess (NSMeasurement resolvedEnergy); + + [Static] + [Export ("disambiguationWithEnergyToDisambiguate:")] + INEnergyResolutionResult GetDisambiguation (NSMeasurement [] energyToDisambiguate); + + [Static] + [Export ("confirmationRequiredWithEnergyToConfirm:")] + INEnergyResolutionResult GetConfirmationRequired ([NullAllowed] NSMeasurement energyToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INEnergyResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INEnergyResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INEnergyResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INEnergyResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INEnergyResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResolutionResult))] + [DisableDefaultCtor] + interface INEnumResolutionResult { + + [Static] + [Export ("successWithResolvedValue:")] + INEnumResolutionResult GetSuccess (nint resolvedValue); + + [Static] + [Export ("confirmationRequiredWithValueToConfirm:")] + INEnumResolutionResult GetConfirmationRequired (nint valueToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INEnumResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INEnumResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INEnumResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INEnumResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INEnumResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface INFile { + + [Static] + [Export ("fileWithData:filename:typeIdentifier:")] + INFile Create (NSData data, string filename, [NullAllowed] string typeIdentifier); + + [Static] + [Export ("fileWithFileURL:filename:typeIdentifier:")] + INFile Create (NSUrl fileUrl, [NullAllowed] string filename, [NullAllowed] string typeIdentifier); + + [Export ("data", ArgumentSemantic.Copy)] + NSData Data { get; } + + [Export ("filename")] + string Filename { get; set; } + + [NullAllowed, Export ("typeIdentifier")] + string TypeIdentifier { get; } + + [NullAllowed, Export ("fileURL", ArgumentSemantic.Strong)] + NSUrl FileUrl { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResolutionResult))] + [DisableDefaultCtor] + interface INFileResolutionResult { + + [Static] + [Export ("successWithResolvedFile:")] + INFileResolutionResult GetSuccess (INFile resolvedFile); + + [Static] + [Export ("disambiguationWithFilesToDisambiguate:")] + INFileResolutionResult GetDisambiguation (INFile[] filesToDisambiguate); + + [Static] + [Export ("confirmationRequiredWithFileToConfirm:")] + INFileResolutionResult GetConfirmationRequired ([NullAllowed] INFile fileToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INFileResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INFileResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INFileResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INFileResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INFileResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface INFlight : NSCopying, NSSecureCoding { + + [Export ("initWithAirline:flightNumber:boardingTime:flightDuration:departureAirportGate:arrivalAirportGate:")] + [DesignatedInitializer] + IntPtr Constructor (INAirline airline, string flightNumber, [NullAllowed] INDateComponentsRange boardingTime, INDateComponentsRange flightDuration, INAirportGate departureAirportGate, INAirportGate arrivalAirportGate); + + [Export ("airline", ArgumentSemantic.Copy)] + INAirline Airline { get; } + + [Export ("flightNumber")] + string FlightNumber { get; } + + [NullAllowed, Export ("boardingTime", ArgumentSemantic.Copy)] + INDateComponentsRange BoardingTime { get; } + + [Export ("flightDuration", ArgumentSemantic.Copy)] + INDateComponentsRange FlightDuration { get; } + + [Export ("departureAirportGate", ArgumentSemantic.Copy)] + INAirportGate DepartureAirportGate { get; } + + [Export ("arrivalAirportGate", ArgumentSemantic.Copy)] + INAirportGate ArrivalAirportGate { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INReservation))] + [DisableDefaultCtor] + interface INFlightReservation : NSCopying, NSSecureCoding { + + [Export ("initWithItemReference:reservationNumber:bookingTime:reservationStatus:reservationHolderName:actions:reservedSeat:flight:")] + [DesignatedInitializer] + IntPtr Constructor (INSpeakableString itemReference, [NullAllowed] string reservationNumber, [NullAllowed] NSDate bookingTime, INReservationStatus reservationStatus, [NullAllowed] string reservationHolderName, [NullAllowed] INReservationAction[] actions, [NullAllowed] INSeat reservedSeat, INFlight flight); + + [NullAllowed, Export ("reservedSeat", ArgumentSemantic.Copy)] + INSeat ReservedSeat { get; } + + [Export ("flight", ArgumentSemantic.Copy)] + INFlight Flight { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INIntent))] + [DisableDefaultCtor] + interface INGetReservationDetailsIntent { + + [Export ("initWithReservationContainerReference:reservationItemReferences:")] + [DesignatedInitializer] + IntPtr Constructor ([NullAllowed] INSpeakableString reservationContainerReference, [NullAllowed] INSpeakableString[] reservationItemReferences); + + [NullAllowed, Export ("reservationContainerReference", ArgumentSemantic.Copy)] + INSpeakableString ReservationContainerReference { get; } + + [NullAllowed, Export ("reservationItemReferences", ArgumentSemantic.Copy)] + INSpeakableString[] ReservationItemReferences { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResponse))] + [DisableDefaultCtor] + interface INGetReservationDetailsIntentResponse { + + [Export ("initWithCode:userActivity:")] + [DesignatedInitializer] + IntPtr Constructor (INGetReservationDetailsIntentResponseCode code, [NullAllowed] NSUserActivity userActivity); + + [Export ("code")] + INGetReservationDetailsIntentResponseCode Code { get; } + + [NullAllowed, Export ("reservations", ArgumentSemantic.Copy)] + INReservation[] Reservations { get; set; } + } + + [Watch (6,0), NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResolutionResult))] + [DisableDefaultCtor] + interface INLengthResolutionResult { + + [Static] + [Export ("successWithResolvedLength:")] + INLengthResolutionResult GetSuccess (NSMeasurement resolvedLength); + + [Static] + [Export ("disambiguationWithLengthsToDisambiguate:")] + INLengthResolutionResult GetDisambiguation (NSMeasurement [] lengthsToDisambiguate); + + [Static] + [Export ("confirmationRequiredWithLengthToConfirm:")] + INLengthResolutionResult GetConfirmationRequired ([NullAllowed] NSMeasurement lengthToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INLengthResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INLengthResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INLengthResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INLengthResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INLengthResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INReservation))] + [DisableDefaultCtor] + interface INLodgingReservation : NSCopying, NSSecureCoding { + + [Export ("initWithItemReference:reservationNumber:bookingTime:reservationStatus:reservationHolderName:actions:lodgingBusinessLocation:reservationDuration:numberOfAdults:numberOfChildren:")] + [DesignatedInitializer] + IntPtr Constructor (INSpeakableString itemReference, [NullAllowed] string reservationNumber, [NullAllowed] NSDate bookingTime, INReservationStatus reservationStatus, [NullAllowed] string reservationHolderName, [NullAllowed] INReservationAction[] actions, CLPlacemark lodgingBusinessLocation, INDateComponentsRange reservationDuration, [NullAllowed] [BindAs (typeof (int?))] NSNumber numberOfAdults, [NullAllowed] [BindAs (typeof (int?))] NSNumber numberOfChildren); + + [Export ("lodgingBusinessLocation", ArgumentSemantic.Copy)] + CLPlacemark LodgingBusinessLocation { get; } + + [Export ("reservationDuration", ArgumentSemantic.Copy)] + INDateComponentsRange ReservationDuration { get; } + + [BindAs (typeof (int?))] + [NullAllowed, Export ("numberOfAdults", ArgumentSemantic.Copy)] + NSNumber NumberOfAdults { get; } + + [BindAs (typeof (int?))] + [NullAllowed, Export ("numberOfChildren", ArgumentSemantic.Copy)] + NSNumber NumberOfChildren { get; } + } + + [Watch (6,0), NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResolutionResult))] + [DisableDefaultCtor] + interface INMassResolutionResult { + + [Static] + [Export ("successWithResolvedMass:")] + INMassResolutionResult GetSuccess (NSMeasurement resolvedMass); + + [Static] + [Export ("disambiguationWithMassToDisambiguate:")] + INMassResolutionResult GetDisambiguation (NSMeasurement [] massToDisambiguate); + + [Static] + [Export ("confirmationRequiredWithMassToConfirm:")] + INMassResolutionResult GetConfirmationRequired ([NullAllowed] NSMeasurement massToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INMassResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INMassResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INMassResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INMassResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INMassResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResolutionResult))] + [DisableDefaultCtor] + interface INMediaAffinityTypeResolutionResult { + + [Static] + [Export ("successWithResolvedMediaAffinityType:")] + INMediaAffinityTypeResolutionResult GetSuccess (INMediaAffinityType resolvedMediaAffinityType); + + [Static] + [Export ("confirmationRequiredWithMediaAffinityTypeToConfirm:")] + INMediaAffinityTypeResolutionResult GetConfirmationRequired (INMediaAffinityType mediaAffinityTypeToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INMediaAffinityTypeResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INMediaAffinityTypeResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INMediaAffinityTypeResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INMediaAffinityTypeResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INMediaAffinityTypeResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface INMediaDestination : NSCopying, NSSecureCoding { + + [Static] + [Export ("libraryDestination")] + INMediaDestination CreateLibraryDestination (); + + [Static] + [Export ("playlistDestinationWithName:")] + INMediaDestination CreatePlaylistDestination (string playlistName); + + [Export ("mediaDestinationType", ArgumentSemantic.Assign)] + INMediaDestinationType MediaDestinationType { get; } + + [NullAllowed, Export ("playlistName")] + string PlaylistName { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResolutionResult))] + [DisableDefaultCtor] + interface INMediaDestinationResolutionResult { + + [Static] + [Export ("successWithResolvedMediaDestination:")] + INMediaDestinationResolutionResult GetSuccess (INMediaDestination resolvedMediaDestination); + + [Static] + [Export ("disambiguationWithMediaDestinationsToDisambiguate:")] + INMediaDestinationResolutionResult GetDisambiguation (INMediaDestination[] mediaDestinationsToDisambiguate); + + [Static] + [Export ("confirmationRequiredWithMediaDestinationToConfirm:")] + INMediaDestinationResolutionResult GetConfirmationRequired ([NullAllowed] INMediaDestination mediaDestinationToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INMediaDestinationResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INMediaDestinationResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INMediaDestinationResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INMediaDestinationResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INMediaDestinationResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResolutionResult))] + [DisableDefaultCtor] + interface INMediaItemResolutionResult { + + [Static] + [Export ("successWithResolvedMediaItem:")] + INMediaItemResolutionResult GetSuccess (INMediaItem resolvedMediaItem); + + [Static] + [Export ("successesWithResolvedMediaItems:")] + INMediaItemResolutionResult [] GetSuccesses (INMediaItem [] resolvedMediaItems); + + [Static] + [Export ("disambiguationWithMediaItemsToDisambiguate:")] + INMediaItemResolutionResult GetDisambiguation (INMediaItem[] mediaItemsToDisambiguate); + + [Static] + [Export ("confirmationRequiredWithMediaItemToConfirm:")] + INMediaItemResolutionResult GetConfirmationRequired ([NullAllowed] INMediaItem mediaItemToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INMediaItemResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INMediaItemResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INMediaItemResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INMediaItemResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INMediaItemResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface INMediaSearch : NSCopying, NSSecureCoding { + + [Export ("initWithMediaType:sortOrder:mediaName:artistName:albumName:genreNames:moodNames:releaseDate:reference:mediaIdentifier:")] + [DesignatedInitializer] + IntPtr Constructor (INMediaItemType mediaType, INMediaSortOrder sortOrder, [NullAllowed] string mediaName, [NullAllowed] string artistName, [NullAllowed] string albumName, [NullAllowed] string[] genreNames, [NullAllowed] string[] moodNames, [NullAllowed] INDateComponentsRange releaseDate, INMediaReference reference, [NullAllowed] string mediaIdentifier); + + [Export ("mediaType", ArgumentSemantic.Assign)] + INMediaItemType MediaType { get; } + + [Export ("sortOrder", ArgumentSemantic.Assign)] + INMediaSortOrder SortOrder { get; } + + [NullAllowed, Export ("mediaName")] + string MediaName { get; } + + [NullAllowed, Export ("artistName")] + string ArtistName { get; } + + [NullAllowed, Export ("albumName")] + string AlbumName { get; } + + [NullAllowed, Export ("genreNames", ArgumentSemantic.Copy)] + string[] GenreNames { get; } + + [NullAllowed, Export ("moodNames", ArgumentSemantic.Copy)] + string[] MoodNames { get; } + + [NullAllowed, Export ("releaseDate", ArgumentSemantic.Copy)] + INDateComponentsRange ReleaseDate { get; } + + [Export ("reference", ArgumentSemantic.Assign)] + INMediaReference Reference { get; } + + [NullAllowed, Export ("mediaIdentifier")] + string MediaIdentifier { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INUserContext))] + interface INMediaUserContext { + + [Export ("subscriptionStatus", ArgumentSemantic.Assign)] + INMediaUserContextSubscriptionStatus SubscriptionStatus { get; set; } + + [BindAs (typeof (int?))] + [NullAllowed, Export ("numberOfLibraryItems", ArgumentSemantic.Copy)] + NSNumber NumberOfLibraryItems { get; set; } + } + + [Watch (6,0), NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResolutionResult))] + [DisableDefaultCtor] + interface INObjectResolutionResult { + + [Static] + [Export ("successWithResolvedObject:")] + INObjectResolutionResult GetSuccess (INObject resolvedObject); + + [Static] + [Export ("disambiguationWithObjectsToDisambiguate:")] + INObjectResolutionResult GetDisambiguation (INObject[] objectsToDisambiguate); + + [Static] + [Export ("confirmationRequiredWithObjectToConfirm:")] + INObjectResolutionResult GetConfirmationRequired ([NullAllowed] INObject objectToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INObjectResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INObjectResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INObjectResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INObjectResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INObjectResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResolutionResult))] + [DisableDefaultCtor] + interface INPaymentMethodResolutionResult { + + [Static] + [Export ("successWithResolvedPaymentMethod:")] + INPaymentMethodResolutionResult GetSuccess (INPaymentMethod resolvedPaymentMethod); + + [Static] + [Export ("disambiguationWithPaymentMethodsToDisambiguate:")] + INPaymentMethodResolutionResult GetDisambiguation (INPaymentMethod [] paymentMethodsToDisambiguate); + + [Static] + [Export ("confirmationRequiredWithPaymentMethodToConfirm:")] + INPaymentMethodResolutionResult GetConfirmationRequired ([NullAllowed] INPaymentMethod paymentMethodToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INPaymentMethodResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INPaymentMethodResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INPaymentMethodResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INPaymentMethodResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INPaymentMethodResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INMediaItemResolutionResult))] + [DisableDefaultCtor] + interface INPlayMediaMediaItemResolutionResult { + + [Static] + [Export ("unsupportedForReason:")] + INPlayMediaMediaItemResolutionResult GetUnsupported (INPlayMediaMediaItemUnsupportedReason reason); + + [Export ("initWithMediaItemResolutionResult:")] + IntPtr Constructor (INMediaItemResolutionResult mediaItemResolutionResult); + + // Inlined from parent class to avoid bug like 43205 + + [New] + [Static] + [Export ("successWithResolvedMediaItem:")] + INPlayMediaMediaItemResolutionResult GetSuccess (INMediaItem resolvedMediaItem); + + [New] + [Static] + [Export ("successesWithResolvedMediaItems:")] + INPlayMediaMediaItemResolutionResult [] GetSuccesses (INMediaItem [] resolvedMediaItems); + + [New] + [Static] + [Export ("disambiguationWithMediaItemsToDisambiguate:")] + INPlayMediaMediaItemResolutionResult GetDisambiguation (INMediaItem[] mediaItemsToDisambiguate); + + [New] + [Static] + [Export ("confirmationRequiredWithMediaItemToConfirm:")] + INPlayMediaMediaItemResolutionResult GetConfirmationRequired ([NullAllowed] INMediaItem mediaItemToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INPlayMediaMediaItemResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INPlayMediaMediaItemResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INPlayMediaMediaItemResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INPlayMediaMediaItemResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INPlayMediaMediaItemResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INDoubleResolutionResult))] + [DisableDefaultCtor] + interface INPlayMediaPlaybackSpeedResolutionResult { + + [Static] + [Export ("unsupportedForReason:")] + INPlayMediaPlaybackSpeedResolutionResult UnsupportedForReason (INPlayMediaPlaybackSpeedUnsupportedReason reason); + + [Export ("initWithDoubleResolutionResult:")] + IntPtr Constructor (INDoubleResolutionResult doubleResolutionResult); + + // Inlined from parent class to avoid bug like 43205 + + [New] + [Static] + [Export ("successWithResolvedValue:")] + INDoubleResolutionResult GetSuccess (double resolvedValue); + + [Static] + [Export ("confirmationRequiredWithValueToConfirm:")] + INDoubleResolutionResult GetConfirmationRequired ([NullAllowed] [BindAs (typeof (double?))] NSNumber valueToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INDoubleResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INDoubleResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INDoubleResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INDoubleResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INDoubleResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResolutionResult))] + interface INPlaybackQueueLocationResolutionResult { + + [Static] + [Export ("successWithResolvedPlaybackQueueLocation:")] + INPlaybackQueueLocationResolutionResult GetSuccess (INPlaybackQueueLocation resolvedPlaybackQueueLocation); + + [Static] + [Export ("confirmationRequiredWithPlaybackQueueLocationToConfirm:")] + INPlaybackQueueLocationResolutionResult GetConfirmationRequired (INPlaybackQueueLocation playbackQueueLocationToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INPlaybackQueueLocationResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INPlaybackQueueLocationResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INPlaybackQueueLocationResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INPlaybackQueueLocationResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INPlaybackQueueLocationResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResolutionResult))] + [DisableDefaultCtor] + interface INPlaybackRepeatModeResolutionResult { + + [Static] + [Export ("successWithResolvedPlaybackRepeatMode:")] + INPlaybackRepeatModeResolutionResult GetSuccess (INPlaybackRepeatMode resolvedPlaybackRepeatMode); + + [Static] + [Export ("confirmationRequiredWithPlaybackRepeatModeToConfirm:")] + INPlaybackRepeatModeResolutionResult GetConfirmationRequired (INPlaybackRepeatMode playbackRepeatModeToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INPlaybackRepeatModeResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INPlaybackRepeatModeResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INPlaybackRepeatModeResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INPlaybackRepeatModeResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INPlaybackRepeatModeResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface INRentalCar : NSCopying, NSSecureCoding { + + [Export ("initWithRentalCompanyName:type:make:model:rentalCarDescription:")] + [DesignatedInitializer] + IntPtr Constructor (string rentalCompanyName, [NullAllowed] string type, [NullAllowed] string make, [NullAllowed] string model, [NullAllowed] string rentalCarDescription); + + [Export ("rentalCompanyName")] + string RentalCompanyName { get; } + + [NullAllowed, Export ("type")] + string Type { get; } + + [NullAllowed, Export ("make")] + string Make { get; } + + [NullAllowed, Export ("model")] + string Model { get; } + + [NullAllowed, Export ("rentalCarDescription")] + string RentalCarDescription { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INReservation))] + [DisableDefaultCtor] + interface INRentalCarReservation : NSCopying, NSSecureCoding { + + [Export ("initWithItemReference:reservationNumber:bookingTime:reservationStatus:reservationHolderName:actions:rentalCar:rentalDuration:pickupLocation:dropOffLocation:")] + [DesignatedInitializer] + IntPtr Constructor (INSpeakableString itemReference, [NullAllowed] string reservationNumber, [NullAllowed] NSDate bookingTime, INReservationStatus reservationStatus, [NullAllowed] string reservationHolderName, [NullAllowed] INReservationAction[] actions, INRentalCar rentalCar, INDateComponentsRange rentalDuration, [NullAllowed] CLPlacemark pickupLocation, [NullAllowed] CLPlacemark dropOffLocation); + + [Export ("rentalCar", ArgumentSemantic.Copy)] + INRentalCar RentalCar { get; } + + [Export ("rentalDuration", ArgumentSemantic.Copy)] + INDateComponentsRange RentalDuration { get; } + + [NullAllowed, Export ("pickupLocation", ArgumentSemantic.Copy)] + CLPlacemark PickupLocation { get; } + + [NullAllowed, Export ("dropOffLocation", ArgumentSemantic.Copy)] + CLPlacemark DropOffLocation { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface INReservation : NSCopying, NSSecureCoding { + + [Export ("itemReference", ArgumentSemantic.Copy)] + INSpeakableString ItemReference { get; } + + [NullAllowed, Export ("reservationNumber")] + string ReservationNumber { get; } + + [NullAllowed, Export ("bookingTime", ArgumentSemantic.Copy)] + NSDate BookingTime { get; } + + [Export ("reservationStatus", ArgumentSemantic.Assign)] + INReservationStatus ReservationStatus { get; } + + [NullAllowed, Export ("reservationHolderName")] + string ReservationHolderName { get; } + + [NullAllowed, Export ("actions", ArgumentSemantic.Copy)] + INReservationAction [] Actions { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface INReservationAction : NSCopying, NSSecureCoding { + + [Export ("initWithType:validDuration:userActivity:")] + [DesignatedInitializer] + IntPtr Constructor (INReservationActionType type, INDateComponentsRange validDuration, NSUserActivity userActivity); + + [Export ("type", ArgumentSemantic.Assign)] + INReservationActionType Type { get; } + + [Export ("validDuration", ArgumentSemantic.Copy)] + INDateComponentsRange ValidDuration { get; } + + [Export ("userActivity", ArgumentSemantic.Copy)] + NSUserActivity UserActivity { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INReservation))] + [DisableDefaultCtor] + interface INRestaurantReservation : NSCopying, NSSecureCoding { + + [Export ("initWithItemReference:reservationNumber:bookingTime:reservationStatus:reservationHolderName:actions:reservationDuration:partySize:restaurantLocation:")] + [DesignatedInitializer] + IntPtr Constructor (INSpeakableString itemReference, [NullAllowed] string reservationNumber, [NullAllowed] NSDate bookingTime, INReservationStatus reservationStatus, [NullAllowed] string reservationHolderName, [NullAllowed] INReservationAction [] actions, INDateComponentsRange reservationDuration, [NullAllowed] [BindAs (typeof (int?))] NSNumber partySize, CLPlacemark restaurantLocation); + + [Export ("reservationDuration", ArgumentSemantic.Copy)] + INDateComponentsRange ReservationDuration { get; } + + [BindAs (typeof (int?))] + [NullAllowed, Export ("partySize", ArgumentSemantic.Copy)] + NSNumber PartySize { get; } + + [Export ("restaurantLocation", ArgumentSemantic.Copy)] + CLPlacemark RestaurantLocation { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INIntent))] + [DisableDefaultCtor] + interface INSearchForMediaIntent { + + [Export ("initWithMediaItems:mediaSearch:")] + [DesignatedInitializer] + IntPtr Constructor ([NullAllowed] INMediaItem [] mediaItems, [NullAllowed] INMediaSearch mediaSearch); + + [NullAllowed, Export ("mediaItems", ArgumentSemantic.Copy)] + INMediaItem [] MediaItems { get; } + + [NullAllowed, Export ("mediaSearch", ArgumentSemantic.Copy)] + INMediaSearch MediaSearch { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Protocol] + interface INSearchForMediaIntentHandling { + + [Abstract] + [Export ("handleSearchForMedia:completion:")] + void HandleSearch (INSearchForMediaIntent intent, Action completion); + + [Export ("confirmSearchForMedia:completion:")] + void Confirm (INSearchForMediaIntent intent, Action completion); + + [Export ("resolveMediaItemsForSearchForMedia:withCompletion:")] + void ResolveMediaItems (INSearchForMediaIntent intent, Action completion); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResponse))] + [DisableDefaultCtor] + interface INSearchForMediaIntentResponse { + + [Export ("initWithCode:userActivity:")] + [DesignatedInitializer] + IntPtr Constructor (INSearchForMediaIntentResponseCode code, [NullAllowed] NSUserActivity userActivity); + + [Export ("code")] + INSearchForMediaIntentResponseCode Code { get; } + + [NullAllowed, Export ("mediaItems", ArgumentSemantic.Copy)] + INMediaItem[] MediaItems { get; set; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface INSeat : NSCopying, NSSecureCoding { + + [Export ("initWithSeatSection:seatRow:seatNumber:seatingType:")] + [DesignatedInitializer] + IntPtr Constructor ([NullAllowed] string seatSection, [NullAllowed] string seatRow, [NullAllowed] string seatNumber, [NullAllowed] string seatingType); + + [NullAllowed, Export ("seatSection")] + string SeatSection { get; } + + [NullAllowed, Export ("seatRow")] + string SeatRow { get; } + + [NullAllowed, Export ("seatNumber")] + string SeatNumber { get; } + + [NullAllowed, Export ("seatingType")] + string SeatingType { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INTemporalEventTriggerResolutionResult))] + [DisableDefaultCtor] + interface INSetTaskAttributeTemporalEventTriggerResolutionResult { + + [Static] + [Export ("unsupportedForReason:")] + INSetTaskAttributeTemporalEventTriggerResolutionResult GetUnsupported (INSetTaskAttributeTemporalEventTriggerUnsupportedReason reason); + + [Export ("initWithTemporalEventTriggerResolutionResult:")] + IntPtr Constructor (INTemporalEventTriggerResolutionResult temporalEventTriggerResolutionResult); + + // Inlined from parent to avoid bug like 43205 + + [New] + [Static] + [Export ("successWithResolvedTemporalEventTrigger:")] + INSetTaskAttributeTemporalEventTriggerResolutionResult GetSuccess (INTemporalEventTrigger resolvedTemporalEventTrigger); + + [New] + [Static] + [Export ("disambiguationWithTemporalEventTriggersToDisambiguate:")] + INSetTaskAttributeTemporalEventTriggerResolutionResult GetDisambiguation (INTemporalEventTrigger [] temporalEventTriggersToDisambiguate); + + [New] + [Static] + [Export ("confirmationRequiredWithTemporalEventTriggerToConfirm:")] + INSetTaskAttributeTemporalEventTriggerResolutionResult GetConfirmationRequired ([NullAllowed] INTemporalEventTrigger temporalEventTriggerToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INSetTaskAttributeTemporalEventTriggerResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INSetTaskAttributeTemporalEventTriggerResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INSetTaskAttributeTemporalEventTriggerResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INSetTaskAttributeTemporalEventTriggerResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INSetTaskAttributeTemporalEventTriggerResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INIntent))] + [DisableDefaultCtor] + interface INSnoozeTasksIntent { + + [Export ("initWithTasks:nextTriggerTime:all:")] + [DesignatedInitializer] + IntPtr Constructor ([NullAllowed] INTask[] tasks, [NullAllowed] INDateComponentsRange nextTriggerTime, [NullAllowed] [BindAs (typeof (bool?))] NSNumber all); + + [NullAllowed, Export ("tasks", ArgumentSemantic.Copy)] + INTask[] Tasks { get; } + + [NullAllowed, Export ("nextTriggerTime", ArgumentSemantic.Copy)] + INDateComponentsRange NextTriggerTime { get; } + + [BindAs (typeof (bool?))] + [NullAllowed, Export ("all", ArgumentSemantic.Copy)] + NSNumber All { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Protocol] + interface INSnoozeTasksIntentHandling { + + [Abstract] + [Export ("handleSnoozeTasks:completion:")] + void HandleSnoozeTasks (INSnoozeTasksIntent intent, Action completion); + + [Export ("confirmSnoozeTasks:completion:")] + void Confirm (INSnoozeTasksIntent intent, Action completion); + + [Export ("resolveTasksForSnoozeTasks:withCompletion:")] + void ResolveTasks (INSnoozeTasksIntent intent, Action completion); + + [Export ("resolveNextTriggerTimeForSnoozeTasks:withCompletion:")] + void ResolveNextTriggerTime (INSnoozeTasksIntent intent, Action completion); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResponse))] + [DisableDefaultCtor] + interface INSnoozeTasksIntentResponse { + + [Export ("initWithCode:userActivity:")] + [DesignatedInitializer] + IntPtr Constructor (INSnoozeTasksIntentResponseCode code, [NullAllowed] NSUserActivity userActivity); + + [Export ("code")] + INSnoozeTasksIntentResponseCode Code { get; } + + [NullAllowed, Export ("snoozedTasks", ArgumentSemantic.Copy)] + INTask[] SnoozedTasks { get; set; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INTaskResolutionResult))] + [DisableDefaultCtor] + interface INSnoozeTasksTaskResolutionResult { + + [Static] + [Export ("unsupportedForReason:")] + INSnoozeTasksTaskResolutionResult GetUnsupported (INSnoozeTasksTaskUnsupportedReason reason); + + [Export ("initWithTaskResolutionResult:")] + IntPtr Constructor (INTaskResolutionResult taskResolutionResult); + + // Inlined from parent class to avoid bug 43205 scenario + [New] + [Static] + [Export ("successWithResolvedTask:")] + INSnoozeTasksTaskResolutionResult GetSuccess (INTask resolvedTask); + + [New] + [Static] + [Export ("disambiguationWithTasksToDisambiguate:")] + INSnoozeTasksTaskResolutionResult GetDisambiguation (INTask [] tasksToDisambiguate); + + [New] + [Static] + [Export ("confirmationRequiredWithTaskToConfirm:")] + INSnoozeTasksTaskResolutionResult GetConfirmationRequired ([NullAllowed] INTask taskToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INSnoozeTasksTaskResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INSnoozeTasksTaskResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INSnoozeTasksTaskResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INSnoozeTasksTaskResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INSnoozeTasksTaskResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResolutionResult))] + [DisableDefaultCtor] + interface INSpeedResolutionResult { + + [Static] + [Export ("successWithResolvedSpeed:")] + INSpeedResolutionResult GetSuccess (NSMeasurement resolvedSpeed); + + [Static] + [Export ("disambiguationWithSpeedToDisambiguate:")] + INSpeedResolutionResult GetDisambiguation (NSMeasurement [] speedToDisambiguate); + + [Static] + [Export ("confirmationRequiredWithSpeedToConfirm:")] + INSpeedResolutionResult GetConfirmationRequired ([NullAllowed] NSMeasurement speedToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INSpeedResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INSpeedResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INSpeedResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INSpeedResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INSpeedResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INCallCapabilityResolutionResult))] + [DisableDefaultCtor] + interface INStartCallCallCapabilityResolutionResult { + + [Static] + [Export ("unsupportedForReason:")] + INStartCallCallCapabilityResolutionResult GetUnsupported (INStartCallCallCapabilityUnsupportedReason reason); + + [Export ("initWithCallCapabilityResolutionResult:")] + IntPtr Constructor (INCallCapabilityResolutionResult callCapabilityResolutionResult); + + // Inlined from parent class to avoid bug 43205 scenario + [New] + [Static] + [Export ("successWithResolvedCallCapability:")] + INStartCallCallCapabilityResolutionResult GetSuccess (INCallCapability resolvedCallCapability); + + [New] + [Static] + [Export ("confirmationRequiredWithCallCapabilityToConfirm:")] + INStartCallCallCapabilityResolutionResult GetConfirmationRequired (INCallCapability callCapabilityToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INStartCallCallCapabilityResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INStartCallCallCapabilityResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INStartCallCallCapabilityResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INStartCallCallCapabilityResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INStartCallCallCapabilityResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INPersonResolutionResult))] + [DisableDefaultCtor] + interface INStartCallContactResolutionResult { + + [Static] + [Export ("unsupportedForReason:")] + INStartCallContactResolutionResult GetUnsupported (INStartCallContactUnsupportedReason reason); + + [Export ("initWithPersonResolutionResult:")] + IntPtr Constructor (INPersonResolutionResult personResolutionResult); + + // Inlined from parent class to avoid bug 43205 scenario + [New] + [Static] + [Export ("successWithResolvedPerson:")] + INStartCallContactResolutionResult GetSuccess (INPerson resolvedPerson); + + [New] + [Static] + [Export ("disambiguationWithPeopleToDisambiguate:")] + INStartCallContactResolutionResult GetDisambiguation (INPerson [] peopleToDisambiguate); + + [New] + [Static] + [Export ("confirmationRequiredWithPersonToConfirm:")] + INStartCallContactResolutionResult GetConfirmationRequired ([NullAllowed] INPerson personToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INStartCallContactResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INStartCallContactResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INStartCallContactResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INStartCallContactResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INStartCallContactResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INIntent))] + [DisableDefaultCtor] + interface INStartCallIntent { + + [Export ("initWithAudioRoute:destinationType:contacts:recordTypeForRedialing:callCapability:")] + [DesignatedInitializer] + IntPtr Constructor (INCallAudioRoute audioRoute, INCallDestinationType destinationType, [NullAllowed] INPerson[] contacts, INCallRecordType recordTypeForRedialing, INCallCapability callCapability); + + [Export ("audioRoute", ArgumentSemantic.Assign)] + INCallAudioRoute AudioRoute { get; } + + [Export ("destinationType", ArgumentSemantic.Assign)] + INCallDestinationType DestinationType { get; } + + [NullAllowed, Export ("contacts", ArgumentSemantic.Copy)] + INPerson[] Contacts { get; } + + [Export ("recordTypeForRedialing", ArgumentSemantic.Assign)] + INCallRecordType RecordTypeForRedialing { get; } + + [Export ("callCapability", ArgumentSemantic.Assign)] + INCallCapability CallCapability { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Protocol] + interface INStartCallIntentHandling { + + [Abstract] + [Export ("handleStartCall:completion:")] + void HandleStartCall (INStartCallIntent intent, Action completion); + + [Export ("confirmStartCall:completion:")] + void Confirm (INStartCallIntent intent, Action completion); + + [Export ("resolveDestinationTypeForStartCall:withCompletion:")] + void ResolveDestinationType (INStartCallIntent intent, Action completion); + + [Export ("resolveContactsForStartCall:withCompletion:")] + void ResolveContacts (INStartCallIntent intent, Action> completion); + + [Export ("resolveCallCapabilityForStartCall:withCompletion:")] + void ResolveCallCapability (INStartCallIntent intent, Action completion); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResponse))] + [DisableDefaultCtor] + interface INStartCallIntentResponse { + + [Export ("initWithCode:userActivity:")] + [DesignatedInitializer] + IntPtr Constructor (INStartCallIntentResponseCode code, [NullAllowed] NSUserActivity userActivity); + + [Export ("code")] + INStartCallIntentResponseCode Code { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResolutionResult))] + [DisableDefaultCtor] + interface INTaskPriorityResolutionResult { + + [Static] + [Export ("successWithResolvedTaskPriority:")] + INTaskPriorityResolutionResult GetSuccess (INTaskPriority resolvedTaskPriority); + + [Static] + [Export ("confirmationRequiredWithTaskPriorityToConfirm:")] + INTaskPriorityResolutionResult ConfirmationRequired (INTaskPriority taskPriorityToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INTaskPriorityResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INTaskPriorityResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INTaskPriorityResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INTaskPriorityResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INTaskPriorityResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResolutionResult))] + [DisableDefaultCtor] + interface INTemporalEventTriggerTypeOptionsResolutionResult { + + [Static] + [Export ("successWithResolvedTemporalEventTriggerTypeOptions:")] + INTemporalEventTriggerTypeOptionsResolutionResult GetSuccess (INTemporalEventTriggerTypeOptions resolvedTemporalEventTriggerTypeOptions); + + [Static] + [Export ("confirmationRequiredWithTemporalEventTriggerTypeOptionsToConfirm:")] + INTemporalEventTriggerTypeOptionsResolutionResult ConfirmationRequired (INTemporalEventTriggerTypeOptions temporalEventTriggerTypeOptionsToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INTemporalEventTriggerTypeOptionsResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INTemporalEventTriggerTypeOptionsResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INTemporalEventTriggerTypeOptionsResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INTemporalEventTriggerTypeOptionsResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INTemporalEventTriggerTypeOptionsResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface INTicketedEvent : NSCopying, NSSecureCoding { + + [Export ("initWithCategory:name:eventDuration:location:")] + [DesignatedInitializer] + IntPtr Constructor (INTicketedEventCategory category, string name, INDateComponentsRange eventDuration, [NullAllowed] CLPlacemark location); + + [Export ("category", ArgumentSemantic.Assign)] + INTicketedEventCategory Category { get; } + + [Export ("name")] + string Name { get; } + + [Export ("eventDuration", ArgumentSemantic.Copy)] + INDateComponentsRange EventDuration { get; } + + [NullAllowed, Export ("location", ArgumentSemantic.Copy)] + CLPlacemark Location { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INReservation))] + [DisableDefaultCtor] + interface INTicketedEventReservation : NSCopying, NSSecureCoding { + + [Export ("initWithItemReference:reservationNumber:bookingTime:reservationStatus:reservationHolderName:actions:reservedSeat:event:")] + [DesignatedInitializer] + IntPtr Constructor (INSpeakableString itemReference, [NullAllowed] string reservationNumber, [NullAllowed] NSDate bookingTime, INReservationStatus reservationStatus, [NullAllowed] string reservationHolderName, [NullAllowed] INReservationAction[] actions, [NullAllowed] INSeat reservedSeat, INTicketedEvent @event); + + [Export ("event", ArgumentSemantic.Copy)] + INTicketedEvent Event { get; } + + [NullAllowed, Export ("reservedSeat", ArgumentSemantic.Copy)] + INSeat ReservedSeat { get; } + } + + [Watch (6,0), NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResolutionResult))] + [DisableDefaultCtor] + interface INTimeIntervalResolutionResult { + + [Static] + [Export ("successWithResolvedTimeInterval:")] + INTimeIntervalResolutionResult GetSuccess (double resolvedTimeInterval); + + [Static] + [Export ("confirmationRequiredWithTimeIntervalToConfirm:")] + INTimeIntervalResolutionResult ConfirmationRequired (double timeIntervalToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INTimeIntervalResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INTimeIntervalResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INTimeIntervalResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INTimeIntervalResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INTimeIntervalResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INReservation))] + [DisableDefaultCtor] + interface INTrainReservation : NSCopying, NSSecureCoding { + + [Export ("initWithItemReference:reservationNumber:bookingTime:reservationStatus:reservationHolderName:actions:reservedSeat:trainTrip:")] + [DesignatedInitializer] + IntPtr Constructor (INSpeakableString itemReference, [NullAllowed] string reservationNumber, [NullAllowed] NSDate bookingTime, INReservationStatus reservationStatus, [NullAllowed] string reservationHolderName, [NullAllowed] INReservationAction[] actions, [NullAllowed] INSeat reservedSeat, INTrainTrip trainTrip); + + [NullAllowed, Export ("reservedSeat", ArgumentSemantic.Copy)] + INSeat ReservedSeat { get; } + + [Export ("trainTrip", ArgumentSemantic.Copy)] + INTrainTrip TrainTrip { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface INTrainTrip : NSCopying, NSSecureCoding { + + [Export ("initWithProvider:trainName:trainNumber:tripDuration:departureStationLocation:departurePlatform:arrivalStationLocation:arrivalPlatform:")] + [DesignatedInitializer] + IntPtr Constructor ([NullAllowed] string provider, [NullAllowed] string trainName, [NullAllowed] string trainNumber, INDateComponentsRange tripDuration, CLPlacemark departureStationLocation, [NullAllowed] string departurePlatform, CLPlacemark arrivalStationLocation, [NullAllowed] string arrivalPlatform); + + [NullAllowed, Export ("provider")] + string Provider { get; } + + [NullAllowed, Export ("trainName")] + string TrainName { get; } + + [NullAllowed, Export ("trainNumber")] + string TrainNumber { get; } + + [Export ("tripDuration", ArgumentSemantic.Copy)] + INDateComponentsRange TripDuration { get; } + + [Export ("departureStationLocation", ArgumentSemantic.Copy)] + CLPlacemark DepartureStationLocation { get; } + + [NullAllowed, Export ("departurePlatform")] + string DeparturePlatform { get; } + + [Export ("arrivalStationLocation", ArgumentSemantic.Copy)] + CLPlacemark ArrivalStationLocation { get; } + + [NullAllowed, Export ("arrivalPlatform")] + string ArrivalPlatform { get; } + } + + [Watch (6,0), NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResolutionResult), Name = "INURLResolutionResult")] + [DisableDefaultCtor] + interface INUrlResolutionResult { + + [Static] + [Export ("successWithResolvedURL:")] + INUrlResolutionResult GetSuccess (NSUrl resolvedUrl); + + [Static] + [Export ("disambiguationWithURLsToDisambiguate:")] + INUrlResolutionResult GetDisambiguation (NSUrl[] urlsToDisambiguate); + + [Static] + [Export ("confirmationRequiredWithURLToConfirm:")] + INUrlResolutionResult GetConfirmationRequired ([NullAllowed] NSUrl urlToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INUrlResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INUrlResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INUrlResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INUrlResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INUrlResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INIntent))] + [DisableDefaultCtor] + interface INUpdateMediaAffinityIntent { + + [Export ("initWithMediaItems:mediaSearch:affinityType:")] + [DesignatedInitializer] + IntPtr Constructor ([NullAllowed] INMediaItem[] mediaItems, [NullAllowed] INMediaSearch mediaSearch, INMediaAffinityType affinityType); + + [NullAllowed, Export ("mediaItems", ArgumentSemantic.Copy)] + INMediaItem[] MediaItems { get; } + + [NullAllowed, Export ("mediaSearch", ArgumentSemantic.Copy)] + INMediaSearch MediaSearch { get; } + + [Export ("affinityType", ArgumentSemantic.Assign)] + INMediaAffinityType AffinityType { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [Protocol] + interface INUpdateMediaAffinityIntentHandling { + + [Abstract] + [Export ("handleUpdateMediaAffinity:completion:")] + void HandleUpdateMediaAffinity (INUpdateMediaAffinityIntent intent, Action completion); + + [Export ("confirmUpdateMediaAffinity:completion:")] + void Confirm (INUpdateMediaAffinityIntent intent, Action completion); + + [Export ("resolveMediaItemsForUpdateMediaAffinity:withCompletion:")] + void ResolveMediaItems (INUpdateMediaAffinityIntent intent, Action> completion); + + [Export ("resolveAffinityTypeForUpdateMediaAffinity:withCompletion:")] + void ResolveAffinityType (INUpdateMediaAffinityIntent intent, Action completion); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResponse))] + [DisableDefaultCtor] + interface INUpdateMediaAffinityIntentResponse { + + [Export ("initWithCode:userActivity:")] + [DesignatedInitializer] + IntPtr Constructor (INUpdateMediaAffinityIntentResponseCode code, [NullAllowed] NSUserActivity userActivity); + + [Export ("code")] + INUpdateMediaAffinityIntentResponseCode Code { get; } + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INMediaItemResolutionResult))] + [DisableDefaultCtor] + interface INUpdateMediaAffinityMediaItemResolutionResult { + + [Static] + [Export ("unsupportedForReason:")] + INUpdateMediaAffinityMediaItemResolutionResult GetUnsupported (INUpdateMediaAffinityMediaItemUnsupportedReason reason); + + [Export ("initWithMediaItemResolutionResult:")] + IntPtr Constructor (INMediaItemResolutionResult mediaItemResolutionResult); + + // Inlined from parent class to avoid bug like 43205 + + [New] + [Static] + [Export ("successWithResolvedMediaItem:")] + INUpdateMediaAffinityMediaItemResolutionResult GetSuccess (INMediaItem resolvedMediaItem); + + [New] + [Static] + [Export ("successesWithResolvedMediaItems:")] + INUpdateMediaAffinityMediaItemResolutionResult [] GetSuccesses (INMediaItem [] resolvedMediaItems); + + [New] + [Static] + [Export ("disambiguationWithMediaItemsToDisambiguate:")] + INUpdateMediaAffinityMediaItemResolutionResult GetDisambiguation (INMediaItem[] mediaItemsToDisambiguate); + + [New] + [Static] + [Export ("confirmationRequiredWithMediaItemToConfirm:")] + INUpdateMediaAffinityMediaItemResolutionResult GetConfirmationRequired ([NullAllowed] INMediaItem mediaItemToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INUpdateMediaAffinityMediaItemResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INUpdateMediaAffinityMediaItemResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INUpdateMediaAffinityMediaItemResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INUpdateMediaAffinityMediaItemResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INUpdateMediaAffinityMediaItemResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface INUserContext : NSSecureCoding { + + [Export ("becomeCurrent")] + void BecomeCurrent (); + } + + [Watch (6,0), NoMac, iOS (13,0)] + [BaseType (typeof (INIntentResolutionResult))] + [DisableDefaultCtor] + interface INVolumeResolutionResult { + + [Static] + [Export ("successWithResolvedVolume:")] + INVolumeResolutionResult GetSuccess (NSMeasurement resolvedVolume); + + [Static] + [Export ("disambiguationWithVolumeToDisambiguate:")] + INVolumeResolutionResult GetDisambiguation (NSMeasurement [] volumeToDisambiguate); + + [Static] + [Export ("confirmationRequiredWithVolumeToConfirm:")] + INVolumeResolutionResult GetConfirmationRequired ([NullAllowed] NSMeasurement volumeToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INVolumeResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INVolumeResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INVolumeResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INVolumeResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INVolumeResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INMediaDestinationResolutionResult))] + [DisableDefaultCtor] + interface INAddMediaMediaDestinationResolutionResult { + + [Static] + [Export ("unsupportedForReason:")] + INAddMediaMediaDestinationResolutionResult GetUnsupported (INAddMediaMediaDestinationUnsupportedReason reason); + + [Export ("initWithMediaDestinationResolutionResult:")] + IntPtr Constructor (INMediaDestinationResolutionResult mediaDestinationResolutionResult); + + // Inlined from parent class to avoid bug like 43205 + + [New] + [Static] + [Export ("successWithResolvedMediaDestination:")] + INAddMediaMediaDestinationResolutionResult GetSuccess (INMediaDestination resolvedMediaDestination); + + [New] + [Static] + [Export ("disambiguationWithMediaDestinationsToDisambiguate:")] + INAddMediaMediaDestinationResolutionResult GetDisambiguation (INMediaDestination[] mediaDestinationsToDisambiguate); + + [New] + [Static] + [Export ("confirmationRequiredWithMediaDestinationToConfirm:")] + INAddMediaMediaDestinationResolutionResult GetConfirmationRequired ([NullAllowed] INMediaDestination mediaDestinationToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INAddMediaMediaDestinationResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INAddMediaMediaDestinationResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INAddMediaMediaDestinationResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INAddMediaMediaDestinationResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INAddMediaMediaDestinationResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + [Watch (6,0), NoTV, NoMac, iOS (13,0)] + [BaseType (typeof (INMediaItemResolutionResult))] + interface INSearchForMediaMediaItemResolutionResult { + + [Static] + [Export ("unsupportedForReason:")] + INSearchForMediaMediaItemResolutionResult GetUnsupported (INSearchForMediaMediaItemUnsupportedReason reason); + + [Export ("initWithMediaItemResolutionResult:")] + IntPtr Constructor (INMediaItemResolutionResult mediaItemResolutionResult); + + // Inlined from parent class to avoid bug like 43205 + + [New] + [Static] + [Export ("successWithResolvedMediaItem:")] + INSearchForMediaMediaItemResolutionResult GetSuccess (INMediaItem resolvedMediaItem); + + [New] + [Static] + [Export ("successesWithResolvedMediaItems:")] + INSearchForMediaMediaItemResolutionResult [] GetSuccesses (INMediaItem [] resolvedMediaItems); + + [New] + [Static] + [Export ("disambiguationWithMediaItemsToDisambiguate:")] + INSearchForMediaMediaItemResolutionResult GetDisambiguation (INMediaItem[] mediaItemsToDisambiguate); + + [New] + [Static] + [Export ("confirmationRequiredWithMediaItemToConfirm:")] + INSearchForMediaMediaItemResolutionResult GetConfirmationRequired ([NullAllowed] INMediaItem mediaItemToConfirm); + + // Fixes bug 43205. We need to return the inherited type not the base type + // because users won't be able to downcast easily + + [New] + [Static] + [Export ("needsValue")] + INSearchForMediaMediaItemResolutionResult NeedsValue { get; } + + [New] + [Static] + [Export ("notRequired")] + INSearchForMediaMediaItemResolutionResult NotRequired { get; } + + [New] + [Static] + [Export ("unsupported")] + INSearchForMediaMediaItemResolutionResult Unsupported { get; } + + [New] + [Static] + [Export ("unsupportedWithReason:")] + INSearchForMediaMediaItemResolutionResult GetUnsupported (nint reason); + + [New] + [Static] + [Export ("confirmationRequiredWithItemToConfirm:forReason:")] + INSearchForMediaMediaItemResolutionResult GetConfirmationRequired (NSObject itemToConfirm, nint reason); + } + + + + [Watch (6,0), NoMac, iOS (13,0)] + [Category] + [BaseType (typeof (NSExtensionContext))] + interface NSExtensionContext_ShareExtension { + + [return: NullAllowed] + [Export ("intent")] + INIntent GetIntent (); + } } #endif // XAMCORE_2_0 diff --git a/src/passkit.cs b/src/passkit.cs index 6440922554..d4a7d9616e 100644 --- a/src/passkit.cs +++ b/src/passkit.cs @@ -48,6 +48,9 @@ namespace PassKit { [NullAllowed, Export ("supplementarySubLocality", ArgumentSemantic.Strong)] string SupplementarySubLocality { get; set; } } + + [Watch (6,2), iOS (13,4)] + delegate void PKPassLibrarySignDataCompletionHandler (NSData signedData, NSData signature, NSError error); [BaseType (typeof (NSObject))] interface PKPassLibrary { @@ -149,6 +152,11 @@ namespace PassKit { [NoWatch][iOS (10,0)] [Export ("presentPaymentPass:")] void PresentPaymentPass (PKPaymentPass pass); + + [Watch (6,2), iOS (13,4)] + [Async (ResultTypeName = "PKSignDataCompletionResult")] + [Export ("signData:withPaymentPass:completion:")] + void SignData (NSData signData, PKPaymentPass paymentPass, PKPassLibrarySignDataCompletionHandler completion); } [Static] diff --git a/src/safariservices.cs b/src/safariservices.cs index 953d6a12a0..fd6bd8d2db 100644 --- a/src/safariservices.cs +++ b/src/safariservices.cs @@ -23,7 +23,7 @@ namespace SafariServices { delegate void SFExtensionValidationHandler (bool shouldHide, NSString text); [Mac (10,12)][iOS (10,0)] - [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")] + [Introduced (PlatformName.MacCatalyst, 13, 4)] [BaseType (typeof(NSObject))] interface SFContentBlockerState { @@ -32,7 +32,7 @@ namespace SafariServices { } [iOS (9,0)][Mac (10,12)] - [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")] + [Introduced (PlatformName.MacCatalyst, 13, 4)] [BaseType (typeof (NSObject))] interface SFContentBlockerManager { [Async] @@ -47,7 +47,7 @@ namespace SafariServices { #if !MONOMAC [iOS (7,0)] - [Unavailable (PlatformName.MacCatalyst)][Advice ("This API is not available when using UIKit on macOS.")] + [Introduced (PlatformName.MacCatalyst, 13, 4)] [BaseType (typeof (NSObject))] [DisableDefaultCtor] // NSGenericException Misuse of SSReadingList interface. Use class method defaultReadingList. partial interface SSReadingList { diff --git a/src/uikit.cs b/src/uikit.cs index f96036b743..80bc8a044a 100644 --- a/src/uikit.cs +++ b/src/uikit.cs @@ -6552,6 +6552,86 @@ namespace UIKit { [Field ("UIKeyInputEscape")] NSString Escape { get; } + [Introduced (PlatformName.MacCatalyst, 13, 4)] + [iOS (13,4), TV (13,4)] + [Field ("UIKeyInputPageUp")] + NSString PageUp { get; } + + [Introduced (PlatformName.MacCatalyst, 13, 4)] + [iOS (13,4), TV (13,4)] + [Field ("UIKeyInputPageDown")] + NSString PageDown { get; } + + [Introduced (PlatformName.MacCatalyst, 13, 4)] + [iOS (13,4), TV (13,4)] + [Field ("UIKeyInputHome")] + NSString Home { get; } + + [Introduced (PlatformName.MacCatalyst, 13, 4)] + [iOS (13,4), TV (13,4)] + [Field ("UIKeyInputEnd")] + NSString End { get; } + + [Introduced (PlatformName.MacCatalyst, 13, 4)] + [iOS (13,4), TV (13,4)] + [Field ("UIKeyInputF1")] + NSString F1 { get; } + + [Introduced (PlatformName.MacCatalyst, 13, 4)] + [iOS (13,4), TV (13,4)] + [Field ("UIKeyInputF2")] + NSString F2 { get; } + + [Introduced (PlatformName.MacCatalyst, 13, 4)] + [iOS (13,4), TV (13,4)] + [Field ("UIKeyInputF3")] + NSString F3 { get; } + + [Introduced (PlatformName.MacCatalyst, 13, 4)] + [iOS (13,4), TV (13,4)] + [Field ("UIKeyInputF4")] + NSString F4 { get; } + + [Introduced (PlatformName.MacCatalyst, 13, 4)] + [iOS (13,4), TV (13,4)] + [Field ("UIKeyInputF5")] + NSString F5 { get; } + + [Introduced (PlatformName.MacCatalyst, 13, 4)] + [iOS (13,4), TV (13,4)] + [Field ("UIKeyInputF6")] + NSString F6 { get; } + + [Introduced (PlatformName.MacCatalyst, 13, 4)] + [iOS (13,4), TV (13,4)] + [Field ("UIKeyInputF7")] + NSString F7 { get; } + + [Introduced (PlatformName.MacCatalyst, 13, 4)] + [iOS (13,4), TV (13,4)] + [Field ("UIKeyInputF8")] + NSString F8 { get; } + + [Introduced (PlatformName.MacCatalyst, 13, 4)] + [iOS (13,4), TV (13,4)] + [Field ("UIKeyInputF9")] + NSString F9 { get; } + + [Introduced (PlatformName.MacCatalyst, 13, 4)] + [iOS (13,4), TV (13,4)] + [Field ("UIKeyInputF10")] + NSString F10 { get; } + + [Introduced (PlatformName.MacCatalyst, 13, 4)] + [iOS (13,4), TV (13,4)] + [Field ("UIKeyInputF11")] + NSString F11 { get; } + + [Introduced (PlatformName.MacCatalyst, 13, 4)] + [iOS (13,4), TV (13,4)] + [Field ("UIKeyInputF12")] + NSString F12 { get; } + [iOS (9,0)] [Deprecated (PlatformName.iOS, 13, 0, message: "Use 'UIKeyCommand.Create (NSString, UIKeyModifierFlags, Selector)' overload instead.")] [Static] @@ -8539,7 +8619,16 @@ namespace UIKit { [Export ("setDate:animated:")] void SetDate (NSDate date, bool animated); - + + [Introduced (PlatformName.MacCatalyst, 13, 4)] + [iOS (13,4)] + [Export ("preferredDatePickerStyle", ArgumentSemantic.Assign)] + UIDatePickerStyle PreferredDatePickerStyle { get; set; } + + [Introduced (PlatformName.MacCatalyst, 13, 4)] + [iOS (13,4)] + [Export ("datePickerStyle", ArgumentSemantic.Assign)] + UIDatePickerStyle DatePickerStyle { get; } } [BaseType (typeof (NSObject))] @@ -17686,6 +17775,11 @@ namespace UIKit { [Export ("force")] nfloat Force { get; } + + [Introduced (PlatformName.MacCatalyst, 13, 4)] + [iOS (13,4), TV (13,4)] + [NullAllowed, Export ("key")] + UIKey Key { get; } } [NoWatch] @@ -21043,4 +21137,23 @@ namespace UIKit { void AddCompletion (Action completion); } + [Introduced (PlatformName.MacCatalyst, 13, 4)] + [iOS (13,4), NoWatch, TV (13,4)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface UIKey : NSCopying, NSCoding { + + [Export ("characters")] + string Characters { get; } + + [Export ("charactersIgnoringModifiers")] + string CharactersIgnoringModifiers { get; } + + [Export ("modifierFlags")] + UIKeyModifierFlags ModifierFlags { get; } + + [Export ("keyCode")] + UIKeyboardHidUsage KeyCode { get; } + } + } diff --git a/src/videosubscriberaccount.cs b/src/videosubscriberaccount.cs index cf1003bd27..30837bb20c 100644 --- a/src/videosubscriberaccount.cs +++ b/src/videosubscriberaccount.cs @@ -34,6 +34,7 @@ namespace VideoSubscriberAccount { ProviderRejected = 4, InvalidVerificationToken = 5, Rejected = 6, + Unsupported = 7, } [Native] diff --git a/src/watchkit.cs b/src/watchkit.cs index b9845cd2d7..9252faa694 100644 --- a/src/watchkit.cs +++ b/src/watchkit.cs @@ -515,7 +515,11 @@ namespace WatchKit { [Watch (6,0)][NoiOS] [Export ("supportsAudioStreaming")] bool SupportsAudioStreaming { get; } - + + [Watch (6,2), NoiOS] + [NullAllowed, Export ("identifierForVendor", ArgumentSemantic.Strong)] + NSUuid IdentifierForVendor { get; } + [Watch (6,1)][NoiOS] [Export ("enableWaterLock")] void EnableWaterLock (); diff --git a/tests/common/ProductTests.cs b/tests/common/ProductTests.cs index b9208f727c..743cd830b0 100644 --- a/tests/common/ProductTests.cs +++ b/tests/common/ProductTests.cs @@ -125,6 +125,7 @@ namespace Xamarin.Tests alternate_version = new Version (7, 0, 0); // our arm64 slices has min iOS 7.0. } else if (slice.IsDynamicLibrary && !device) { version = new Version (8, 0, 0); + alternate_version = new Version (7, 0, 0); } mono_native_compat_version = version; mono_native_unified_version = new Version (10, 0, 0); diff --git a/tests/introspection/ApiAvailabilityTest.cs b/tests/introspection/ApiAvailabilityTest.cs index b3610f0e57..2979224721 100644 --- a/tests/introspection/ApiAvailabilityTest.cs +++ b/tests/introspection/ApiAvailabilityTest.cs @@ -56,7 +56,7 @@ namespace Introspection { Minimum = new Version (10,9); // Need to special case macOS 'Maximum' version for OS minor subversions (can't change Constants.SdkVersion) // Please comment the code below if needed - Maximum = new Version (10,15,1); + Maximum = new Version (10,15,4); Filter = (AvailabilityBaseAttribute arg) => { return (arg.AvailabilityKind != AvailabilityKind.Introduced) || (arg.Platform != PlatformName.MacOSX); }; diff --git a/tests/introspection/ApiProtocolTest.cs b/tests/introspection/ApiProtocolTest.cs index c0a4217b14..7035f58879 100644 --- a/tests/introspection/ApiProtocolTest.cs +++ b/tests/introspection/ApiProtocolTest.cs @@ -172,6 +172,9 @@ namespace Introspection { case "NSFileProviderRequest": case "NSFileProviderSearchQuery": return true; + // Xcode 11.4, not documented + case "NSHttpCookie": + return true; } break; case "NSSecureCoding": @@ -229,6 +232,10 @@ namespace Introspection { case "NSFileProviderItemVersion": case "NSFileProviderRequest": case "NSFileProviderSearchQuery": + case "INUserContext": // Header shows NSSecureCoding but intro on both device and simulator says nope FB7604793 + return true; + // Xcode 11.4, not documented + case "NSHttpCookie": return true; } break; diff --git a/tests/introspection/ApiTypeTest.cs b/tests/introspection/ApiTypeTest.cs new file mode 100644 index 0000000000..6366aef4f1 --- /dev/null +++ b/tests/introspection/ApiTypeTest.cs @@ -0,0 +1,58 @@ +using System; +using System.Reflection; +using System.Runtime.CompilerServices; + +using NUnit.Framework; +using Xamarin.Utils; + +using Foundation; +using ObjCRuntime; + +namespace Introspection { + + [TestFixture] + // we want the tests to be available because we use the linker + [Preserve (AllMembers = true)] + public class ApiTypeTest : ApiBaseTest { + + bool Skip (Type type) + { + switch (type.Namespace) { +#if __IOS__ + // running the .cctor on the simulator works... but makes some other CoreNFC intro tests fail later + // we'll still get the results from device tests + case "CoreNFC": + case "DeviceCheck": + // we can't call the `NFCNdefReaderSession.ReadingAvailable` API on 32bits (PlatformNotSupportedException) + // and if we call it then the .cctor is executed and we get the same failures :() + return ((IntPtr.Size == 4) || (Runtime.Arch == Arch.SIMULATOR)); +#endif + default: + return false; + } + } + + [Test] + public void StaticCtor () + { + ContinueOnFailure = true; + foreach (Type t in Assembly.GetTypes ()) { + if (Skip (t)) + continue; + + var cctor = t.GetConstructor (BindingFlags.Static | BindingFlags.NonPublic, null, Type.EmptyTypes, null); + if (cctor == null) + continue; + // we don't skip based on availability attributes since the execution of .cctor can easily happen indirectly and + // we rather catch them all here *now* than trying to figure out how to replicate the specific conditions *later* + try { + RuntimeHelpers.RunClassConstructor (t.TypeHandle); + } + catch (TypeInitializationException e) { + ReportError ($"{t.FullName} .cctor could not execute properly: {e}"); + } + } + AssertIfErrors ($"{Errors} execution failure(s)"); + } + } +} \ No newline at end of file diff --git a/tests/introspection/Mac/introspection-mac.csproj b/tests/introspection/Mac/introspection-mac.csproj index 8e5c94e1ec..78a1165f24 100644 --- a/tests/introspection/Mac/introspection-mac.csproj +++ b/tests/introspection/Mac/introspection-mac.csproj @@ -132,6 +132,9 @@ ApiFrameworkTest.cs + + ApiTypeTest.cs + diff --git a/tests/introspection/iOS/introspection-ios.csproj b/tests/introspection/iOS/introspection-ios.csproj index e7c7baa662..8ec909d01c 100644 --- a/tests/introspection/iOS/introspection-ios.csproj +++ b/tests/introspection/iOS/introspection-ios.csproj @@ -223,6 +223,9 @@ ApiFrameworkTest.cs + + ApiTypeTest.cs + diff --git a/tests/mmptest/src/WarningTests.cs b/tests/mmptest/src/WarningTests.cs index 21d4cbace5..ea48ce449d 100644 --- a/tests/mmptest/src/WarningTests.cs +++ b/tests/mmptest/src/WarningTests.cs @@ -17,6 +17,9 @@ namespace Xamarin.MMP.Tests else if (Environment.OSVersion.Version.Major >= 19 /* macOS 10.15+ */) Assert.Ignore ("Xcode 9.4 does not work on Catalina or later."); // This can check can be removed after switching to a newer Xcode than 9.4. + if (PlatformHelpers.CheckSystemVersion (10, 15)) + Assert.Ignore ("This test requires Xcode 9.4, which doesn't work on macOS 10.15+"); + MMPTests.RunMMPTest (tmpDir => { TI.UnifiedTestConfig test = new TI.UnifiedTestConfig (tmpDir); var output = TI.TestUnifiedExecutable (test, environment: new string[] { "MD_APPLE_SDK_ROOT", Path.GetDirectoryName (Path.GetDirectoryName (oldXcode)) }); diff --git a/tests/mtouch/RegistrarTest.cs b/tests/mtouch/RegistrarTest.cs index abd9c1bcde..bdb83e5f5b 100644 --- a/tests/mtouch/RegistrarTest.cs +++ b/tests/mtouch/RegistrarTest.cs @@ -318,6 +318,7 @@ class MyObjectErr : NSObject, IFoo1, IFoo2 mtouch.Linker = MTouchLinker.LinkSdk; mtouch.Registrar = MTouchRegistrar.Static; mtouch.AssertExecuteFailure (MTouchAction.BuildDev); + // the above MUST be kept in sync with new frameworks or it will fail. var invalidFrameworks = new [] { new { Framework = "IdentityLookup", Version = "11.0" }, new { Framework = "FileProviderUI", Version = "11.0" }, @@ -334,6 +335,14 @@ class MyObjectErr : NSObject, IFoo1, IFoo2 new { Framework = "CarPlay", Version = "12.0" }, new { Framework = "IdentityLookupUI", Version = "12.0" }, new { Framework = "NaturalLanguage", Version = "12.0" }, + new { Framework = "VisionKit", Version = "13.0" }, + new { Framework = "SoundAnalysis", Version = "13.0" }, + new { Framework = "PencilKit", Version = "13.0" }, + new { Framework = "MetricKit", Version = "13.0" }, + new { Framework = "LinkPresentation", Version = "13.0" }, + new { Framework = "CoreHaptics", Version = "13.0" }, + new { Framework = "BackgroundTasks", Version = "13.0" }, + new { Framework = "QuickLookThumbnailing", Version = "13.0" }, }; foreach (var framework in invalidFrameworks) mtouch.AssertError (4134, $"Your application is using the '{framework.Framework}' framework, which isn't included in the iOS SDK you're using to build your app (this framework was introduced in iOS {framework.Version}, while you're building with the iOS {mtouch.Sdk} SDK.) Please select a newer SDK in your app's iOS Build options."); diff --git a/tests/xharness/AppRunner.cs b/tests/xharness/AppRunner.cs index 17e4646d9e..13dd0a995f 100644 --- a/tests/xharness/AppRunner.cs +++ b/tests/xharness/AppRunner.cs @@ -39,6 +39,7 @@ namespace xharness public Harness Harness; public string ProjectFile; public string AppPath; + public string Variation; public TestExecutingResult Result { get; private set; } public string FailureMessage { get; private set; } @@ -360,8 +361,16 @@ namespace xharness try { var newFilename = XmlResultParser.GetXmlFilePath (path, xmlType); - // rename the path to the correct value - File.Move (path, newFilename); + // at this point, we have the test results, but we want to be able to have attachments in vsts, so if the format is + // the right one (NUnitV3) add the nodes. ATM only TouchUnit uses V3. + var testRunName = $"{appName} {Variation}"; + if (xmlType == XmlResultParser.Jargon.NUnitV3) { + // add the attachments and write in the new filename + XmlResultParser.UpdateMissingData (path, newFilename, testRunName, Directory.GetFiles (Logs.Directory)); + } else { + // rename the path to the correct value + File.Move (path, newFilename); + } path = newFilename; // write the human readable results in a tmp file, which we later use to step on the logs @@ -371,7 +380,7 @@ namespace xharness File.Delete (tmpFile); // we do not longer need the tmp file - Logs.AddFile (path, "Test xml"); + Logs.AddFile (path, Log.XML_LOG); return parseResult; } catch (Exception e) { @@ -495,6 +504,7 @@ namespace xharness if (useXmlOutput) { args.Add ("-setenv=NUNIT_ENABLE_XML_OUTPUT=true"); args.Add ("-setenv=NUNIT_ENABLE_XML_MODE=wrapped"); + args.Add ("-setenv=NUNIT_XML_VERSION=nunitv3"); } if (Harness.InCI) { @@ -529,7 +539,7 @@ namespace xharness args.Add ($"-argument=-app-arg:-transport:{transport}"); args.Add ($"-setenv=NUNIT_TRANSPORT={transport}"); - listener_log = Logs.Create ($"test-{mode}-{Harness.Timestamp}.log", "Test log", timestamp: !useXmlOutput); + listener_log = Logs.Create ($"test-{mode}-{Harness.Timestamp}.log", Log.TEST_LOG, timestamp: !useXmlOutput); SimpleListener listener; switch (transport) { @@ -630,7 +640,7 @@ namespace xharness var log = new CaptureLog (Logs, sim.SystemLog, entire_file: Harness.Action != HarnessAction.Jenkins) { Path = Path.Combine (LogDirectory, sim.Name + ".log"), - Description = isCompanion ? "System log (companion)" : "System log", + Description = isCompanion ? Log.COMPANION_SYSTEM_LOG : Log.SYSTEM_LOG, }; log.StartCapture (); Logs.Add (log); diff --git a/tests/xharness/Extensions.cs b/tests/xharness/Extensions.cs index 488ca7dc22..1447e713e1 100644 --- a/tests/xharness/Extensions.cs +++ b/tests/xharness/Extensions.cs @@ -126,5 +126,11 @@ namespace xharness var rnd = new Random ((int) DateTime.Now.Ticks); return collection.OrderBy (v => rnd.Next ()); } + + public static string AsHtml (this string inString) + { + var rv = System.Web.HttpUtility.HtmlEncode (inString); + return rv.Replace ("\t", "    ").Replace ("\n", "
\n"); + } } } diff --git a/tests/xharness/Jenkins.cs b/tests/xharness/Jenkins.cs index 806f62ec05..3b98be8181 100644 --- a/tests/xharness/Jenkins.cs +++ b/tests/xharness/Jenkins.cs @@ -2071,7 +2071,7 @@ namespace xharness writer.WriteLine ($"Known failure: {test.KnownFailure}
"); if (!string.IsNullOrEmpty (test.FailureMessage)) { - var msg = HtmlFormat (test.FailureMessage); + var msg = test.FailureMessage.AsHtml (); var prefix = test.Ignored ? "Ignored" : "Failure"; if (test.FailureMessage.Contains ('\n')) { writer.WriteLine ($"{prefix}:
{msg}
"); @@ -2081,7 +2081,7 @@ namespace xharness } var progressMessage = test.ProgressMessage; if (!string.IsNullOrEmpty (progressMessage)) - writer.WriteLine (HtmlFormat (progressMessage) + "
"); + writer.WriteLine (progressMessage.AsHtml () + "
"); if (runTest != null) { if (runTest.BuildTask.Duration.Ticks > 0) { @@ -2115,6 +2115,7 @@ namespace xharness if (logs.Count () > 0) { foreach (var log in logs) { log.Flush (); + var exists = File.Exists (log.FullPath); string log_type = System.Web.MimeMapping.GetMimeMapping (log.FullPath); string log_target; switch (log_type) { @@ -2125,7 +2126,9 @@ namespace xharness log_target = "_self"; break; } - if (log.Description == "Build log") { + if (!exists) { + writer.WriteLine ("{1} (does not exist)
", LinkEncode (log.FullPath.Substring (LogDirectory.Length + 1)), log.Description, log_type, log_target); + } else if (log.Description == Log.BUILD_LOG) { var binlog = log.FullPath.Replace (".txt", ".binlog"); if (File.Exists (binlog)) { var textLink = string.Format ("{1}", LinkEncode (log.FullPath.Substring (LogDirectory.Length + 1)), log.Description, log_type, log_target); @@ -2137,7 +2140,9 @@ namespace xharness } else { writer.WriteLine ("{1}
", LinkEncode (log.FullPath.Substring (LogDirectory.Length + 1)), log.Description, log_type, log_target); } - if (log.Description == "Test log" || log.Description == "Extension test log" || log.Description == "Execution log") { + if (!exists) { + // Don't try to parse files that don't exist + } else if (log.Description == Log.TEST_LOG || log.Description == Log.EXTENSION_TEST_LOG || log.Description == Log.EXECUTION_LOG) { string summary; List fails; try { @@ -2169,15 +2174,15 @@ namespace xharness if (fails.Count > 0) { writer.WriteLine ("
"); foreach (var fail in fails) - writer.WriteLine ("{0}
", HtmlFormat (fail)); + writer.WriteLine ("{0}
", fail.AsHtml ()); writer.WriteLine ("
"); } if (!string.IsNullOrEmpty (summary)) writer.WriteLine ("{0}
", summary); } catch (Exception ex) { - writer.WriteLine ("Could not parse log file: {0}
", HtmlFormat (ex.Message)); + writer.WriteLine ("Could not parse log file: {0}
", ex.Message.AsHtml ()); } - } else if (log.Description == "Build log") { + } else if (log.Description == Log.BUILD_LOG) { HashSet errors; try { using (var reader = log.GetReader ()) { @@ -2207,45 +2212,21 @@ namespace xharness if (errors.Count > 0) { writer.WriteLine ("
"); foreach (var error in errors) - writer.WriteLine ("{0}
", HtmlFormat (error)); + writer.WriteLine ("{0}
", error.AsHtml ()); writer.WriteLine ("
"); } } catch (Exception ex) { - writer.WriteLine ("Could not parse log file: {0}
", HtmlFormat (ex.Message)); + writer.WriteLine ("Could not parse log file: {0}
", ex.Message.AsHtml ()); } - } else if (log.Description == "NUnit results" || log.Description == "XML log") { + } else if (log.Description == Log.NUNIT_RESULT || log.Description == Log.XML_LOG) { try { if (File.Exists (log.FullPath) && new FileInfo (log.FullPath).Length > 0) { if (XmlResultParser.IsValidXml (log.FullPath, out var jargon)) { - if (jargon == XmlResultParser.Jargon.NUnit) { - var doc = new XmlDocument (); - doc.LoadWithoutNetworkAccess (log.FullPath); - var failures = doc.SelectNodes ("//test-case[@result='Error' or @result='Failure']").Cast ().ToArray (); - if (failures.Length > 0) { - writer.WriteLine ("
"); - writer.WriteLine ("
    "); - foreach (var failure in failures) { - writer.WriteLine ("
  • "); - var test_name = failure.Attributes ["name"]?.Value; - var message = failure.SelectSingleNode ("failure/message")?.InnerText; - writer.Write (HtmlFormat (test_name)); - if (!string.IsNullOrEmpty (message)) { - writer.Write (": "); - writer.Write (HtmlFormat (message)); - } - writer.WriteLine ("
    "); - writer.WriteLine ("
  • "); - } - writer.WriteLine ("
"); - writer.WriteLine ("
"); - } - } else { - writer.WriteLine ($"Could not parse {log.Description}: Not supported format.
"); - } + XmlResultParser.GenerateTestReport (writer, log.FullPath, jargon); } } } catch (Exception ex) { - writer.WriteLine ($"Could not parse {log.Description}: {HtmlFormat (ex.Message)}
"); + writer.WriteLine ($"Could not parse {log.Description}: {ex.Message.AsHtml ()}
"); } } } @@ -2287,7 +2268,7 @@ namespace xharness if (runningTests.Any ()) { writer.WriteLine ($"

{runningTests.Count ()} running tests:

"); foreach (var test in runningTests) { - writer.WriteLine ($"{test.TestName} ({test.Mode}) {test.Duration.ToString ()} {HtmlFormat ("\n\t" + test.ProgressMessage)}
"); + writer.WriteLine ($"{test.TestName} ({test.Mode}) {test.Duration.ToString ()} {("\n\t" + test.ProgressMessage).AsHtml ()}
"); } } @@ -2321,12 +2302,6 @@ namespace xharness } Dictionary> log_data = new Dictionary> (); - static string HtmlFormat (string value) - { - var rv = System.Web.HttpUtility.HtmlEncode (value); - return rv.Replace ("\t", "    ").Replace ("\n", "
\n"); - } - static string LinkEncode (string path) { return System.Web.HttpUtility.UrlEncode (path).Replace ("%2f", "/").Replace ("+", "%20"); @@ -2927,7 +2902,7 @@ namespace xharness make.StartInfo.WorkingDirectory = WorkingDirectory; make.StartInfo.Arguments = Target; SetEnvironmentVariables (make); - var log = Logs.Create ($"make-{Platform}-{Timestamp}.txt", "Build log"); + var log = Logs.Create ($"make-{Platform}-{Timestamp}.txt", Log.BUILD_LOG); LogEvent (log, "Making {0} in {1}", Target, WorkingDirectory); if (!Harness.DryRun) { var timeout = Timeout; @@ -2956,7 +2931,7 @@ namespace xharness protected override async Task ExecuteAsync () { using (var resource = await NotifyAndAcquireDesktopResourceAsync ()) { - var log = Logs.Create ($"build-{Platform}-{Timestamp}.txt", "Build log"); + var log = Logs.Create ($"build-{Platform}-{Timestamp}.txt", Log.BUILD_LOG); var binlogPath = log.FullPath.Replace (".txt", ".binlog"); await RestoreNugetsAsync (log, resource, useXIBuild: true); @@ -3123,8 +3098,8 @@ namespace xharness protected override async Task RunTestAsync () { using (var resource = await NotifyAndAcquireDesktopResourceAsync ()) { - var xmlLog = Logs.CreateFile ($"log-{Timestamp}.xml", "XML log"); - var log = Logs.Create ($"execute-{Timestamp}.txt", "Execution log"); + var xmlLog = Logs.CreateFile ($"log-{Timestamp}.xml", Log.XML_LOG); + var log = Logs.Create ($"execute-{Timestamp}.txt", Log.EXECUTION_LOG); FindNUnitConsoleExecutable (log); using (var proc = new Process ()) { @@ -3301,7 +3276,7 @@ namespace xharness proc.StartInfo.EnvironmentVariables ["DISABLE_SYSTEM_PERMISSION_TESTS"] = "1"; proc.StartInfo.EnvironmentVariables ["MONO_DEBUG"] = "no-gdb-backtrace"; Jenkins.MainLog.WriteLine ("Executing {0} ({1})", TestName, Mode); - var log = Logs.Create ($"execute-{Platform}-{Timestamp}.txt", "Execution log"); + var log = Logs.Create ($"execute-{Platform}-{Timestamp}.txt", Log.EXECUTION_LOG); if (!Harness.DryRun) { ExecutionResult = TestExecutingResult.Running; @@ -3355,8 +3330,8 @@ namespace xharness proc.StartInfo.Arguments = $"--debug {reporter} {WorkingDirectory} {results}"; Jenkins.MainLog.WriteLine ("Executing {0} ({1})", TestName, Mode); - var log = Logs.Create ($"execute-xtro-{Timestamp}.txt", "Execution log"); - log.WriteLine ("{0} {1}", proc.StartInfo.FileName, proc.StartInfo.Arguments); + var log = Logs.Create ($"execute-xtro-{Timestamp}.txt", Log.EXECUTION_LOG); + log.WriteLine ("{0} {1}", proc.StartInfo.FileName, proc.StartInfo.Arguments); if (!Harness.DryRun) { ExecutionResult = TestExecutingResult.Running; @@ -3662,6 +3637,7 @@ namespace xharness CompanionDeviceName = CompanionDevice?.Name, Configuration = ProjectConfiguration, TimeoutMultiplier = TimeoutMultiplier, + Variation = Variation, }; // Sometimes devices can't upgrade (depending on what has changed), so make sure to uninstall any existing apps first. @@ -3716,6 +3692,7 @@ namespace xharness DeviceName = Device.Name, CompanionDeviceName = CompanionDevice?.Name, Configuration = ProjectConfiguration, + Variation = Variation, }; additional_runner = todayRunner; await todayRunner.RunAsync (); @@ -3826,6 +3803,7 @@ namespace xharness MainLog = Logs.Create ($"run-{Device.UDID}-{Timestamp}.log", "Run log"), Configuration = ProjectConfiguration, TimeoutMultiplier = TimeoutMultiplier, + Variation = Variation }; runner.Simulators = Simulators; runner.Initialize (); diff --git a/tests/xharness/Log.cs b/tests/xharness/Log.cs index 7347d12a39..5d40fe602a 100644 --- a/tests/xharness/Log.cs +++ b/tests/xharness/Log.cs @@ -12,6 +12,15 @@ namespace xharness public string Description; public bool Timestamp = true; + public static string XML_LOG = "XML log"; + public static string NUNIT_RESULT = "NUnit results"; + public static string SYSTEM_LOG = "System log"; + public static string COMPANION_SYSTEM_LOG = "System log (companion)"; + public static string BUILD_LOG = "Build log"; + public static string TEST_LOG = "Test log"; + public static string EXTENSION_TEST_LOG = "Extension test log"; + public static string EXECUTION_LOG = "Execution log"; + protected Log (Logs logs) { Logs = logs; diff --git a/tests/xharness/XmlResultParser.cs b/tests/xharness/XmlResultParser.cs index 276ac03416..69be3b45b2 100644 --- a/tests/xharness/XmlResultParser.cs +++ b/tests/xharness/XmlResultParser.cs @@ -1,13 +1,17 @@ -using System; +using System; +using System.Collections.Generic; using System.IO; +using System.Linq; using System.Xml; +using System.Xml.Linq; namespace xharness { public static class XmlResultParser { public enum Jargon { TouchUnit, - NUnit, + NUnitV2, + NUnitV3, xUnit, Missing, } @@ -24,15 +28,19 @@ namespace xharness { while ((line = stream.ReadLine ()) != null) { // special case when get got the tcp connection if (line.Contains ("ping")) continue; + if (line.Contains ("test-run")) { // first element of the NUnitV3 test collection + type = Jargon.NUnitV3; + return true; + } if (line.Contains ("TouchUnitTestRun")) { type = Jargon.TouchUnit; return true; } - if (line.Contains ("nunit-version")) { - type = Jargon.NUnit; + if (line.Contains ("test-results")) { // first element of the NUnitV3 test collection + type = Jargon.NUnitV2; return true; } - if (line.Contains ("xUnit")) { + if (line.Contains ("")) { // first element of the xUnit test collection type = Jargon.xUnit; return true; } @@ -41,6 +49,75 @@ namespace xharness { return false; } + static (string resultLine, bool failed) ParseNUnitV3Xml (StreamReader stream, StreamWriter writer) + { + long testcasecount, passed, failed, inconclusive, skipped; + bool failedTestRun = false; // result = "Failed" + testcasecount = passed = failed = inconclusive = skipped = 0L; + + using (var reader = XmlReader.Create (stream)) { + while (reader.Read ()) { + if (reader.NodeType == XmlNodeType.Element && reader.Name == "test-run") { + long.TryParse (reader ["testcasecount"], out testcasecount); + long.TryParse (reader ["passed"], out passed); + long.TryParse (reader ["failed"], out failed); + long.TryParse (reader ["inconclusive"], out inconclusive); + long.TryParse (reader ["skipped"], out skipped); + failedTestRun = failed != 0; + } + if (reader.NodeType == XmlNodeType.Element && reader.Name == "test-suite" && (reader ["type"] == "TestFixture" || reader ["type"] == "ParameterizedFixture")) { + var testCaseName = reader ["fullname"]; + writer.WriteLine (testCaseName); + var time = reader.GetAttribute ("time") ?? "0"; // some nodes might not have the time :/ + // get the first node and then move in the siblings of the same type + reader.ReadToDescendant ("test-case"); + do { + if (reader.Name != "test-case") + break; + // read the test cases in the current node + var status = reader ["result"]; + switch (status) { + case "Passed": + writer.Write ("\t[PASS] "); + break; + case "Skipped": + writer.Write ("\t[IGNORED] "); + break; + case "Error": + case "Failed": + writer.Write ("\t[FAIL] "); + break; + case "Inconclusive": + writer.Write ("\t[INCONCLUSIVE] "); + break; + default: + writer.Write ("\t[INFO] "); + break; + } + writer.Write (reader ["name"]); + if (status == "Failed") { // we need to print the message + reader.ReadToDescendant ("failure"); + reader.ReadToDescendant ("message"); + writer.Write ($" : {reader.ReadElementContentAsString ()}"); + reader.ReadToNextSibling ("stack-trace"); + writer.Write ($" : {reader.ReadElementContentAsString ()}"); + } + if (status == "Skipped") { // nice to have the skip reason + reader.ReadToDescendant ("reason"); + reader.ReadToDescendant ("message"); + writer.Write ($" : {reader.ReadElementContentAsString ()}"); + } + // add a new line + writer.WriteLine (); + } while (reader.ReadToNextSibling ("test-case")); + writer.WriteLine ($"{testCaseName} {time} ms"); + } + } + } + var resultLine = $"Tests run: {testcasecount} Passed: {passed} Inconclusive: {inconclusive} Failed: {failed} Ignored: {skipped + inconclusive}"; + return (resultLine, failedTestRun); + } + static (string resultLine, bool failed) ParseTouchUnitXml (StreamReader stream, StreamWriter writer) { long total, errors, failed, notRun, inconclusive, ignored, skipped, invalid; @@ -205,7 +282,8 @@ namespace xharness { var fileName = Path.GetFileName (path); switch (xmlType) { case Jargon.TouchUnit: - case Jargon.NUnit: + case Jargon.NUnitV2: + case Jargon.NUnitV3: return path.Replace (fileName, $"nunit-{fileName}"); case Jargon.xUnit: return path.Replace (fileName, $"xunit-{fileName}"); @@ -241,9 +319,12 @@ namespace xharness { case Jargon.TouchUnit: parseData = ParseTouchUnitXml (reader, writer); break; - case Jargon.NUnit: + case Jargon.NUnitV2: parseData = ParseNUnitXml (reader, writer); break; + case Jargon.NUnitV3: + parseData = ParseNUnitV3Xml (reader, writer); + break; case Jargon.xUnit: parseData = ParsexUnitXml (reader, writer); break; @@ -254,5 +335,192 @@ namespace xharness { } return parseData; } + + static void GenerateNUnitV2TestReport (StreamWriter writer, XmlReader reader) + { + while (reader.Read ()) { + + if (reader.NodeType == XmlNodeType.Element && reader.Name == "test-suite" && (reader ["type"] == "TestFixture" || reader ["type"] == "TestCollection")) { + + long.TryParse (reader ["errors"], out var errors); + long.TryParse (reader ["failed"], out var failed); + if (errors == 0 && failed == 0) { + // if we do not have any errors, return, nothing to be written here + return; + } + writer.WriteLine ("
"); + writer.WriteLine ("
    "); + + reader.ReadToDescendant ("test-case"); + do { + if (reader.Name != "test-case") + break; + // read the test cases in the current node + var status = reader ["result"]; + switch (status) { // only interested in errors + case "Error": + case "Failure": + writer.WriteLine ("
  • "); + var test_name = reader ["name"]; + writer.Write (test_name.AsHtml ()); + // read to the message of the error and get it + reader.ReadToDescendant ("message"); + var message = reader.ReadElementContentAsString (); + if (!string.IsNullOrEmpty (message)) { + writer.Write (": "); + writer.Write (message.AsHtml ()); + } + writer.WriteLine ("
    "); + writer.WriteLine ("
  • "); + break; + } + } while (reader.ReadToNextSibling ("test-case")); + } + } + } + + static void GenerateNUnitV3TestReport (StreamWriter writer, XmlReader reader) + { + List<(string name, string message)> failedTests = new List<(string name, string message)> (); + while (reader.Read ()) { + if (reader.NodeType == XmlNodeType.Element && reader.Name == "test-run") { + long.TryParse (reader ["failed"], out var failed); + if (failed == 0) + break; + } + + if (reader.NodeType == XmlNodeType.Element && reader.Name == "test-suite" && (reader ["type"] == "TestFixture" || reader ["type"] == "ParameterizedFixture")) { + var testCaseName = reader ["fullname"]; + reader.ReadToDescendant ("test-case"); + do { + if (reader.Name != "test-case") + break; + // read the test cases in the current node + var status = reader ["result"]; + switch (status) { + case "Error": + case "Failed": + var name = reader ["name"]; + reader.ReadToDescendant ("message"); + var message = reader.ReadElementContentAsString (); + failedTests.Add ((name, message)); + break; + + } + } while (reader.ReadToNextSibling ("test-case")); + } + } + if (failedTests.Count > 0) { + writer.WriteLine ("
    "); + writer.WriteLine ("
      "); + foreach (var (name, message) in failedTests) { + writer.WriteLine ("
    • "); + writer.Write (name.AsHtml ()); + if (!string.IsNullOrEmpty (message)) { + writer.Write (": "); + writer.Write (message.AsHtml ()); + } + } + writer.WriteLine ("
      "); + writer.WriteLine ("
    • "); + } + } + + static void GeneratexUnitTestReport (StreamWriter writer, XmlReader reader) + { + var failedTests = new List<(string name, string message)> (); + // xUnit is not as nice and does not provide the final result in a top node, + // we need to look in all the collections and find all the failed tests, this is really bad :/ + while (reader.Read ()) { + if (reader.NodeType == XmlNodeType.Element && reader.Name == "collection") { + reader.ReadToDescendant ("test"); + do { + if (reader.Name != "test") + break; + // read the test cases in the current node + var status = reader ["result"]; + switch (status) { + case "Fail": + var name = reader ["name"]; + reader.ReadToDescendant ("message"); + var message = reader.ReadElementContentAsString (); + failedTests.Add ((name, message)); + break; + } + } while (reader.ReadToNextSibling ("test")); + } + } + if (failedTests.Count > 0) { + writer.WriteLine ("
      "); + writer.WriteLine ("
        "); + foreach (var (name, message) in failedTests) { + writer.WriteLine ("
      • "); + writer.Write (name.AsHtml ()); + if (!string.IsNullOrEmpty (message)) { + writer.Write (": "); + writer.Write (message.AsHtml ()); + } + } + writer.WriteLine ("
        "); + writer.WriteLine ("
      • "); + } + } + + public static void GenerateTestReport (StreamWriter writer, string resultsPath, Jargon xmlType) + { + using (var stream = new StreamReader (resultsPath)) + using (var reader = XmlReader.Create (stream)) { + switch (xmlType) { + case Jargon.NUnitV2: + case Jargon.TouchUnit: + GenerateNUnitV2TestReport (writer, reader); + break; + case Jargon.xUnit: + GeneratexUnitTestReport (writer, reader); + break; + case Jargon.NUnitV3: + GenerateNUnitV3TestReport (writer, reader); + break; + default: + writer.WriteLine ($"Could not parse {resultsPath}: Not supported format.
        "); + break; + } + } + } + + // get the file, parse it and add the attachments to the first node found + public static void UpdateMissingData (string source, string destination, string applicationName, params string [] attachments) + { + // we could do this with a XmlReader and a Writer, but might be to complicated to get right, we pay with performance what we + // cannot pay with brain cells. + var doc = XDocument.Load (source); + var attachmentsElement = new XElement ("attachments"); + foreach (var path in attachments) { + // we do not add a description, VSTS ignores that :/ + attachmentsElement.Add (new XElement ("attachment", + new XElement ("filePath", path))); + } + + var testSuitesElements = doc.Descendants ().Where (e => e.Name == "test-suite" && e.Attribute ("type")?.Value == "Assembly"); + if (!testSuitesElements.Any ()) + return; + + // add the attachments to the first test-suite, this will add the attachmnets to it, which will be added to the test-run, the pipeline + // SHOULD NOT merge runs, else this upload will be really hard to use. Also, just to one of them, else we have duplicated logs. + testSuitesElements.FirstOrDefault ().Add (attachmentsElement); + + foreach (var suite in testSuitesElements) { + suite.SetAttributeValue ("name", applicationName); + suite.SetAttributeValue ("fullname", applicationName); // docs say just name, but I've seen the fullname instead, docs usually lie + // add also the attachments to all the failing tests, this will make the life of the person monitoring easier, since + // he will see the logs directly from the attachment page + var tests = suite.Descendants ().Where (e => e.Name == "test-case" && e.Attribute ("result").Value == "Failed"); + foreach (var t in tests) { + t.Add (attachmentsElement); + } + } + + doc.Save (destination); + } } } diff --git a/tests/xharness/xharness.csproj b/tests/xharness/xharness.csproj index db9a4a1c4d..5a6c0a2d58 100644 --- a/tests/xharness/xharness.csproj +++ b/tests/xharness/xharness.csproj @@ -64,6 +64,7 @@ + diff --git a/tests/xtro-sharpie/Helpers.cs b/tests/xtro-sharpie/Helpers.cs index e9bcfbd005..8628daeaba 100644 --- a/tests/xtro-sharpie/Helpers.cs +++ b/tests/xtro-sharpie/Helpers.cs @@ -49,6 +49,7 @@ namespace Extrospection { { "tls_protocol_version_t", "TlsProtocolVersion" }, { "UIDataDetectorTypes", "UIDataDetectorType" }, { "UIControlEvents", "UIControlEvent" }, + { "UIKeyboardHIDUsage", "UIKeyboardHidUsage" }, { "UITableViewCellAccessoryType", "UITableViewCellAccessory" }, { "UITableViewCellStateMask", "UITableViewCellState" }, { "WatchKitErrorCode", "WKErrorCode" }, // WebKit already had that name diff --git a/tests/xtro-sharpie/Makefile b/tests/xtro-sharpie/Makefile index 029968cfd6..72e0ca4088 100644 --- a/tests/xtro-sharpie/Makefile +++ b/tests/xtro-sharpie/Makefile @@ -48,7 +48,7 @@ XMAC_ARCH = x86_64 XMAC_PCH = macosx$(OSX_SDK_VERSION)-$(XMAC_ARCH).pch $(XMAC_PCH): .stamp-check-sharpie - sharpie sdk-db --xcode $(XCODE) -s macosx$(OSX_SDK_VERSION) -a $(XMAC_ARCH) -exclude DriverKit -exclude IOUSBHost -exclude NetworkingDriverKit -exclude USBDriverKit -exclude USBSerialDriverKit -exclude HIDDriverKit -exclude PDFKit + sharpie sdk-db --xcode $(XCODE) -s macosx$(OSX_SDK_VERSION) -a $(XMAC_ARCH) -exclude DriverKit -exclude IOUSBHost -exclude NetworkingDriverKit -exclude USBDriverKit -exclude USBSerialDriverKit -exclude HIDDriverKit -exclude PCIDriverKit -exclude PDFKit diff --git a/tests/xtro-sharpie/common-Intents.ignore b/tests/xtro-sharpie/common-Intents.ignore index a5b5327961..22139bfb9a 100644 --- a/tests/xtro-sharpie/common-Intents.ignore +++ b/tests/xtro-sharpie/common-Intents.ignore @@ -36,7 +36,12 @@ !missing-selector! +INIntentResolutionResult::needsValue not bound !missing-selector! +INIntentResolutionResult::notRequired not bound !missing-selector! +INIntentResolutionResult::unsupported not bound +!missing-selector! +INIntentResolutionResult::confirmationRequiredWithItemToConfirm:forReason: not bound +!missing-selector! +INIntentResolutionResult::unsupportedWithReason: not bound +## NS_DEPRECATED(13_0, 13_0, 6_0, 6_0) +!missing-selector! INMediaSearch::activityNames not bound +!missing-selector! INMediaSearch::initWithMediaType:sortOrder:mediaName:artistName:albumName:genreNames:moodNames:activityNames:releaseDate:reference:mediaIdentifier: not bound ## unsorted diff --git a/tests/xtro-sharpie/iOS-AVFoundation.todo b/tests/xtro-sharpie/iOS-AVFoundation.todo new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/xtro-sharpie/iOS-CallKit.todo b/tests/xtro-sharpie/iOS-CallKit.todo new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/xtro-sharpie/iOS-CarPlay.todo b/tests/xtro-sharpie/iOS-CarPlay.todo new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/xtro-sharpie/iOS-ClassKit.todo b/tests/xtro-sharpie/iOS-ClassKit.todo new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/xtro-sharpie/iOS-CoreGraphics.todo b/tests/xtro-sharpie/iOS-CoreGraphics.todo new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/xtro-sharpie/iOS-CoreLocation.todo b/tests/xtro-sharpie/iOS-CoreLocation.todo new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/xtro-sharpie/iOS-GameKit.todo b/tests/xtro-sharpie/iOS-GameKit.todo new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/xtro-sharpie/iOS-Intents.todo b/tests/xtro-sharpie/iOS-Intents.todo index 5539ab4a72..e69de29bb2 100644 --- a/tests/xtro-sharpie/iOS-Intents.todo +++ b/tests/xtro-sharpie/iOS-Intents.todo @@ -1,399 +0,0 @@ -!deprecated-attribute-missing! INAddTasksIntent::initWithTargetTaskList:taskTitles:spatialEventTrigger:temporalEventTrigger: missing a [Deprecated] attribute -!deprecated-attribute-missing! INNoteContentTypeResolutionResult missing a [Deprecated] attribute -!deprecated-attribute-missing! INPlayMediaIntent::initWithMediaItems:mediaContainer:playShuffled:playbackRepeatMode:resumePlayback: missing a [Deprecated] attribute -!deprecated-attribute-missing! INSearchForNotebookItemsIntent::initWithTitle:content:itemType:status:location:locationSearchType:dateTime:dateSearchType:notebookItemIdentifier: missing a [Deprecated] attribute -!deprecated-attribute-missing! INSetTaskAttributeIntent::initWithTargetTask:status:spatialEventTrigger:temporalEventTrigger: missing a [Deprecated] attribute -!deprecated-attribute-missing! INStartAudioCallIntent missing a [Deprecated] attribute -!deprecated-attribute-missing! INStartAudioCallIntentResponse missing a [Deprecated] attribute -!deprecated-attribute-missing! INStartVideoCallIntent missing a [Deprecated] attribute -!deprecated-attribute-missing! INStartVideoCallIntentResponse missing a [Deprecated] attribute -!extra-designated-initializer! INAddTasksIntent::initWithTargetTaskList:taskTitles:spatialEventTrigger:temporalEventTrigger: is incorrectly decorated with an [DesignatedInitializer] attribute -!extra-designated-initializer! INCallRecord::initWithIdentifier:dateCreated:caller:callRecordType:callCapability:callDuration:unseen: is incorrectly decorated with an [DesignatedInitializer] attribute -!extra-designated-initializer! INMediaItem::initWithIdentifier:title:type:artwork: is incorrectly decorated with an [DesignatedInitializer] attribute -!extra-designated-initializer! INPlayMediaIntent::initWithMediaItems:mediaContainer:playShuffled:playbackRepeatMode:resumePlayback: is incorrectly decorated with an [DesignatedInitializer] attribute -!extra-designated-initializer! INSearchForNotebookItemsIntent::initWithTitle:content:itemType:status:location:locationSearchType:dateTime:dateSearchType:notebookItemIdentifier: is incorrectly decorated with an [DesignatedInitializer] attribute -!extra-designated-initializer! INSetTaskAttributeIntent::initWithTargetTask:status:spatialEventTrigger:temporalEventTrigger: is incorrectly decorated with an [DesignatedInitializer] attribute -!extra-designated-initializer! INTask::initWithTitle:status:taskType:spatialEventTrigger:temporalEventTrigger:createdDateComponents:modifiedDateComponents:identifier: is incorrectly decorated with an [DesignatedInitializer] attribute -!missing-enum! INAddMediaIntentResponseCode not bound -!missing-enum! INAddMediaMediaDestinationUnsupportedReason not bound -!missing-enum! INAddMediaMediaItemUnsupportedReason not bound -!missing-enum! INAddTasksTargetTaskListConfirmationReason not bound -!missing-enum! INAddTasksTemporalEventTriggerUnsupportedReason not bound -!missing-enum! INCallAudioRoute not bound -!missing-enum! INDeleteTasksIntentResponseCode not bound -!missing-enum! INDeleteTasksTaskListUnsupportedReason not bound -!missing-enum! INDeleteTasksTaskUnsupportedReason not bound -!missing-enum! INGetReservationDetailsIntentResponseCode not bound -!missing-enum! INMediaAffinityType not bound -!missing-enum! INMediaDestinationType not bound -!missing-enum! INMediaReference not bound -!missing-enum! INMediaSortOrder not bound -!missing-enum! INMediaUserContextSubscriptionStatus not bound -!missing-enum! INPlaybackQueueLocation not bound -!missing-enum! INPlayMediaMediaItemUnsupportedReason not bound -!missing-enum! INPlayMediaPlaybackSpeedUnsupportedReason not bound -!missing-enum! INReservationActionType not bound -!missing-enum! INReservationStatus not bound -!missing-enum! INSearchForMediaIntentResponseCode not bound -!missing-enum! INSearchForMediaMediaItemUnsupportedReason not bound -!missing-enum! INSetTaskAttributeTemporalEventTriggerUnsupportedReason not bound -!missing-enum! INSnoozeTasksIntentResponseCode not bound -!missing-enum! INSnoozeTasksTaskUnsupportedReason not bound -!missing-enum! INStartCallCallCapabilityUnsupportedReason not bound -!missing-enum! INStartCallContactUnsupportedReason not bound -!missing-enum! INStartCallIntentResponseCode not bound -!missing-enum! INTaskPriority not bound -!missing-enum! INTemporalEventTriggerTypeOptions not bound -!missing-enum! INTicketedEventCategory not bound -!missing-enum! INUpdateMediaAffinityIntentResponseCode not bound -!missing-enum! INUpdateMediaAffinityMediaItemUnsupportedReason not bound -!missing-field! INPersonRelationshipDaughter not bound -!missing-field! INPersonRelationshipSon not bound -!missing-protocol! INAddMediaIntentHandling not bound -!missing-protocol! INDeleteTasksIntentHandling not bound -!missing-protocol! INSearchForMediaIntentHandling not bound -!missing-protocol! INSnoozeTasksIntentHandling not bound -!missing-protocol! INStartCallIntentHandling not bound -!missing-protocol! INUpdateMediaAffinityIntentHandling not bound -!missing-protocol-member! INAddTasksIntentHandling::resolvePriorityForAddTasks:withCompletion: not found -!missing-protocol-member! INAddTasksIntentHandling::resolveTargetTaskListForAddTasks:completion: not found -!missing-protocol-member! INAddTasksIntentHandling::resolveTemporalEventTriggerForAddTasks:completion: not found -!missing-protocol-member! INPlayMediaIntentHandling::resolveMediaItemsForPlayMedia:withCompletion: not found -!missing-protocol-member! INPlayMediaIntentHandling::resolvePlaybackQueueLocationForPlayMedia:withCompletion: not found -!missing-protocol-member! INPlayMediaIntentHandling::resolvePlaybackRepeatModeForPlayMedia:withCompletion: not found -!missing-protocol-member! INPlayMediaIntentHandling::resolvePlaybackSpeedForPlayMedia:withCompletion: not found -!missing-protocol-member! INPlayMediaIntentHandling::resolvePlayShuffledForPlayMedia:withCompletion: not found -!missing-protocol-member! INPlayMediaIntentHandling::resolveResumePlaybackForPlayMedia:withCompletion: not found -!missing-protocol-member! INSearchForNotebookItemsIntentHandling::resolveTaskPriorityForSearchForNotebookItems:withCompletion: not found -!missing-protocol-member! INSearchForNotebookItemsIntentHandling::resolveTemporalEventTriggerTypesForSearchForNotebookItems:withCompletion: not found -!missing-protocol-member! INSetTaskAttributeIntentHandling::resolvePriorityForSetTaskAttribute:withCompletion: not found -!missing-protocol-member! INSetTaskAttributeIntentHandling::resolveTaskTitleForSetTaskAttribute:withCompletion: not found -!missing-protocol-member! INSetTaskAttributeIntentHandling::resolveTemporalEventTriggerForSetTaskAttribute:completion: not found -!missing-selector! +INAddMediaMediaDestinationResolutionResult::unsupportedForReason: not bound -!missing-selector! +INAddMediaMediaItemResolutionResult::unsupportedForReason: not bound -!missing-selector! +INAddTasksTargetTaskListResolutionResult::confirmationRequiredWithTaskListToConfirm:forReason: not bound -!missing-selector! +INAddTasksTemporalEventTriggerResolutionResult::unsupportedForReason: not bound -!missing-selector! +INCallCapabilityResolutionResult::confirmationRequiredWithCallCapabilityToConfirm: not bound -!missing-selector! +INCallCapabilityResolutionResult::successWithResolvedCallCapability: not bound -!missing-selector! +INDeleteTasksTaskListResolutionResult::unsupportedForReason: not bound -!missing-selector! +INDeleteTasksTaskResolutionResult::unsupportedForReason: not bound -!missing-selector! +INEnergyResolutionResult::confirmationRequiredWithEnergyToConfirm: not bound -!missing-selector! +INEnergyResolutionResult::disambiguationWithEnergyToDisambiguate: not bound -!missing-selector! +INEnergyResolutionResult::successWithResolvedEnergy: not bound -!missing-selector! +INEnumResolutionResult::confirmationRequiredWithValueToConfirm: not bound -!missing-selector! +INEnumResolutionResult::successWithResolvedValue: not bound -!missing-selector! +INFile::fileWithData:filename:typeIdentifier: not bound -!missing-selector! +INFile::fileWithFileURL:filename:typeIdentifier: not bound -!missing-selector! +INFileResolutionResult::confirmationRequiredWithFileToConfirm: not bound -!missing-selector! +INFileResolutionResult::disambiguationWithFilesToDisambiguate: not bound -!missing-selector! +INFileResolutionResult::successWithResolvedFile: not bound -!missing-selector! +INIntentResolutionResult::confirmationRequiredWithItemToConfirm:forReason: not bound -!missing-selector! +INIntentResolutionResult::unsupportedWithReason: not bound -!missing-selector! +INLengthResolutionResult::confirmationRequiredWithLengthToConfirm: not bound -!missing-selector! +INLengthResolutionResult::disambiguationWithLengthsToDisambiguate: not bound -!missing-selector! +INLengthResolutionResult::successWithResolvedLength: not bound -!missing-selector! +INMassResolutionResult::confirmationRequiredWithMassToConfirm: not bound -!missing-selector! +INMassResolutionResult::disambiguationWithMassToDisambiguate: not bound -!missing-selector! +INMassResolutionResult::successWithResolvedMass: not bound -!missing-selector! +INMediaAffinityTypeResolutionResult::confirmationRequiredWithMediaAffinityTypeToConfirm: not bound -!missing-selector! +INMediaAffinityTypeResolutionResult::successWithResolvedMediaAffinityType: not bound -!missing-selector! +INMediaDestination::libraryDestination not bound -!missing-selector! +INMediaDestination::playlistDestinationWithName: not bound -!missing-selector! +INMediaDestinationResolutionResult::confirmationRequiredWithMediaDestinationToConfirm: not bound -!missing-selector! +INMediaDestinationResolutionResult::disambiguationWithMediaDestinationsToDisambiguate: not bound -!missing-selector! +INMediaDestinationResolutionResult::successWithResolvedMediaDestination: not bound -!missing-selector! +INMediaItemResolutionResult::confirmationRequiredWithMediaItemToConfirm: not bound -!missing-selector! +INMediaItemResolutionResult::disambiguationWithMediaItemsToDisambiguate: not bound -!missing-selector! +INMediaItemResolutionResult::successesWithResolvedMediaItems: not bound -!missing-selector! +INMediaItemResolutionResult::successWithResolvedMediaItem: not bound -!missing-selector! +INObjectResolutionResult::confirmationRequiredWithObjectToConfirm: not bound -!missing-selector! +INObjectResolutionResult::disambiguationWithObjectsToDisambiguate: not bound -!missing-selector! +INObjectResolutionResult::successWithResolvedObject: not bound -!missing-selector! +INPaymentMethodResolutionResult::confirmationRequiredWithPaymentMethodToConfirm: not bound -!missing-selector! +INPaymentMethodResolutionResult::disambiguationWithPaymentMethodsToDisambiguate: not bound -!missing-selector! +INPaymentMethodResolutionResult::successWithResolvedPaymentMethod: not bound -!missing-selector! +INPlaybackQueueLocationResolutionResult::confirmationRequiredWithPlaybackQueueLocationToConfirm: not bound -!missing-selector! +INPlaybackQueueLocationResolutionResult::successWithResolvedPlaybackQueueLocation: not bound -!missing-selector! +INPlaybackRepeatModeResolutionResult::confirmationRequiredWithPlaybackRepeatModeToConfirm: not bound -!missing-selector! +INPlaybackRepeatModeResolutionResult::successWithResolvedPlaybackRepeatMode: not bound -!missing-selector! +INPlayMediaMediaItemResolutionResult::unsupportedForReason: not bound -!missing-selector! +INPlayMediaPlaybackSpeedResolutionResult::unsupportedForReason: not bound -!missing-selector! +INSearchForMediaMediaItemResolutionResult::unsupportedForReason: not bound -!missing-selector! +INSetTaskAttributeTemporalEventTriggerResolutionResult::unsupportedForReason: not bound -!missing-selector! +INSnoozeTasksTaskResolutionResult::unsupportedForReason: not bound -!missing-selector! +INSpeedResolutionResult::confirmationRequiredWithSpeedToConfirm: not bound -!missing-selector! +INSpeedResolutionResult::disambiguationWithSpeedToDisambiguate: not bound -!missing-selector! +INSpeedResolutionResult::successWithResolvedSpeed: not bound -!missing-selector! +INStartCallCallCapabilityResolutionResult::unsupportedForReason: not bound -!missing-selector! +INStartCallContactResolutionResult::unsupportedForReason: not bound -!missing-selector! +INTaskPriorityResolutionResult::confirmationRequiredWithTaskPriorityToConfirm: not bound -!missing-selector! +INTaskPriorityResolutionResult::successWithResolvedTaskPriority: not bound -!missing-selector! +INTemporalEventTriggerTypeOptionsResolutionResult::confirmationRequiredWithTemporalEventTriggerTypeOptionsToConfirm: not bound -!missing-selector! +INTemporalEventTriggerTypeOptionsResolutionResult::successWithResolvedTemporalEventTriggerTypeOptions: not bound -!missing-selector! +INTimeIntervalResolutionResult::confirmationRequiredWithTimeIntervalToConfirm: not bound -!missing-selector! +INTimeIntervalResolutionResult::successWithResolvedTimeInterval: not bound -!missing-selector! +INUpdateMediaAffinityMediaItemResolutionResult::unsupportedForReason: not bound -!missing-selector! +INURLResolutionResult::confirmationRequiredWithURLToConfirm: not bound -!missing-selector! +INURLResolutionResult::disambiguationWithURLsToDisambiguate: not bound -!missing-selector! +INURLResolutionResult::successWithResolvedURL: not bound -!missing-selector! +INVolumeResolutionResult::confirmationRequiredWithVolumeToConfirm: not bound -!missing-selector! +INVolumeResolutionResult::disambiguationWithVolumeToDisambiguate: not bound -!missing-selector! +INVolumeResolutionResult::successWithResolvedVolume: not bound -!missing-selector! INAddMediaIntent::initWithMediaItems:mediaSearch:mediaDestination: not bound -!missing-selector! INAddMediaIntent::mediaDestination not bound -!missing-selector! INAddMediaIntent::mediaItems not bound -!missing-selector! INAddMediaIntent::mediaSearch not bound -!missing-selector! INAddMediaIntentResponse::code not bound -!missing-selector! INAddMediaIntentResponse::initWithCode:userActivity: not bound -!missing-selector! INAddMediaMediaDestinationResolutionResult::initWithMediaDestinationResolutionResult: not bound -!missing-selector! INAddMediaMediaItemResolutionResult::initWithMediaItemResolutionResult: not bound -!missing-selector! INAddTasksIntent::initWithTargetTaskList:taskTitles:spatialEventTrigger:temporalEventTrigger:priority: not bound -!missing-selector! INAddTasksIntent::priority not bound -!missing-selector! INAddTasksTargetTaskListResolutionResult::initWithTaskListResolutionResult: not bound -!missing-selector! INAddTasksTemporalEventTriggerResolutionResult::initWithTemporalEventTriggerResolutionResult: not bound -!missing-selector! INAirline::iataCode not bound -!missing-selector! INAirline::icaoCode not bound -!missing-selector! INAirline::initWithName:iataCode:icaoCode: not bound -!missing-selector! INAirline::name not bound -!missing-selector! INAirport::iataCode not bound -!missing-selector! INAirport::icaoCode not bound -!missing-selector! INAirport::initWithName:iataCode:icaoCode: not bound -!missing-selector! INAirport::name not bound -!missing-selector! INAirportGate::airport not bound -!missing-selector! INAirportGate::gate not bound -!missing-selector! INAirportGate::initWithAirport:terminal:gate: not bound -!missing-selector! INAirportGate::terminal not bound -!missing-selector! INCallRecord::initWithIdentifier:dateCreated:caller:callRecordType:callCapability:callDuration:unseen:numberOfCalls: not bound -!missing-selector! INCallRecord::numberOfCalls not bound -!missing-selector! INDeleteTasksIntent::all not bound -!missing-selector! INDeleteTasksIntent::initWithTaskList:tasks:all: not bound -!missing-selector! INDeleteTasksIntent::taskList not bound -!missing-selector! INDeleteTasksIntent::tasks not bound -!missing-selector! INDeleteTasksIntentResponse::code not bound -!missing-selector! INDeleteTasksIntentResponse::deletedTasks not bound -!missing-selector! INDeleteTasksIntentResponse::initWithCode:userActivity: not bound -!missing-selector! INDeleteTasksIntentResponse::setDeletedTasks: not bound -!missing-selector! INDeleteTasksTaskListResolutionResult::initWithTaskListResolutionResult: not bound -!missing-selector! INDeleteTasksTaskResolutionResult::initWithTaskResolutionResult: not bound -!missing-selector! INFile::data not bound -!missing-selector! INFile::filename not bound -!missing-selector! INFile::fileURL not bound -!missing-selector! INFile::setFilename: not bound -!missing-selector! INFile::typeIdentifier not bound -!missing-selector! INFlight::airline not bound -!missing-selector! INFlight::arrivalAirportGate not bound -!missing-selector! INFlight::boardingTime not bound -!missing-selector! INFlight::departureAirportGate not bound -!missing-selector! INFlight::flightDuration not bound -!missing-selector! INFlight::flightNumber not bound -!missing-selector! INFlight::initWithAirline:flightNumber:boardingTime:flightDuration:departureAirportGate:arrivalAirportGate: not bound -!missing-selector! INFlightReservation::flight not bound -!missing-selector! INFlightReservation::initWithItemReference:reservationNumber:bookingTime:reservationStatus:reservationHolderName:actions:reservedSeat:flight: not bound -!missing-selector! INFlightReservation::reservedSeat not bound -!missing-selector! INGetReservationDetailsIntent::initWithReservationContainerReference:reservationItemReferences: not bound -!missing-selector! INGetReservationDetailsIntent::reservationContainerReference not bound -!missing-selector! INGetReservationDetailsIntent::reservationItemReferences not bound -!missing-selector! INGetReservationDetailsIntentResponse::code not bound -!missing-selector! INGetReservationDetailsIntentResponse::initWithCode:userActivity: not bound -!missing-selector! INGetReservationDetailsIntentResponse::reservations not bound -!missing-selector! INGetReservationDetailsIntentResponse::setReservations: not bound -!missing-selector! INLodgingReservation::initWithItemReference:reservationNumber:bookingTime:reservationStatus:reservationHolderName:actions:lodgingBusinessLocation:reservationDuration:numberOfAdults:numberOfChildren: not bound -!missing-selector! INLodgingReservation::lodgingBusinessLocation not bound -!missing-selector! INLodgingReservation::numberOfAdults not bound -!missing-selector! INLodgingReservation::numberOfChildren not bound -!missing-selector! INLodgingReservation::reservationDuration not bound -!missing-selector! INMediaDestination::mediaDestinationType not bound -!missing-selector! INMediaDestination::playlistName not bound -!missing-selector! INMediaItem::artist not bound -!missing-selector! INMediaItem::initWithIdentifier:title:type:artwork:artist: not bound -!missing-selector! INMediaSearch::activityNames not bound -!missing-selector! INMediaSearch::albumName not bound -!missing-selector! INMediaSearch::artistName not bound -!missing-selector! INMediaSearch::genreNames not bound -!missing-selector! INMediaSearch::initWithMediaType:sortOrder:mediaName:artistName:albumName:genreNames:moodNames:activityNames:releaseDate:reference:mediaIdentifier: not bound -!missing-selector! INMediaSearch::mediaIdentifier not bound -!missing-selector! INMediaSearch::mediaName not bound -!missing-selector! INMediaSearch::mediaType not bound -!missing-selector! INMediaSearch::moodNames not bound -!missing-selector! INMediaSearch::reference not bound -!missing-selector! INMediaSearch::releaseDate not bound -!missing-selector! INMediaSearch::sortOrder not bound -!missing-selector! INMediaUserContext::init not bound -!missing-selector! INMediaUserContext::numberOfLibraryItems not bound -!missing-selector! INMediaUserContext::setNumberOfLibraryItems: not bound -!missing-selector! INMediaUserContext::setSubscriptionStatus: not bound -!missing-selector! INMediaUserContext::subscriptionStatus not bound -!missing-selector! INObject::setAlternativeSpeakableMatches: not bound -!missing-selector! INPlayMediaIntent::initWithMediaItems:mediaContainer:playShuffled:playbackRepeatMode:resumePlayback:playbackQueueLocation:playbackSpeed:mediaSearch: not bound -!missing-selector! INPlayMediaIntent::mediaSearch not bound -!missing-selector! INPlayMediaIntent::playbackQueueLocation not bound -!missing-selector! INPlayMediaIntent::playbackSpeed not bound -!missing-selector! INPlayMediaMediaItemResolutionResult::initWithMediaItemResolutionResult: not bound -!missing-selector! INPlayMediaPlaybackSpeedResolutionResult::initWithDoubleResolutionResult: not bound -!missing-selector! INRentalCar::initWithRentalCompanyName:type:make:model:rentalCarDescription: not bound -!missing-selector! INRentalCar::make not bound -!missing-selector! INRentalCar::model not bound -!missing-selector! INRentalCar::rentalCarDescription not bound -!missing-selector! INRentalCar::rentalCompanyName not bound -!missing-selector! INRentalCar::type not bound -!missing-selector! INRentalCarReservation::dropOffLocation not bound -!missing-selector! INRentalCarReservation::initWithItemReference:reservationNumber:bookingTime:reservationStatus:reservationHolderName:actions:rentalCar:rentalDuration:pickupLocation:dropOffLocation: not bound -!missing-selector! INRentalCarReservation::pickupLocation not bound -!missing-selector! INRentalCarReservation::rentalCar not bound -!missing-selector! INRentalCarReservation::rentalDuration not bound -!missing-selector! INReservation::actions not bound -!missing-selector! INReservation::bookingTime not bound -!missing-selector! INReservation::itemReference not bound -!missing-selector! INReservation::reservationHolderName not bound -!missing-selector! INReservation::reservationNumber not bound -!missing-selector! INReservation::reservationStatus not bound -!missing-selector! INReservationAction::initWithType:validDuration:userActivity: not bound -!missing-selector! INReservationAction::type not bound -!missing-selector! INReservationAction::userActivity not bound -!missing-selector! INReservationAction::validDuration not bound -!missing-selector! INRestaurantReservation::initWithItemReference:reservationNumber:bookingTime:reservationStatus:reservationHolderName:actions:reservationDuration:partySize:restaurantLocation: not bound -!missing-selector! INRestaurantReservation::partySize not bound -!missing-selector! INRestaurantReservation::reservationDuration not bound -!missing-selector! INRestaurantReservation::restaurantLocation not bound -!missing-selector! INSearchForMediaIntent::initWithMediaItems:mediaSearch: not bound -!missing-selector! INSearchForMediaIntent::mediaItems not bound -!missing-selector! INSearchForMediaIntent::mediaSearch not bound -!missing-selector! INSearchForMediaIntentResponse::code not bound -!missing-selector! INSearchForMediaIntentResponse::initWithCode:userActivity: not bound -!missing-selector! INSearchForMediaIntentResponse::mediaItems not bound -!missing-selector! INSearchForMediaIntentResponse::setMediaItems: not bound -!missing-selector! INSearchForMediaMediaItemResolutionResult::initWithMediaItemResolutionResult: not bound -!missing-selector! INSearchForNotebookItemsIntent::initWithTitle:content:itemType:status:location:locationSearchType:dateTime:dateSearchType:temporalEventTriggerTypes:taskPriority:notebookItemIdentifier: not bound -!missing-selector! INSearchForNotebookItemsIntent::taskPriority not bound -!missing-selector! INSearchForNotebookItemsIntent::temporalEventTriggerTypes not bound -!missing-selector! INSeat::initWithSeatSection:seatRow:seatNumber:seatingType: not bound -!missing-selector! INSeat::seatingType not bound -!missing-selector! INSeat::seatNumber not bound -!missing-selector! INSeat::seatRow not bound -!missing-selector! INSeat::seatSection not bound -!missing-selector! INSetTaskAttributeIntent::initWithTargetTask:taskTitle:status:priority:spatialEventTrigger:temporalEventTrigger: not bound -!missing-selector! INSetTaskAttributeIntent::priority not bound -!missing-selector! INSetTaskAttributeIntent::taskTitle not bound -!missing-selector! INSetTaskAttributeTemporalEventTriggerResolutionResult::initWithTemporalEventTriggerResolutionResult: not bound -!missing-selector! INSnoozeTasksIntent::all not bound -!missing-selector! INSnoozeTasksIntent::initWithTasks:nextTriggerTime:all: not bound -!missing-selector! INSnoozeTasksIntent::nextTriggerTime not bound -!missing-selector! INSnoozeTasksIntent::tasks not bound -!missing-selector! INSnoozeTasksIntentResponse::code not bound -!missing-selector! INSnoozeTasksIntentResponse::initWithCode:userActivity: not bound -!missing-selector! INSnoozeTasksIntentResponse::setSnoozedTasks: not bound -!missing-selector! INSnoozeTasksIntentResponse::snoozedTasks not bound -!missing-selector! INSnoozeTasksTaskResolutionResult::initWithTaskResolutionResult: not bound -!missing-selector! INStartCallCallCapabilityResolutionResult::initWithCallCapabilityResolutionResult: not bound -!missing-selector! INStartCallContactResolutionResult::initWithPersonResolutionResult: not bound -!missing-selector! INStartCallIntent::audioRoute not bound -!missing-selector! INStartCallIntent::callCapability not bound -!missing-selector! INStartCallIntent::contacts not bound -!missing-selector! INStartCallIntent::destinationType not bound -!missing-selector! INStartCallIntent::initWithAudioRoute:destinationType:contacts:recordTypeForRedialing:callCapability: not bound -!missing-selector! INStartCallIntent::recordTypeForRedialing not bound -!missing-selector! INStartCallIntentResponse::code not bound -!missing-selector! INStartCallIntentResponse::initWithCode:userActivity: not bound -!missing-selector! INTask::initWithTitle:status:taskType:spatialEventTrigger:temporalEventTrigger:createdDateComponents:modifiedDateComponents:identifier:priority: not bound -!missing-selector! INTask::priority not bound -!missing-selector! INTicketedEvent::category not bound -!missing-selector! INTicketedEvent::eventDuration not bound -!missing-selector! INTicketedEvent::initWithCategory:name:eventDuration:location: not bound -!missing-selector! INTicketedEvent::location not bound -!missing-selector! INTicketedEvent::name not bound -!missing-selector! INTicketedEventReservation::event not bound -!missing-selector! INTicketedEventReservation::initWithItemReference:reservationNumber:bookingTime:reservationStatus:reservationHolderName:actions:reservedSeat:event: not bound -!missing-selector! INTicketedEventReservation::reservedSeat not bound -!missing-selector! INTrainReservation::initWithItemReference:reservationNumber:bookingTime:reservationStatus:reservationHolderName:actions:reservedSeat:trainTrip: not bound -!missing-selector! INTrainReservation::reservedSeat not bound -!missing-selector! INTrainReservation::trainTrip not bound -!missing-selector! INTrainTrip::arrivalPlatform not bound -!missing-selector! INTrainTrip::arrivalStationLocation not bound -!missing-selector! INTrainTrip::departurePlatform not bound -!missing-selector! INTrainTrip::departureStationLocation not bound -!missing-selector! INTrainTrip::initWithProvider:trainName:trainNumber:tripDuration:departureStationLocation:departurePlatform:arrivalStationLocation:arrivalPlatform: not bound -!missing-selector! INTrainTrip::provider not bound -!missing-selector! INTrainTrip::trainName not bound -!missing-selector! INTrainTrip::trainNumber not bound -!missing-selector! INTrainTrip::tripDuration not bound -!missing-selector! INUpdateMediaAffinityIntent::affinityType not bound -!missing-selector! INUpdateMediaAffinityIntent::initWithMediaItems:mediaSearch:affinityType: not bound -!missing-selector! INUpdateMediaAffinityIntent::mediaItems not bound -!missing-selector! INUpdateMediaAffinityIntent::mediaSearch not bound -!missing-selector! INUpdateMediaAffinityIntentResponse::code not bound -!missing-selector! INUpdateMediaAffinityIntentResponse::initWithCode:userActivity: not bound -!missing-selector! INUpdateMediaAffinityMediaItemResolutionResult::initWithMediaItemResolutionResult: not bound -!missing-selector! INUserContext::becomeCurrent not bound -!missing-selector! NSExtensionContext::intent not bound -!missing-type! INAddMediaIntent not bound -!missing-type! INAddMediaIntentResponse not bound -!missing-type! INAddMediaMediaDestinationResolutionResult not bound -!missing-type! INAddMediaMediaItemResolutionResult not bound -!missing-type! INAddTasksTargetTaskListResolutionResult not bound -!missing-type! INAddTasksTemporalEventTriggerResolutionResult not bound -!missing-type! INAirline not bound -!missing-type! INAirport not bound -!missing-type! INAirportGate not bound -!missing-type! INCallCapabilityResolutionResult not bound -!missing-type! INDeleteTasksIntent not bound -!missing-type! INDeleteTasksIntentResponse not bound -!missing-type! INDeleteTasksTaskListResolutionResult not bound -!missing-type! INDeleteTasksTaskResolutionResult not bound -!missing-type! INEnergyResolutionResult not bound -!missing-type! INEnumResolutionResult not bound -!missing-type! INFile not bound -!missing-type! INFileResolutionResult not bound -!missing-type! INFlight not bound -!missing-type! INFlightReservation not bound -!missing-type! INGetReservationDetailsIntent not bound -!missing-type! INGetReservationDetailsIntentResponse not bound -!missing-type! INLengthResolutionResult not bound -!missing-type! INLodgingReservation not bound -!missing-type! INMassResolutionResult not bound -!missing-type! INMediaAffinityTypeResolutionResult not bound -!missing-type! INMediaDestination not bound -!missing-type! INMediaDestinationResolutionResult not bound -!missing-type! INMediaItemResolutionResult not bound -!missing-type! INMediaSearch not bound -!missing-type! INMediaUserContext not bound -!missing-type! INObjectResolutionResult not bound -!missing-type! INPaymentMethodResolutionResult not bound -!missing-type! INPlaybackQueueLocationResolutionResult not bound -!missing-type! INPlaybackRepeatModeResolutionResult not bound -!missing-type! INPlayMediaMediaItemResolutionResult not bound -!missing-type! INPlayMediaPlaybackSpeedResolutionResult not bound -!missing-type! INRentalCar not bound -!missing-type! INRentalCarReservation not bound -!missing-type! INReservation not bound -!missing-type! INReservationAction not bound -!missing-type! INRestaurantReservation not bound -!missing-type! INSearchForMediaIntent not bound -!missing-type! INSearchForMediaIntentResponse not bound -!missing-type! INSearchForMediaMediaItemResolutionResult not bound -!missing-type! INSeat not bound -!missing-type! INSetTaskAttributeTemporalEventTriggerResolutionResult not bound -!missing-type! INSnoozeTasksIntent not bound -!missing-type! INSnoozeTasksIntentResponse not bound -!missing-type! INSnoozeTasksTaskResolutionResult not bound -!missing-type! INSpeedResolutionResult not bound -!missing-type! INStartCallCallCapabilityResolutionResult not bound -!missing-type! INStartCallContactResolutionResult not bound -!missing-type! INStartCallIntent not bound -!missing-type! INStartCallIntentResponse not bound -!missing-type! INTaskPriorityResolutionResult not bound -!missing-type! INTemporalEventTriggerTypeOptionsResolutionResult not bound -!missing-type! INTicketedEvent not bound -!missing-type! INTicketedEventReservation not bound -!missing-type! INTimeIntervalResolutionResult not bound -!missing-type! INTrainReservation not bound -!missing-type! INTrainTrip not bound -!missing-type! INUpdateMediaAffinityIntent not bound -!missing-type! INUpdateMediaAffinityIntentResponse not bound -!missing-type! INUpdateMediaAffinityMediaItemResolutionResult not bound -!missing-type! INURLResolutionResult not bound -!missing-type! INUserContext not bound -!missing-type! INVolumeResolutionResult not bound -!missing-selector! INMediaSearch::initWithMediaType:sortOrder:mediaName:artistName:albumName:genreNames:moodNames:releaseDate:reference:mediaIdentifier: not bound -## appended from unclassified file -!missing-selector! INMessage::initWithIdentifier:conversationIdentifier:content:dateSent:sender:recipients:groupName:messageType:serviceName: not bound -!missing-selector! INMessage::serviceName not bound diff --git a/tests/xtro-sharpie/iOS-IntentsUI.todo b/tests/xtro-sharpie/iOS-IntentsUI.todo new file mode 100644 index 0000000000..25eabfa4bd --- /dev/null +++ b/tests/xtro-sharpie/iOS-IntentsUI.todo @@ -0,0 +1 @@ +!missing-designated-initializer! INUIAddVoiceShortcutButton::initWithStyle: is missing an [DesignatedInitializer] attribute diff --git a/tests/xtro-sharpie/iOS-MetalPerformanceShaders.todo b/tests/xtro-sharpie/iOS-MetalPerformanceShaders.todo index 4d7551537a..46bf1dc36c 100644 --- a/tests/xtro-sharpie/iOS-MetalPerformanceShaders.todo +++ b/tests/xtro-sharpie/iOS-MetalPerformanceShaders.todo @@ -595,3 +595,8 @@ !missing-type! MPSTemporaryNDArray not bound !unknown-simd-type-mapping! The Simd type vector_uchar16 does not have a mapping to a managed type. Please add one in SimdCheck.cs !wrong-base-type! MPSTriangleAccelerationStructure expected MPSPolygonAccelerationStructure actual MPSAccelerationStructure + +## Xcode 11.4 b1 +!missing-selector! MPSImageGuidedFilter::encodeReconstructionToCommandBuffer:guidanceTexture:coefficientsTextureA:coefficientsTextureB:destinationTexture: not bound +!missing-selector! MPSImageGuidedFilter::encodeRegressionToCommandBuffer:sourceTexture:guidanceTexture:weightsTexture:destinationCoefficientsTextureA:destinationCoefficientsTextureB: not bound + diff --git a/tests/xtro-sharpie/iOS-NetworkExtension.todo b/tests/xtro-sharpie/iOS-NetworkExtension.todo index e69de29bb2..536ca09224 100644 --- a/tests/xtro-sharpie/iOS-NetworkExtension.todo +++ b/tests/xtro-sharpie/iOS-NetworkExtension.todo @@ -0,0 +1,3 @@ +!missing-selector! NEAppProxyFlow::networkInterface not bound +!missing-selector! NEAppProxyFlow::setNetworkInterface: not bound +!missing-selector! NEFilterDataProvider::updateFlow:withVerdict:forDirection: not bound diff --git a/tests/xtro-sharpie/iOS-StoreKit.todo b/tests/xtro-sharpie/iOS-StoreKit.todo index e69de29bb2..82c8069356 100644 --- a/tests/xtro-sharpie/iOS-StoreKit.todo +++ b/tests/xtro-sharpie/iOS-StoreKit.todo @@ -0,0 +1,2 @@ +!missing-protocol-member! SKPaymentQueueDelegate::paymentQueueShouldShowPriceConsent: not found +!missing-selector! SKPaymentQueue::showPriceConsentIfNeeded not bound diff --git a/tests/xtro-sharpie/iOS-UIKit.ignore b/tests/xtro-sharpie/iOS-UIKit.ignore index 617d6915d5..737f1248c3 100644 --- a/tests/xtro-sharpie/iOS-UIKit.ignore +++ b/tests/xtro-sharpie/iOS-UIKit.ignore @@ -81,3 +81,8 @@ !missing-selector! UIBarAppearance::copy not bound !missing-selector! UIBarButtonItemAppearance::copy not bound !missing-selector! UITabBarItemAppearance::copy not bound + +## Xcode 11.4 Beta 2 +## Duplicated entry field UIKeyInputF1 FB66299477 +## https://github.com/xamarin/xamarin-macios/wiki/UIKit-iOS-xcode11.4-beta2 +!missing-field! UIKeyInputF1 not bound diff --git a/tests/xtro-sharpie/iOS-WebKit.todo b/tests/xtro-sharpie/iOS-WebKit.todo new file mode 100644 index 0000000000..c51174fbb3 --- /dev/null +++ b/tests/xtro-sharpie/iOS-WebKit.todo @@ -0,0 +1,19 @@ +!missing-selector! WKFindConfiguration::backwards not bound +!missing-selector! WKFindConfiguration::caseSensitive not bound +!missing-selector! WKFindConfiguration::setBackwards: not bound +!missing-selector! WKFindConfiguration::setCaseSensitive: not bound +!missing-selector! WKFindConfiguration::setWraps: not bound +!missing-selector! WKFindConfiguration::wraps not bound +!missing-selector! WKFindResult::matchFound not bound +!missing-selector! WKPDFConfiguration::rect not bound +!missing-selector! WKPDFConfiguration::setRect: not bound +!missing-selector! WKWebView::createPDFWithConfiguration:completionHandler: not bound +!missing-selector! WKWebView::createWebArchiveDataWithCompletionHandler: not bound +!missing-selector! WKWebView::findString:withConfiguration:completionHandler: not bound +!missing-selector! WKWebView::mediaType not bound +!missing-selector! WKWebView::pageZoom not bound +!missing-selector! WKWebView::setMediaType: not bound +!missing-selector! WKWebView::setPageZoom: not bound +!missing-type! WKFindConfiguration not bound +!missing-type! WKFindResult not bound +!missing-type! WKPDFConfiguration not bound diff --git a/tests/xtro-sharpie/macOS-CoreGraphics.todo b/tests/xtro-sharpie/macOS-CoreGraphics.todo new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/xtro-sharpie/macOS-CoreLocation.todo b/tests/xtro-sharpie/macOS-CoreLocation.todo new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/xtro-sharpie/macOS-FileProvider.todo b/tests/xtro-sharpie/macOS-FileProvider.todo new file mode 100644 index 0000000000..71158bbd17 --- /dev/null +++ b/tests/xtro-sharpie/macOS-FileProvider.todo @@ -0,0 +1 @@ +!extra-protocol-member! unexpected selector NSFileProviderItem::isTrashed found diff --git a/tests/xtro-sharpie/macOS-GameKit.todo b/tests/xtro-sharpie/macOS-GameKit.todo new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/xtro-sharpie/macOS-Intents.todo b/tests/xtro-sharpie/macOS-Intents.todo index f997bbfa25..b523497a4d 100644 --- a/tests/xtro-sharpie/macOS-Intents.todo +++ b/tests/xtro-sharpie/macOS-Intents.todo @@ -1,5 +1,3 @@ -!missing-field! INPersonRelationshipDaughter not bound -!missing-field! INPersonRelationshipSon not bound !unknown-field! INIntentErrorDomain bound !unknown-native-enum! INCallCapability bound !unknown-native-enum! INCallCapabilityOptions bound @@ -58,3 +56,26 @@ !unknown-type! INStartVideoCallIntent bound !unknown-type! INStartVideoCallIntentResponse bound !unknown-type! INStringResolutionResult bound + +## Xcode 11.4 b1 +!unknown-field! INPersonHandleLabelHome bound +!unknown-field! INPersonHandleLabelHomeFax bound +!unknown-field! INPersonHandleLabeliPhone bound +!unknown-field! INPersonHandleLabelMain bound +!unknown-field! INPersonHandleLabelMobile bound +!unknown-field! INPersonHandleLabelOther bound +!unknown-field! INPersonHandleLabelPager bound +!unknown-field! INPersonHandleLabelWork bound +!unknown-field! INPersonHandleLabelWorkFax bound +!unknown-field! INPersonRelationshipAssistant bound +!unknown-field! INPersonRelationshipBrother bound +!unknown-field! INPersonRelationshipChild bound +!unknown-field! INPersonRelationshipFather bound +!unknown-field! INPersonRelationshipFriend bound +!unknown-field! INPersonRelationshipManager bound +!unknown-field! INPersonRelationshipMother bound +!unknown-field! INPersonRelationshipParent bound +!unknown-field! INPersonRelationshipPartner bound +!unknown-field! INPersonRelationshipSister bound +!unknown-field! INPersonRelationshipSpouse bound + diff --git a/tests/xtro-sharpie/macOS-Metal.todo b/tests/xtro-sharpie/macOS-Metal.todo new file mode 100644 index 0000000000..9ea79a7cb8 --- /dev/null +++ b/tests/xtro-sharpie/macOS-Metal.todo @@ -0,0 +1,40 @@ +!missing-protocol! MTLRasterizationRateMap not bound +!missing-protocol-member! MTLCommandBuffer::presentDrawable:afterMinimumDuration: not found +!missing-protocol-member! MTLDevice::newRasterizationRateMapWithDescriptor: not found +!missing-protocol-member! MTLDevice::supportsRasterizationRateMapWithLayerCount: not found +!missing-protocol-member! MTLDevice::supportsVertexAmplificationCount: not found +!missing-protocol-member! MTLDrawable::addPresentedHandler: not found +!missing-protocol-member! MTLDrawable::drawableID not found +!missing-protocol-member! MTLDrawable::presentAfterMinimumDuration: not found +!missing-protocol-member! MTLDrawable::presentedTime not found +!missing-protocol-member! MTLRenderCommandEncoder::setVertexAmplificationCount:viewMappings: not found +!missing-selector! +MTLRasterizationRateMapDescriptor::rasterizationRateMapDescriptorWithScreenSize: not bound +!missing-selector! +MTLRasterizationRateMapDescriptor::rasterizationRateMapDescriptorWithScreenSize:layer: not bound +!missing-selector! +MTLRasterizationRateMapDescriptor::rasterizationRateMapDescriptorWithScreenSize:layerCount:layers: not bound +!missing-selector! MTLRasterizationRateLayerArray::objectAtIndexedSubscript: not bound +!missing-selector! MTLRasterizationRateLayerArray::setObject:atIndexedSubscript: not bound +!missing-selector! MTLRasterizationRateLayerDescriptor::horizontal not bound +!missing-selector! MTLRasterizationRateLayerDescriptor::horizontalSampleStorage not bound +!missing-selector! MTLRasterizationRateLayerDescriptor::initWithSampleCount: not bound +!missing-selector! MTLRasterizationRateLayerDescriptor::initWithSampleCount:horizontal:vertical: not bound +!missing-selector! MTLRasterizationRateLayerDescriptor::sampleCount not bound +!missing-selector! MTLRasterizationRateLayerDescriptor::vertical not bound +!missing-selector! MTLRasterizationRateLayerDescriptor::verticalSampleStorage not bound +!missing-selector! MTLRasterizationRateMapDescriptor::label not bound +!missing-selector! MTLRasterizationRateMapDescriptor::layerAtIndex: not bound +!missing-selector! MTLRasterizationRateMapDescriptor::layerCount not bound +!missing-selector! MTLRasterizationRateMapDescriptor::layers not bound +!missing-selector! MTLRasterizationRateMapDescriptor::screenSize not bound +!missing-selector! MTLRasterizationRateMapDescriptor::setLabel: not bound +!missing-selector! MTLRasterizationRateMapDescriptor::setLayer:atIndex: not bound +!missing-selector! MTLRasterizationRateMapDescriptor::setScreenSize: not bound +!missing-selector! MTLRasterizationRateSampleArray::objectAtIndexedSubscript: not bound +!missing-selector! MTLRasterizationRateSampleArray::setObject:atIndexedSubscript: not bound +!missing-selector! MTLRenderPassDescriptor::rasterizationRateMap not bound +!missing-selector! MTLRenderPassDescriptor::setRasterizationRateMap: not bound +!missing-selector! MTLRenderPipelineDescriptor::maxVertexAmplificationCount not bound +!missing-selector! MTLRenderPipelineDescriptor::setMaxVertexAmplificationCount: not bound +!missing-type! MTLRasterizationRateLayerArray not bound +!missing-type! MTLRasterizationRateLayerDescriptor not bound +!missing-type! MTLRasterizationRateMapDescriptor not bound +!missing-type! MTLRasterizationRateSampleArray not bound diff --git a/tests/xtro-sharpie/macOS-MetalPerformanceShaders.todo b/tests/xtro-sharpie/macOS-MetalPerformanceShaders.todo index 4d7551537a..5d05e18fb5 100644 --- a/tests/xtro-sharpie/macOS-MetalPerformanceShaders.todo +++ b/tests/xtro-sharpie/macOS-MetalPerformanceShaders.todo @@ -595,3 +595,7 @@ !missing-type! MPSTemporaryNDArray not bound !unknown-simd-type-mapping! The Simd type vector_uchar16 does not have a mapping to a managed type. Please add one in SimdCheck.cs !wrong-base-type! MPSTriangleAccelerationStructure expected MPSPolygonAccelerationStructure actual MPSAccelerationStructure + +## Xcode 11.4 b1 +!missing-selector! MPSImageGuidedFilter::encodeReconstructionToCommandBuffer:guidanceTexture:coefficientsTextureA:coefficientsTextureB:destinationTexture: not bound +!missing-selector! MPSImageGuidedFilter::encodeRegressionToCommandBuffer:sourceTexture:guidanceTexture:weightsTexture:destinationCoefficientsTextureA:destinationCoefficientsTextureB: not bound diff --git a/tests/xtro-sharpie/macOS-NetworkExtension.todo b/tests/xtro-sharpie/macOS-NetworkExtension.todo index e69de29bb2..23b5826caa 100644 --- a/tests/xtro-sharpie/macOS-NetworkExtension.todo +++ b/tests/xtro-sharpie/macOS-NetworkExtension.todo @@ -0,0 +1,23 @@ +!missing-enum! NEFilterStatisticsReportFrequency not bound +!missing-selector! NEAppProxyFlow::networkInterface not bound +!missing-selector! NEAppProxyFlow::setMetaDataInParameters: not bound +!missing-selector! NEAppProxyFlow::setNetworkInterface: not bound +!missing-selector! NEAppRule::matchTools not bound +!missing-selector! NEAppRule::setMatchTools: not bound +!missing-selector! NEFilterDataProvider::updateFlow:withVerdict:forDirection: not bound +!missing-selector! NEFilterDataVerdict::setStatisticsReportFrequency: not bound +!missing-selector! NEFilterDataVerdict::statisticsReportFrequency not bound +!missing-selector! NEFilterNewFlowVerdict::setStatisticsReportFrequency: not bound +!missing-selector! NEFilterNewFlowVerdict::statisticsReportFrequency not bound +!missing-selector! NEFlowMetaData::filterFlowIdentifier not bound +!missing-selector! NETunnelProviderManager::appRules not bound +!missing-selector! NETunnelProviderManager::calendarDomains not bound +!missing-selector! NETunnelProviderManager::contactsDomains not bound +!missing-selector! NETunnelProviderManager::initForPerAppVPN not bound +!missing-selector! NETunnelProviderManager::mailDomains not bound +!missing-selector! NETunnelProviderManager::safariDomains not bound +!missing-selector! NETunnelProviderManager::setAppRules: not bound +!missing-selector! NETunnelProviderManager::setCalendarDomains: not bound +!missing-selector! NETunnelProviderManager::setContactsDomains: not bound +!missing-selector! NETunnelProviderManager::setMailDomains: not bound +!missing-selector! NETunnelProviderManager::setSafariDomains: not bound diff --git a/tests/xtro-sharpie/macOS-Security.todo b/tests/xtro-sharpie/macOS-Security.todo new file mode 100644 index 0000000000..92de0e5707 --- /dev/null +++ b/tests/xtro-sharpie/macOS-Security.todo @@ -0,0 +1,6 @@ +!missing-pinvoke! SecHostCreateGuest is not bound +!missing-pinvoke! SecHostRemoveGuest is not bound +!missing-pinvoke! SecHostSelectedGuest is not bound +!missing-pinvoke! SecHostSelectGuest is not bound +!missing-pinvoke! SecHostSetGuestStatus is not bound +!missing-pinvoke! SecHostSetHostingPort is not bound diff --git a/tests/xtro-sharpie/macOS-WebKit.todo b/tests/xtro-sharpie/macOS-WebKit.todo new file mode 100644 index 0000000000..b3e695753d --- /dev/null +++ b/tests/xtro-sharpie/macOS-WebKit.todo @@ -0,0 +1,21 @@ +!missing-protocol-conformance! WKWebView should conform to NSTextFinderClient (defined in 'WKNSTextFinderClient' category) +!missing-selector! WKFindConfiguration::backwards not bound +!missing-selector! WKFindConfiguration::caseSensitive not bound +!missing-selector! WKFindConfiguration::setBackwards: not bound +!missing-selector! WKFindConfiguration::setCaseSensitive: not bound +!missing-selector! WKFindConfiguration::setWraps: not bound +!missing-selector! WKFindConfiguration::wraps not bound +!missing-selector! WKFindResult::matchFound not bound +!missing-selector! WKPDFConfiguration::rect not bound +!missing-selector! WKPDFConfiguration::setRect: not bound +!missing-selector! WKWebView::createPDFWithConfiguration:completionHandler: not bound +!missing-selector! WKWebView::createWebArchiveDataWithCompletionHandler: not bound +!missing-selector! WKWebView::findString:withConfiguration:completionHandler: not bound +!missing-selector! WKWebView::mediaType not bound +!missing-selector! WKWebView::pageZoom not bound +!missing-selector! WKWebView::printOperationWithPrintInfo: not bound +!missing-selector! WKWebView::setMediaType: not bound +!missing-selector! WKWebView::setPageZoom: not bound +!missing-type! WKFindConfiguration not bound +!missing-type! WKFindResult not bound +!missing-type! WKPDFConfiguration not bound diff --git a/tests/xtro-sharpie/tvOS-AVFoundation.todo b/tests/xtro-sharpie/tvOS-AVFoundation.todo new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/xtro-sharpie/tvOS-CoreGraphics.todo b/tests/xtro-sharpie/tvOS-CoreGraphics.todo new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/xtro-sharpie/tvOS-CoreLocation.todo b/tests/xtro-sharpie/tvOS-CoreLocation.todo new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/xtro-sharpie/tvOS-GameKit.todo b/tests/xtro-sharpie/tvOS-GameKit.todo new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/xtro-sharpie/tvOS-MetalPerformanceShaders.todo b/tests/xtro-sharpie/tvOS-MetalPerformanceShaders.todo index 4d7551537a..46bf1dc36c 100644 --- a/tests/xtro-sharpie/tvOS-MetalPerformanceShaders.todo +++ b/tests/xtro-sharpie/tvOS-MetalPerformanceShaders.todo @@ -595,3 +595,8 @@ !missing-type! MPSTemporaryNDArray not bound !unknown-simd-type-mapping! The Simd type vector_uchar16 does not have a mapping to a managed type. Please add one in SimdCheck.cs !wrong-base-type! MPSTriangleAccelerationStructure expected MPSPolygonAccelerationStructure actual MPSAccelerationStructure + +## Xcode 11.4 b1 +!missing-selector! MPSImageGuidedFilter::encodeReconstructionToCommandBuffer:guidanceTexture:coefficientsTextureA:coefficientsTextureB:destinationTexture: not bound +!missing-selector! MPSImageGuidedFilter::encodeRegressionToCommandBuffer:sourceTexture:guidanceTexture:weightsTexture:destinationCoefficientsTextureA:destinationCoefficientsTextureB: not bound + diff --git a/tests/xtro-sharpie/tvOS-UIKit.ignore b/tests/xtro-sharpie/tvOS-UIKit.ignore index 1ab0ff5f1d..9f63e61508 100644 --- a/tests/xtro-sharpie/tvOS-UIKit.ignore +++ b/tests/xtro-sharpie/tvOS-UIKit.ignore @@ -108,3 +108,12 @@ !missing-selector! UIBarAppearance::copy not bound !missing-selector! UIBarButtonItemAppearance::copy not bound !missing-selector! UITabBarItemAppearance::copy not bound + +# Xcode 11.4 Beta 1 +## Parent type UIDatePicker is not available in tvOS +!missing-enum! UIDatePickerStyle not bound + +## Xcode 11.4 Beta 2 +## Duplicated entry field UIKeyInputF1 FB66299477 +## https://github.com/xamarin/xamarin-macios/wiki/UIKit-iOS-xcode11.4-beta2 +!missing-field! UIKeyInputF1 not bound diff --git a/tests/xtro-sharpie/watchOS-AuthenticationServices.ignore b/tests/xtro-sharpie/watchOS-AuthenticationServices.ignore deleted file mode 100644 index 95aca2263b..0000000000 --- a/tests/xtro-sharpie/watchOS-AuthenticationServices.ignore +++ /dev/null @@ -1,2 +0,0 @@ -## related types are not present -!missing-enum! ASExtensionErrorCode not bound diff --git a/tests/xtro-sharpie/watchOS-CoreGraphics.todo b/tests/xtro-sharpie/watchOS-CoreGraphics.todo new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/xtro-sharpie/watchOS-CoreLocation.todo b/tests/xtro-sharpie/watchOS-CoreLocation.todo new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/xtro-sharpie/watchOS-GameKit.todo b/tests/xtro-sharpie/watchOS-GameKit.todo new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/xtro-sharpie/watchOS-Intents.todo b/tests/xtro-sharpie/watchOS-Intents.todo index db17800e23..edb8b142f5 100644 --- a/tests/xtro-sharpie/watchOS-Intents.todo +++ b/tests/xtro-sharpie/watchOS-Intents.todo @@ -1,406 +1,8 @@ -!deprecated-attribute-missing! INAddTasksIntent::initWithTargetTaskList:taskTitles:spatialEventTrigger:temporalEventTrigger: missing a [Deprecated] attribute -!deprecated-attribute-missing! INNoteContentTypeResolutionResult missing a [Deprecated] attribute -!deprecated-attribute-missing! INPlayMediaIntent::initWithMediaItems:mediaContainer:playShuffled:playbackRepeatMode:resumePlayback: missing a [Deprecated] attribute -!deprecated-attribute-missing! INSearchForNotebookItemsIntent::initWithTitle:content:itemType:status:location:locationSearchType:dateTime:dateSearchType:notebookItemIdentifier: missing a [Deprecated] attribute -!deprecated-attribute-missing! INSetTaskAttributeIntent::initWithTargetTask:status:spatialEventTrigger:temporalEventTrigger: missing a [Deprecated] attribute -!deprecated-attribute-missing! INStartAudioCallIntent missing a [Deprecated] attribute -!deprecated-attribute-missing! INStartAudioCallIntentResponse missing a [Deprecated] attribute -!extra-designated-initializer! INAddTasksIntent::initWithTargetTaskList:taskTitles:spatialEventTrigger:temporalEventTrigger: is incorrectly decorated with an [DesignatedInitializer] attribute -!extra-designated-initializer! INCallRecord::initWithIdentifier:dateCreated:caller:callRecordType:callCapability:callDuration:unseen: is incorrectly decorated with an [DesignatedInitializer] attribute -!extra-designated-initializer! INMediaItem::initWithIdentifier:title:type:artwork: is incorrectly decorated with an [DesignatedInitializer] attribute -!extra-designated-initializer! INPlayMediaIntent::initWithMediaItems:mediaContainer:playShuffled:playbackRepeatMode:resumePlayback: is incorrectly decorated with an [DesignatedInitializer] attribute -!extra-designated-initializer! INSearchForNotebookItemsIntent::initWithTitle:content:itemType:status:location:locationSearchType:dateTime:dateSearchType:notebookItemIdentifier: is incorrectly decorated with an [DesignatedInitializer] attribute -!extra-designated-initializer! INSetTaskAttributeIntent::initWithTargetTask:status:spatialEventTrigger:temporalEventTrigger: is incorrectly decorated with an [DesignatedInitializer] attribute -!extra-designated-initializer! INTask::initWithTitle:status:taskType:spatialEventTrigger:temporalEventTrigger:createdDateComponents:modifiedDateComponents:identifier: is incorrectly decorated with an [DesignatedInitializer] attribute -!missing-enum! INAddMediaIntentResponseCode not bound -!missing-enum! INAddMediaMediaDestinationUnsupportedReason not bound -!missing-enum! INAddMediaMediaItemUnsupportedReason not bound -!missing-enum! INAddTasksTargetTaskListConfirmationReason not bound -!missing-enum! INAddTasksTemporalEventTriggerUnsupportedReason not bound -!missing-enum! INCallAudioRoute not bound -!missing-enum! INDeleteTasksIntentResponseCode not bound -!missing-enum! INDeleteTasksTaskListUnsupportedReason not bound -!missing-enum! INDeleteTasksTaskUnsupportedReason not bound -!missing-enum! INGetReservationDetailsIntentResponseCode not bound -!missing-enum! INMediaAffinityType not bound -!missing-enum! INMediaDestinationType not bound -!missing-enum! INMediaReference not bound -!missing-enum! INMediaSortOrder not bound -!missing-enum! INMediaUserContextSubscriptionStatus not bound -!missing-enum! INPlaybackQueueLocation not bound -!missing-enum! INPlayMediaMediaItemUnsupportedReason not bound -!missing-enum! INPlayMediaPlaybackSpeedUnsupportedReason not bound -!missing-enum! INReservationActionType not bound -!missing-enum! INReservationStatus not bound -!missing-enum! INSearchForMediaIntentResponseCode not bound -!missing-enum! INSearchForMediaMediaItemUnsupportedReason not bound -!missing-enum! INSetTaskAttributeTemporalEventTriggerUnsupportedReason not bound -!missing-enum! INSnoozeTasksIntentResponseCode not bound -!missing-enum! INSnoozeTasksTaskUnsupportedReason not bound -!missing-enum! INStartCallCallCapabilityUnsupportedReason not bound -!missing-enum! INStartCallContactUnsupportedReason not bound -!missing-enum! INStartCallIntentResponseCode not bound -!missing-enum! INTaskPriority not bound -!missing-enum! INTemporalEventTriggerTypeOptions not bound -!missing-enum! INTicketedEventCategory not bound -!missing-enum! INUpdateMediaAffinityIntentResponseCode not bound -!missing-enum! INUpdateMediaAffinityMediaItemUnsupportedReason not bound -!missing-enum! INVocabularyStringType not bound -!missing-field! INPersonRelationshipDaughter not bound -!missing-field! INPersonRelationshipSon not bound -!missing-protocol! INAddMediaIntentHandling not bound -!missing-protocol! INDeleteTasksIntentHandling not bound -!missing-protocol! INSearchForMediaIntentHandling not bound -!missing-protocol! INSnoozeTasksIntentHandling not bound -!missing-protocol! INStartCallIntentHandling not bound -!missing-protocol! INUpdateMediaAffinityIntentHandling not bound -!missing-protocol-member! INAddTasksIntentHandling::resolvePriorityForAddTasks:withCompletion: not found -!missing-protocol-member! INAddTasksIntentHandling::resolveTargetTaskListForAddTasks:completion: not found -!missing-protocol-member! INAddTasksIntentHandling::resolveTemporalEventTriggerForAddTasks:completion: not found -!missing-protocol-member! INPlayMediaIntentHandling::resolveMediaItemsForPlayMedia:withCompletion: not found -!missing-protocol-member! INPlayMediaIntentHandling::resolvePlaybackQueueLocationForPlayMedia:withCompletion: not found -!missing-protocol-member! INPlayMediaIntentHandling::resolvePlaybackRepeatModeForPlayMedia:withCompletion: not found -!missing-protocol-member! INPlayMediaIntentHandling::resolvePlaybackSpeedForPlayMedia:withCompletion: not found -!missing-protocol-member! INPlayMediaIntentHandling::resolvePlayShuffledForPlayMedia:withCompletion: not found -!missing-protocol-member! INPlayMediaIntentHandling::resolveResumePlaybackForPlayMedia:withCompletion: not found -!missing-protocol-member! INSearchForNotebookItemsIntentHandling::resolveTaskPriorityForSearchForNotebookItems:withCompletion: not found -!missing-protocol-member! INSearchForNotebookItemsIntentHandling::resolveTemporalEventTriggerTypesForSearchForNotebookItems:withCompletion: not found -!missing-protocol-member! INSetTaskAttributeIntentHandling::resolvePriorityForSetTaskAttribute:withCompletion: not found -!missing-protocol-member! INSetTaskAttributeIntentHandling::resolveTaskTitleForSetTaskAttribute:withCompletion: not found -!missing-protocol-member! INSetTaskAttributeIntentHandling::resolveTemporalEventTriggerForSetTaskAttribute:completion: not found -!missing-selector! +INAddMediaMediaDestinationResolutionResult::unsupportedForReason: not bound -!missing-selector! +INAddMediaMediaItemResolutionResult::unsupportedForReason: not bound -!missing-selector! +INAddTasksTargetTaskListResolutionResult::confirmationRequiredWithTaskListToConfirm:forReason: not bound -!missing-selector! +INAddTasksTemporalEventTriggerResolutionResult::unsupportedForReason: not bound -!missing-selector! +INCallCapabilityResolutionResult::confirmationRequiredWithCallCapabilityToConfirm: not bound -!missing-selector! +INCallCapabilityResolutionResult::successWithResolvedCallCapability: not bound -!missing-selector! +INDeleteTasksTaskListResolutionResult::unsupportedForReason: not bound -!missing-selector! +INDeleteTasksTaskResolutionResult::unsupportedForReason: not bound -!missing-selector! +INEnergyResolutionResult::confirmationRequiredWithEnergyToConfirm: not bound -!missing-selector! +INEnergyResolutionResult::disambiguationWithEnergyToDisambiguate: not bound -!missing-selector! +INEnergyResolutionResult::successWithResolvedEnergy: not bound -!missing-selector! +INEnumResolutionResult::confirmationRequiredWithValueToConfirm: not bound -!missing-selector! +INEnumResolutionResult::successWithResolvedValue: not bound -!missing-selector! +INFile::fileWithData:filename:typeIdentifier: not bound -!missing-selector! +INFile::fileWithFileURL:filename:typeIdentifier: not bound -!missing-selector! +INFileResolutionResult::confirmationRequiredWithFileToConfirm: not bound -!missing-selector! +INFileResolutionResult::disambiguationWithFilesToDisambiguate: not bound -!missing-selector! +INFileResolutionResult::successWithResolvedFile: not bound -!missing-selector! +INIntentResolutionResult::confirmationRequiredWithItemToConfirm:forReason: not bound -!missing-selector! +INIntentResolutionResult::unsupportedWithReason: not bound -!missing-selector! +INLengthResolutionResult::confirmationRequiredWithLengthToConfirm: not bound -!missing-selector! +INLengthResolutionResult::disambiguationWithLengthsToDisambiguate: not bound -!missing-selector! +INLengthResolutionResult::successWithResolvedLength: not bound -!missing-selector! +INMassResolutionResult::confirmationRequiredWithMassToConfirm: not bound -!missing-selector! +INMassResolutionResult::disambiguationWithMassToDisambiguate: not bound -!missing-selector! +INMassResolutionResult::successWithResolvedMass: not bound -!missing-selector! +INMediaAffinityTypeResolutionResult::confirmationRequiredWithMediaAffinityTypeToConfirm: not bound -!missing-selector! +INMediaAffinityTypeResolutionResult::successWithResolvedMediaAffinityType: not bound -!missing-selector! +INMediaDestination::libraryDestination not bound -!missing-selector! +INMediaDestination::playlistDestinationWithName: not bound -!missing-selector! +INMediaDestinationResolutionResult::confirmationRequiredWithMediaDestinationToConfirm: not bound -!missing-selector! +INMediaDestinationResolutionResult::disambiguationWithMediaDestinationsToDisambiguate: not bound -!missing-selector! +INMediaDestinationResolutionResult::successWithResolvedMediaDestination: not bound -!missing-selector! +INMediaItemResolutionResult::confirmationRequiredWithMediaItemToConfirm: not bound -!missing-selector! +INMediaItemResolutionResult::disambiguationWithMediaItemsToDisambiguate: not bound -!missing-selector! +INMediaItemResolutionResult::successesWithResolvedMediaItems: not bound -!missing-selector! +INMediaItemResolutionResult::successWithResolvedMediaItem: not bound -!missing-selector! +INObjectResolutionResult::confirmationRequiredWithObjectToConfirm: not bound -!missing-selector! +INObjectResolutionResult::disambiguationWithObjectsToDisambiguate: not bound -!missing-selector! +INObjectResolutionResult::successWithResolvedObject: not bound -!missing-selector! +INPaymentMethodResolutionResult::confirmationRequiredWithPaymentMethodToConfirm: not bound -!missing-selector! +INPaymentMethodResolutionResult::disambiguationWithPaymentMethodsToDisambiguate: not bound -!missing-selector! +INPaymentMethodResolutionResult::successWithResolvedPaymentMethod: not bound -!missing-selector! +INPlaybackQueueLocationResolutionResult::confirmationRequiredWithPlaybackQueueLocationToConfirm: not bound -!missing-selector! +INPlaybackQueueLocationResolutionResult::successWithResolvedPlaybackQueueLocation: not bound -!missing-selector! +INPlaybackRepeatModeResolutionResult::confirmationRequiredWithPlaybackRepeatModeToConfirm: not bound -!missing-selector! +INPlaybackRepeatModeResolutionResult::successWithResolvedPlaybackRepeatMode: not bound -!missing-selector! +INPlayMediaMediaItemResolutionResult::unsupportedForReason: not bound -!missing-selector! +INPlayMediaPlaybackSpeedResolutionResult::unsupportedForReason: not bound -!missing-selector! +INPreferences::requestSiriAuthorization: not bound -!missing-selector! +INPreferences::siriAuthorizationStatus not bound -!missing-selector! +INSearchForMediaMediaItemResolutionResult::unsupportedForReason: not bound -!missing-selector! +INSetTaskAttributeTemporalEventTriggerResolutionResult::unsupportedForReason: not bound -!missing-selector! +INSnoozeTasksTaskResolutionResult::unsupportedForReason: not bound -!missing-selector! +INSpeedResolutionResult::confirmationRequiredWithSpeedToConfirm: not bound -!missing-selector! +INSpeedResolutionResult::disambiguationWithSpeedToDisambiguate: not bound -!missing-selector! +INSpeedResolutionResult::successWithResolvedSpeed: not bound -!missing-selector! +INStartCallCallCapabilityResolutionResult::unsupportedForReason: not bound -!missing-selector! +INStartCallContactResolutionResult::unsupportedForReason: not bound -!missing-selector! +INTaskPriorityResolutionResult::confirmationRequiredWithTaskPriorityToConfirm: not bound -!missing-selector! +INTaskPriorityResolutionResult::successWithResolvedTaskPriority: not bound -!missing-selector! +INTemporalEventTriggerTypeOptionsResolutionResult::confirmationRequiredWithTemporalEventTriggerTypeOptionsToConfirm: not bound -!missing-selector! +INTemporalEventTriggerTypeOptionsResolutionResult::successWithResolvedTemporalEventTriggerTypeOptions: not bound -!missing-selector! +INTimeIntervalResolutionResult::confirmationRequiredWithTimeIntervalToConfirm: not bound -!missing-selector! +INTimeIntervalResolutionResult::successWithResolvedTimeInterval: not bound -!missing-selector! +INUpdateMediaAffinityMediaItemResolutionResult::unsupportedForReason: not bound -!missing-selector! +INURLResolutionResult::confirmationRequiredWithURLToConfirm: not bound -!missing-selector! +INURLResolutionResult::disambiguationWithURLsToDisambiguate: not bound -!missing-selector! +INURLResolutionResult::successWithResolvedURL: not bound -!missing-selector! +INVocabulary::sharedVocabulary not bound -!missing-selector! +INVolumeResolutionResult::confirmationRequiredWithVolumeToConfirm: not bound -!missing-selector! +INVolumeResolutionResult::disambiguationWithVolumeToDisambiguate: not bound -!missing-selector! +INVolumeResolutionResult::successWithResolvedVolume: not bound -!missing-selector! INAddMediaIntent::initWithMediaItems:mediaSearch:mediaDestination: not bound -!missing-selector! INAddMediaIntent::mediaDestination not bound -!missing-selector! INAddMediaIntent::mediaItems not bound -!missing-selector! INAddMediaIntent::mediaSearch not bound -!missing-selector! INAddMediaIntentResponse::code not bound -!missing-selector! INAddMediaIntentResponse::initWithCode:userActivity: not bound -!missing-selector! INAddMediaMediaDestinationResolutionResult::initWithMediaDestinationResolutionResult: not bound -!missing-selector! INAddMediaMediaItemResolutionResult::initWithMediaItemResolutionResult: not bound -!missing-selector! INAddTasksIntent::initWithTargetTaskList:taskTitles:spatialEventTrigger:temporalEventTrigger:priority: not bound -!missing-selector! INAddTasksIntent::priority not bound -!missing-selector! INAddTasksTargetTaskListResolutionResult::initWithTaskListResolutionResult: not bound -!missing-selector! INAddTasksTemporalEventTriggerResolutionResult::initWithTemporalEventTriggerResolutionResult: not bound -!missing-selector! INAirline::iataCode not bound -!missing-selector! INAirline::icaoCode not bound -!missing-selector! INAirline::initWithName:iataCode:icaoCode: not bound -!missing-selector! INAirline::name not bound -!missing-selector! INAirport::iataCode not bound -!missing-selector! INAirport::icaoCode not bound -!missing-selector! INAirport::initWithName:iataCode:icaoCode: not bound -!missing-selector! INAirport::name not bound -!missing-selector! INAirportGate::airport not bound -!missing-selector! INAirportGate::gate not bound -!missing-selector! INAirportGate::initWithAirport:terminal:gate: not bound -!missing-selector! INAirportGate::terminal not bound -!missing-selector! INCallRecord::initWithIdentifier:dateCreated:caller:callRecordType:callCapability:callDuration:unseen:numberOfCalls: not bound -!missing-selector! INCallRecord::numberOfCalls not bound -!missing-selector! INDeleteTasksIntent::all not bound -!missing-selector! INDeleteTasksIntent::initWithTaskList:tasks:all: not bound -!missing-selector! INDeleteTasksIntent::taskList not bound -!missing-selector! INDeleteTasksIntent::tasks not bound -!missing-selector! INDeleteTasksIntentResponse::code not bound -!missing-selector! INDeleteTasksIntentResponse::deletedTasks not bound -!missing-selector! INDeleteTasksIntentResponse::initWithCode:userActivity: not bound -!missing-selector! INDeleteTasksIntentResponse::setDeletedTasks: not bound -!missing-selector! INDeleteTasksTaskListResolutionResult::initWithTaskListResolutionResult: not bound -!missing-selector! INDeleteTasksTaskResolutionResult::initWithTaskResolutionResult: not bound -!missing-selector! INFile::data not bound -!missing-selector! INFile::filename not bound -!missing-selector! INFile::fileURL not bound -!missing-selector! INFile::setFilename: not bound -!missing-selector! INFile::typeIdentifier not bound -!missing-selector! INFlight::airline not bound -!missing-selector! INFlight::arrivalAirportGate not bound -!missing-selector! INFlight::boardingTime not bound -!missing-selector! INFlight::departureAirportGate not bound -!missing-selector! INFlight::flightDuration not bound -!missing-selector! INFlight::flightNumber not bound -!missing-selector! INFlight::initWithAirline:flightNumber:boardingTime:flightDuration:departureAirportGate:arrivalAirportGate: not bound -!missing-selector! INFlightReservation::flight not bound -!missing-selector! INFlightReservation::initWithItemReference:reservationNumber:bookingTime:reservationStatus:reservationHolderName:actions:reservedSeat:flight: not bound -!missing-selector! INFlightReservation::reservedSeat not bound -!missing-selector! INGetReservationDetailsIntent::initWithReservationContainerReference:reservationItemReferences: not bound -!missing-selector! INGetReservationDetailsIntent::reservationContainerReference not bound -!missing-selector! INGetReservationDetailsIntent::reservationItemReferences not bound -!missing-selector! INGetReservationDetailsIntentResponse::code not bound -!missing-selector! INGetReservationDetailsIntentResponse::initWithCode:userActivity: not bound -!missing-selector! INGetReservationDetailsIntentResponse::reservations not bound -!missing-selector! INGetReservationDetailsIntentResponse::setReservations: not bound -!missing-selector! INLodgingReservation::initWithItemReference:reservationNumber:bookingTime:reservationStatus:reservationHolderName:actions:lodgingBusinessLocation:reservationDuration:numberOfAdults:numberOfChildren: not bound -!missing-selector! INLodgingReservation::lodgingBusinessLocation not bound -!missing-selector! INLodgingReservation::numberOfAdults not bound -!missing-selector! INLodgingReservation::numberOfChildren not bound -!missing-selector! INLodgingReservation::reservationDuration not bound -!missing-selector! INMediaDestination::mediaDestinationType not bound -!missing-selector! INMediaDestination::playlistName not bound -!missing-selector! INMediaItem::artist not bound -!missing-selector! INMediaItem::initWithIdentifier:title:type:artwork:artist: not bound -!missing-selector! INMediaSearch::activityNames not bound -!missing-selector! INMediaSearch::albumName not bound -!missing-selector! INMediaSearch::artistName not bound -!missing-selector! INMediaSearch::genreNames not bound -!missing-selector! INMediaSearch::initWithMediaType:sortOrder:mediaName:artistName:albumName:genreNames:moodNames:activityNames:releaseDate:reference:mediaIdentifier: not bound -!missing-selector! INMediaSearch::mediaIdentifier not bound -!missing-selector! INMediaSearch::mediaName not bound -!missing-selector! INMediaSearch::mediaType not bound -!missing-selector! INMediaSearch::moodNames not bound -!missing-selector! INMediaSearch::reference not bound -!missing-selector! INMediaSearch::releaseDate not bound -!missing-selector! INMediaSearch::sortOrder not bound -!missing-selector! INMediaUserContext::init not bound -!missing-selector! INMediaUserContext::numberOfLibraryItems not bound -!missing-selector! INMediaUserContext::setNumberOfLibraryItems: not bound -!missing-selector! INMediaUserContext::setSubscriptionStatus: not bound -!missing-selector! INMediaUserContext::subscriptionStatus not bound -!missing-selector! INObject::setAlternativeSpeakableMatches: not bound -!missing-selector! INPlayMediaIntent::initWithMediaItems:mediaContainer:playShuffled:playbackRepeatMode:resumePlayback:playbackQueueLocation:playbackSpeed:mediaSearch: not bound -!missing-selector! INPlayMediaIntent::mediaSearch not bound -!missing-selector! INPlayMediaIntent::playbackQueueLocation not bound -!missing-selector! INPlayMediaIntent::playbackSpeed not bound -!missing-selector! INPlayMediaMediaItemResolutionResult::initWithMediaItemResolutionResult: not bound -!missing-selector! INPlayMediaPlaybackSpeedResolutionResult::initWithDoubleResolutionResult: not bound -!missing-selector! INRentalCar::initWithRentalCompanyName:type:make:model:rentalCarDescription: not bound -!missing-selector! INRentalCar::make not bound -!missing-selector! INRentalCar::model not bound -!missing-selector! INRentalCar::rentalCarDescription not bound -!missing-selector! INRentalCar::rentalCompanyName not bound -!missing-selector! INRentalCar::type not bound -!missing-selector! INRentalCarReservation::dropOffLocation not bound -!missing-selector! INRentalCarReservation::initWithItemReference:reservationNumber:bookingTime:reservationStatus:reservationHolderName:actions:rentalCar:rentalDuration:pickupLocation:dropOffLocation: not bound -!missing-selector! INRentalCarReservation::pickupLocation not bound -!missing-selector! INRentalCarReservation::rentalCar not bound -!missing-selector! INRentalCarReservation::rentalDuration not bound -!missing-selector! INReservation::actions not bound -!missing-selector! INReservation::bookingTime not bound -!missing-selector! INReservation::itemReference not bound -!missing-selector! INReservation::reservationHolderName not bound -!missing-selector! INReservation::reservationNumber not bound -!missing-selector! INReservation::reservationStatus not bound -!missing-selector! INReservationAction::initWithType:validDuration:userActivity: not bound -!missing-selector! INReservationAction::type not bound -!missing-selector! INReservationAction::userActivity not bound -!missing-selector! INReservationAction::validDuration not bound -!missing-selector! INRestaurantReservation::initWithItemReference:reservationNumber:bookingTime:reservationStatus:reservationHolderName:actions:reservationDuration:partySize:restaurantLocation: not bound -!missing-selector! INRestaurantReservation::partySize not bound -!missing-selector! INRestaurantReservation::reservationDuration not bound -!missing-selector! INRestaurantReservation::restaurantLocation not bound -!missing-selector! INSearchForMediaIntent::initWithMediaItems:mediaSearch: not bound -!missing-selector! INSearchForMediaIntent::mediaItems not bound -!missing-selector! INSearchForMediaIntent::mediaSearch not bound -!missing-selector! INSearchForMediaIntentResponse::code not bound -!missing-selector! INSearchForMediaIntentResponse::initWithCode:userActivity: not bound -!missing-selector! INSearchForMediaIntentResponse::mediaItems not bound -!missing-selector! INSearchForMediaIntentResponse::setMediaItems: not bound -!missing-selector! INSearchForMediaMediaItemResolutionResult::initWithMediaItemResolutionResult: not bound -!missing-selector! INSearchForNotebookItemsIntent::initWithTitle:content:itemType:status:location:locationSearchType:dateTime:dateSearchType:temporalEventTriggerTypes:taskPriority:notebookItemIdentifier: not bound -!missing-selector! INSearchForNotebookItemsIntent::taskPriority not bound -!missing-selector! INSearchForNotebookItemsIntent::temporalEventTriggerTypes not bound -!missing-selector! INSeat::initWithSeatSection:seatRow:seatNumber:seatingType: not bound -!missing-selector! INSeat::seatingType not bound -!missing-selector! INSeat::seatNumber not bound -!missing-selector! INSeat::seatRow not bound -!missing-selector! INSeat::seatSection not bound -!missing-selector! INSetTaskAttributeIntent::initWithTargetTask:taskTitle:status:priority:spatialEventTrigger:temporalEventTrigger: not bound -!missing-selector! INSetTaskAttributeIntent::priority not bound -!missing-selector! INSetTaskAttributeIntent::taskTitle not bound -!missing-selector! INSetTaskAttributeTemporalEventTriggerResolutionResult::initWithTemporalEventTriggerResolutionResult: not bound -!missing-selector! INSnoozeTasksIntent::all not bound -!missing-selector! INSnoozeTasksIntent::initWithTasks:nextTriggerTime:all: not bound -!missing-selector! INSnoozeTasksIntent::nextTriggerTime not bound -!missing-selector! INSnoozeTasksIntent::tasks not bound -!missing-selector! INSnoozeTasksIntentResponse::code not bound -!missing-selector! INSnoozeTasksIntentResponse::initWithCode:userActivity: not bound -!missing-selector! INSnoozeTasksIntentResponse::setSnoozedTasks: not bound -!missing-selector! INSnoozeTasksIntentResponse::snoozedTasks not bound -!missing-selector! INSnoozeTasksTaskResolutionResult::initWithTaskResolutionResult: not bound -!missing-selector! INStartCallCallCapabilityResolutionResult::initWithCallCapabilityResolutionResult: not bound -!missing-selector! INStartCallContactResolutionResult::initWithPersonResolutionResult: not bound -!missing-selector! INStartCallIntent::audioRoute not bound -!missing-selector! INStartCallIntent::callCapability not bound -!missing-selector! INStartCallIntent::contacts not bound -!missing-selector! INStartCallIntent::destinationType not bound -!missing-selector! INStartCallIntent::initWithAudioRoute:destinationType:contacts:recordTypeForRedialing:callCapability: not bound -!missing-selector! INStartCallIntent::recordTypeForRedialing not bound -!missing-selector! INStartCallIntentResponse::code not bound -!missing-selector! INStartCallIntentResponse::initWithCode:userActivity: not bound -!missing-selector! INTask::initWithTitle:status:taskType:spatialEventTrigger:temporalEventTrigger:createdDateComponents:modifiedDateComponents:identifier:priority: not bound -!missing-selector! INTask::priority not bound -!missing-selector! INTicketedEvent::category not bound -!missing-selector! INTicketedEvent::eventDuration not bound -!missing-selector! INTicketedEvent::initWithCategory:name:eventDuration:location: not bound -!missing-selector! INTicketedEvent::location not bound -!missing-selector! INTicketedEvent::name not bound -!missing-selector! INTicketedEventReservation::event not bound -!missing-selector! INTicketedEventReservation::initWithItemReference:reservationNumber:bookingTime:reservationStatus:reservationHolderName:actions:reservedSeat:event: not bound -!missing-selector! INTicketedEventReservation::reservedSeat not bound -!missing-selector! INTrainReservation::initWithItemReference:reservationNumber:bookingTime:reservationStatus:reservationHolderName:actions:reservedSeat:trainTrip: not bound -!missing-selector! INTrainReservation::reservedSeat not bound -!missing-selector! INTrainReservation::trainTrip not bound -!missing-selector! INTrainTrip::arrivalPlatform not bound -!missing-selector! INTrainTrip::arrivalStationLocation not bound -!missing-selector! INTrainTrip::departurePlatform not bound -!missing-selector! INTrainTrip::departureStationLocation not bound -!missing-selector! INTrainTrip::initWithProvider:trainName:trainNumber:tripDuration:departureStationLocation:departurePlatform:arrivalStationLocation:arrivalPlatform: not bound -!missing-selector! INTrainTrip::provider not bound -!missing-selector! INTrainTrip::trainName not bound -!missing-selector! INTrainTrip::trainNumber not bound -!missing-selector! INTrainTrip::tripDuration not bound -!missing-selector! INUpdateMediaAffinityIntent::affinityType not bound -!missing-selector! INUpdateMediaAffinityIntent::initWithMediaItems:mediaSearch:affinityType: not bound -!missing-selector! INUpdateMediaAffinityIntent::mediaItems not bound -!missing-selector! INUpdateMediaAffinityIntent::mediaSearch not bound -!missing-selector! INUpdateMediaAffinityIntentResponse::code not bound -!missing-selector! INUpdateMediaAffinityIntentResponse::initWithCode:userActivity: not bound -!missing-selector! INUpdateMediaAffinityMediaItemResolutionResult::initWithMediaItemResolutionResult: not bound -!missing-selector! INUserContext::becomeCurrent not bound -!missing-selector! INVocabulary::removeAllVocabularyStrings not bound -!missing-selector! INVocabulary::setVocabulary:ofType: not bound -!missing-selector! INVocabulary::setVocabularyStrings:ofType: not bound -!missing-selector! NSExtensionContext::intent not bound -!missing-type! INAddMediaIntent not bound -!missing-type! INAddMediaIntentResponse not bound -!missing-type! INAddMediaMediaDestinationResolutionResult not bound -!missing-type! INAddMediaMediaItemResolutionResult not bound -!missing-type! INAddTasksTargetTaskListResolutionResult not bound -!missing-type! INAddTasksTemporalEventTriggerResolutionResult not bound -!missing-type! INAirline not bound -!missing-type! INAirport not bound -!missing-type! INAirportGate not bound -!missing-type! INCallCapabilityResolutionResult not bound -!missing-type! INDeleteTasksIntent not bound -!missing-type! INDeleteTasksIntentResponse not bound -!missing-type! INDeleteTasksTaskListResolutionResult not bound -!missing-type! INDeleteTasksTaskResolutionResult not bound -!missing-type! INEnergyResolutionResult not bound -!missing-type! INEnumResolutionResult not bound -!missing-type! INFile not bound -!missing-type! INFileResolutionResult not bound -!missing-type! INFlight not bound -!missing-type! INFlightReservation not bound -!missing-type! INGetReservationDetailsIntent not bound -!missing-type! INGetReservationDetailsIntentResponse not bound -!missing-type! INLengthResolutionResult not bound -!missing-type! INLodgingReservation not bound -!missing-type! INMassResolutionResult not bound -!missing-type! INMediaAffinityTypeResolutionResult not bound -!missing-type! INMediaDestination not bound -!missing-type! INMediaDestinationResolutionResult not bound -!missing-type! INMediaItemResolutionResult not bound -!missing-type! INMediaSearch not bound -!missing-type! INMediaUserContext not bound -!missing-type! INObjectResolutionResult not bound -!missing-type! INPaymentMethodResolutionResult not bound -!missing-type! INPlaybackQueueLocationResolutionResult not bound -!missing-type! INPlaybackRepeatModeResolutionResult not bound -!missing-type! INPlayMediaMediaItemResolutionResult not bound -!missing-type! INPlayMediaPlaybackSpeedResolutionResult not bound -!missing-type! INRentalCar not bound -!missing-type! INRentalCarReservation not bound -!missing-type! INReservation not bound -!missing-type! INReservationAction not bound -!missing-type! INRestaurantReservation not bound -!missing-type! INSearchForMediaIntent not bound -!missing-type! INSearchForMediaIntentResponse not bound -!missing-type! INSearchForMediaMediaItemResolutionResult not bound -!missing-type! INSeat not bound -!missing-type! INSetTaskAttributeTemporalEventTriggerResolutionResult not bound -!missing-type! INSnoozeTasksIntent not bound -!missing-type! INSnoozeTasksIntentResponse not bound -!missing-type! INSnoozeTasksTaskResolutionResult not bound -!missing-type! INSpeedResolutionResult not bound -!missing-type! INStartCallCallCapabilityResolutionResult not bound -!missing-type! INStartCallContactResolutionResult not bound -!missing-type! INStartCallIntent not bound -!missing-type! INStartCallIntentResponse not bound -!missing-type! INTaskPriorityResolutionResult not bound -!missing-type! INTemporalEventTriggerTypeOptionsResolutionResult not bound -!missing-type! INTicketedEvent not bound -!missing-type! INTicketedEventReservation not bound -!missing-type! INTimeIntervalResolutionResult not bound -!missing-type! INTrainReservation not bound -!missing-type! INTrainTrip not bound -!missing-type! INUpdateMediaAffinityIntent not bound -!missing-type! INUpdateMediaAffinityIntentResponse not bound -!missing-type! INUpdateMediaAffinityMediaItemResolutionResult not bound -!missing-type! INURLResolutionResult not bound -!missing-type! INUserContext not bound -!missing-type! INVocabulary not bound -!missing-type! INVolumeResolutionResult not bound -!unknown-type! INParameter bound -!missing-selector! INMediaSearch::initWithMediaType:sortOrder:mediaName:artistName:albumName:genreNames:moodNames:releaseDate:reference:mediaIdentifier: not bound -## appended from unclassified file -!missing-selector! INMessage::initWithIdentifier:conversationIdentifier:content:dateSent:sender:recipients:groupName:messageType:serviceName: not bound -!missing-selector! INMessage::serviceName not bound +!unknown-native-enum! INCarAirCirculationMode bound +!unknown-native-enum! INCarAudioSource bound +!unknown-native-enum! INCarDefroster bound +!unknown-native-enum! INCarSeat bound +!unknown-native-enum! INRadioType bound +!unknown-native-enum! INRelativeReference bound +!unknown-native-enum! INRelativeSetting bound +!unknown-type! INParameter bound \ No newline at end of file diff --git a/tests/xtro-sharpie/watchOS-StoreKit.todo b/tests/xtro-sharpie/watchOS-StoreKit.todo new file mode 100644 index 0000000000..21022d08a3 --- /dev/null +++ b/tests/xtro-sharpie/watchOS-StoreKit.todo @@ -0,0 +1,122 @@ +!missing-enum! SKDownloadState not bound +!missing-enum! SKErrorCode not bound +!missing-enum! SKPaymentTransactionState not bound +!missing-enum! SKProductDiscountPaymentMode not bound +!missing-enum! SKProductDiscountType not bound +!missing-enum! SKProductPeriodUnit not bound +!missing-field! SKDownloadTimeRemainingUnknown not bound +!missing-field! SKErrorDomain not bound +!missing-field! SKReceiptPropertyIsExpired not bound +!missing-field! SKReceiptPropertyIsRevoked not bound +!missing-field! SKReceiptPropertyIsVolumePurchase not bound +!missing-pinvoke! SKTerminateForInvalidReceipt is not bound +!missing-protocol! SKPaymentQueueDelegate not bound +!missing-protocol! SKPaymentTransactionObserver not bound +!missing-protocol! SKProductsRequestDelegate not bound +!missing-protocol! SKRequestDelegate not bound +!missing-selector! +SKPayment::paymentWithProduct: not bound +!missing-selector! +SKPaymentQueue::canMakePayments not bound +!missing-selector! +SKPaymentQueue::defaultQueue not bound +!missing-selector! SKDownload::contentIdentifier not bound +!missing-selector! SKDownload::contentURL not bound +!missing-selector! SKDownload::contentVersion not bound +!missing-selector! SKDownload::error not bound +!missing-selector! SKDownload::expectedContentLength not bound +!missing-selector! SKDownload::progress not bound +!missing-selector! SKDownload::state not bound +!missing-selector! SKDownload::timeRemaining not bound +!missing-selector! SKDownload::transaction not bound +!missing-selector! SKMutablePayment::applicationUsername not bound +!missing-selector! SKMutablePayment::paymentDiscount not bound +!missing-selector! SKMutablePayment::productIdentifier not bound +!missing-selector! SKMutablePayment::quantity not bound +!missing-selector! SKMutablePayment::requestData not bound +!missing-selector! SKMutablePayment::setApplicationUsername: not bound +!missing-selector! SKMutablePayment::setPaymentDiscount: not bound +!missing-selector! SKMutablePayment::setProductIdentifier: not bound +!missing-selector! SKMutablePayment::setQuantity: not bound +!missing-selector! SKMutablePayment::setRequestData: not bound +!missing-selector! SKMutablePayment::setSimulatesAskToBuyInSandbox: not bound +!missing-selector! SKMutablePayment::simulatesAskToBuyInSandbox not bound +!missing-selector! SKPayment::applicationUsername not bound +!missing-selector! SKPayment::paymentDiscount not bound +!missing-selector! SKPayment::productIdentifier not bound +!missing-selector! SKPayment::quantity not bound +!missing-selector! SKPayment::requestData not bound +!missing-selector! SKPayment::simulatesAskToBuyInSandbox not bound +!missing-selector! SKPaymentDiscount::identifier not bound +!missing-selector! SKPaymentDiscount::initWithIdentifier:keyIdentifier:nonce:signature:timestamp: not bound +!missing-selector! SKPaymentDiscount::keyIdentifier not bound +!missing-selector! SKPaymentDiscount::nonce not bound +!missing-selector! SKPaymentDiscount::signature not bound +!missing-selector! SKPaymentDiscount::timestamp not bound +!missing-selector! SKPaymentQueue::addPayment: not bound +!missing-selector! SKPaymentQueue::addTransactionObserver: not bound +!missing-selector! SKPaymentQueue::cancelDownloads: not bound +!missing-selector! SKPaymentQueue::delegate not bound +!missing-selector! SKPaymentQueue::finishTransaction: not bound +!missing-selector! SKPaymentQueue::pauseDownloads: not bound +!missing-selector! SKPaymentQueue::removeTransactionObserver: not bound +!missing-selector! SKPaymentQueue::restoreCompletedTransactions not bound +!missing-selector! SKPaymentQueue::restoreCompletedTransactionsWithApplicationUsername: not bound +!missing-selector! SKPaymentQueue::resumeDownloads: not bound +!missing-selector! SKPaymentQueue::setDelegate: not bound +!missing-selector! SKPaymentQueue::startDownloads: not bound +!missing-selector! SKPaymentQueue::storefront not bound +!missing-selector! SKPaymentQueue::transactions not bound +!missing-selector! SKPaymentTransaction::downloads not bound +!missing-selector! SKPaymentTransaction::error not bound +!missing-selector! SKPaymentTransaction::originalTransaction not bound +!missing-selector! SKPaymentTransaction::payment not bound +!missing-selector! SKPaymentTransaction::transactionDate not bound +!missing-selector! SKPaymentTransaction::transactionIdentifier not bound +!missing-selector! SKPaymentTransaction::transactionState not bound +!missing-selector! SKProduct::contentVersion not bound +!missing-selector! SKProduct::discounts not bound +!missing-selector! SKProduct::downloadContentLengths not bound +!missing-selector! SKProduct::downloadContentVersion not bound +!missing-selector! SKProduct::introductoryPrice not bound +!missing-selector! SKProduct::isDownloadable not bound +!missing-selector! SKProduct::localizedDescription not bound +!missing-selector! SKProduct::localizedTitle not bound +!missing-selector! SKProduct::price not bound +!missing-selector! SKProduct::priceLocale not bound +!missing-selector! SKProduct::productIdentifier not bound +!missing-selector! SKProduct::subscriptionGroupIdentifier not bound +!missing-selector! SKProduct::subscriptionPeriod not bound +!missing-selector! SKProductDiscount::identifier not bound +!missing-selector! SKProductDiscount::numberOfPeriods not bound +!missing-selector! SKProductDiscount::paymentMode not bound +!missing-selector! SKProductDiscount::price not bound +!missing-selector! SKProductDiscount::priceLocale not bound +!missing-selector! SKProductDiscount::subscriptionPeriod not bound +!missing-selector! SKProductDiscount::type not bound +!missing-selector! SKProductsRequest::delegate not bound +!missing-selector! SKProductsRequest::initWithProductIdentifiers: not bound +!missing-selector! SKProductsRequest::setDelegate: not bound +!missing-selector! SKProductsResponse::invalidProductIdentifiers not bound +!missing-selector! SKProductsResponse::products not bound +!missing-selector! SKProductSubscriptionPeriod::numberOfUnits not bound +!missing-selector! SKProductSubscriptionPeriod::unit not bound +!missing-selector! SKReceiptRefreshRequest::initWithReceiptProperties: not bound +!missing-selector! SKReceiptRefreshRequest::receiptProperties not bound +!missing-selector! SKRequest::cancel not bound +!missing-selector! SKRequest::delegate not bound +!missing-selector! SKRequest::setDelegate: not bound +!missing-selector! SKRequest::start not bound +!missing-selector! SKStorefront::countryCode not bound +!missing-selector! SKStorefront::identifier not bound +!missing-type! SKDownload not bound +!missing-type! SKMutablePayment not bound +!missing-type! SKPayment not bound +!missing-type! SKPaymentDiscount not bound +!missing-type! SKPaymentQueue not bound +!missing-type! SKPaymentTransaction not bound +!missing-type! SKProduct not bound +!missing-type! SKProductDiscount not bound +!missing-type! SKProductsRequest not bound +!missing-type! SKProductsResponse not bound +!missing-type! SKProductSubscriptionPeriod not bound +!missing-type! SKReceiptRefreshRequest not bound +!missing-type! SKRequest not bound +!missing-type! SKStorefront not bound diff --git a/tools/bcl-test-importer/BCLTestImporter/BCLTestProjectGenerator.cs b/tools/bcl-test-importer/BCLTestImporter/BCLTestProjectGenerator.cs index bb56f04210..8f478e3447 100644 --- a/tools/bcl-test-importer/BCLTestImporter/BCLTestProjectGenerator.cs +++ b/tools/bcl-test-importer/BCLTestImporter/BCLTestProjectGenerator.cs @@ -711,24 +711,30 @@ namespace BCLTestImporter { using (var file = new StreamWriter (registerTypePath, false)) { // false is do not append await file.WriteAsync (registerCode); } - - var plistTemplate = Path.Combine (PlistTemplateRootPath, plistTemplateMatches[platform]); - var plist = await BCLTestInfoPlistGenerator.GenerateCodeAsync (plistTemplate, projectDefinition.Name); - var infoPlistPath = GetPListPath (generatedCodeDir, platform); - using (var file = new StreamWriter (infoPlistPath, false)) { // false is do not append - await file.WriteAsync (plist); - } - - var projectTemplatePath = Path.Combine (ProjectTemplateRootPath, projectTemplateMatches[platform]); - var info = projectDefinition.GetAssemblyInclusionInformation (GetReleaseDownload (platform), platform, true); - var generatedProject = await GenerateMacAsync (projectDefinition.Name, registerTypePath, - info, projectTemplatePath, infoPlistPath, platform); - var projectPath = GetProjectPath (projectDefinition.Name, platform); - projectPaths.Add (new BclTestProject { Name = projectDefinition.Name, Path = projectPath, XUnit = projectDefinition.IsXUnit, ExtraArgs = projectDefinition.ExtraArgs, Failure = null, TimeoutMultiplier = def.TimeoutMultiplier }); - using (var file = new StreamWriter (projectPath, false)) { // false is do not append - await file.WriteAsync (generatedProject); + string failure = null; + try { + var plistTemplate = Path.Combine (PlistTemplateRootPath, plistTemplateMatches [platform]); + var plist = await BCLTestInfoPlistGenerator.GenerateCodeAsync (plistTemplate, projectDefinition.Name); + var infoPlistPath = GetPListPath (generatedCodeDir, platform); + using (var file = new StreamWriter (infoPlistPath, false)) { // false is do not append + await file.WriteAsync (plist); + } + + var projectTemplatePath = Path.Combine (ProjectTemplateRootPath, projectTemplateMatches [platform]); + var info = projectDefinition.GetAssemblyInclusionInformation (GetReleaseDownload (platform), platform, true); + var generatedProject = await GenerateMacAsync (projectDefinition.Name, registerTypePath, + info, projectTemplatePath, infoPlistPath, platform); + using (var file = new StreamWriter (projectPath, false)) { // false is do not append + await file.WriteAsync (generatedProject); + } + failure = failure ?? info.FailureMessage; + failure = failure ?? typesPerAssembly.FailureMessage; + } catch (Exception e) { + failure = e.Message; } + projectPaths.Add (new BclTestProject { Name = projectDefinition.Name, Path = projectPath, XUnit = projectDefinition.IsXUnit, ExtraArgs = projectDefinition.ExtraArgs, Failure = failure, TimeoutMultiplier = def.TimeoutMultiplier }); + } return projectPaths; } diff --git a/tools/common/Frameworks.cs b/tools/common/Frameworks.cs index db6f9d9b16..13a729b354 100644 --- a/tools/common/Frameworks.cs +++ b/tools/common/Frameworks.cs @@ -327,6 +327,10 @@ public class Frameworks : Dictionary // the above MUST be kept in sync with simlauncher // see tools/mtouch/Makefile // please also keep it sorted to ease comparison + // + // The following tests also need to be updated: + // + // * RegistrarTest.MT4134 }; } return ios_frameworks; diff --git a/tools/common/Target.cs b/tools/common/Target.cs index 61fe9421bf..53a6dac232 100644 --- a/tools/common/Target.cs +++ b/tools/common/Target.cs @@ -108,6 +108,11 @@ namespace Xamarin.Bundler { public static string GetRealPath (string path) { + // For some reason realpath doesn't always like filenames only, and will randomly fail. + // Prepend the current directory if there's no directory specified. + if (string.IsNullOrEmpty (Path.GetDirectoryName (path))) + path = Path.Combine (Environment.CurrentDirectory, path); + var rv = realpath (path, IntPtr.Zero); if (rv != null) return rv;