示例#1
0
		protected override bool Skip (Type type)
		{
			switch (type.FullName) {
			// OS X 10.8 +
			case "MonoMac.AppKit.NSSharingService":
			case "AppKit.NSSharingService":
			case "MonoMac.Foundation.NSUserNotification":
			case "Foundation.NSUserNotification":
				return !Mac.CheckSystemVersion (10, 8);
			}

			switch (type.Namespace) {
			// OSX 10.8+
			case "MonoMac.Accounts":
			case "Accounts":
			case "MonoMac.GameKit":
			case "GameKit":
			case "MonoMac.Social":
			case "Social":
				return !Mac.CheckSystemVersion (10, 8);
			case "SceneKit":
			case "MonoMac.SceneKit":
				return !Mac.CheckSystemVersion (10, 8) || IntPtr.Size != 8;
			default:
				return false;
			}
		}
示例#2
0
        public override void SupportsSecureCoding()
        {
            if (!Mac.CheckSystemVersion(10, 8))
            {
                return;
            }

            base.SupportsSecureCoding();
        }
示例#3
0
        protected override void Dispose(NSObject obj, Type type)
        {
            switch (type.FullName)
            {
            // FIXME: those crash the application when Dispose is called
            case "MonoMac.JavaScriptCore.JSManagedValue":
            case "JavaScriptCore.JSManagedValue":
                // JSManagedValue crashes in Yosemite (b7), but not Mavericks.
                if (!Mac.CheckSystemVersion(10, 10))
                {
                    goto default;
                }
                goto case "MonoMac.ImageKit.IKScannerDeviceView"; // fallthrough

            case "MonoMac.ImageKit.IKScannerDeviceView":          // 19835
            case "ImageKit.IKScannerDeviceView":
            case "MonoMac.AppKit.NSFontPanel":                    // *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'An instance 0x11491cc00 of class NSButton was deallocated while key value observers were still registered with it.
            case "AppKit.NSFontPanel":
            case "MonoMac.AVFoundation.AVAudioRecorder":          // same on iOS
            case "AVFoundation.AVAudioRecorder":
            case "MonoMac.Foundation.NSUrlConnection":
            case "Foundation.NSUrlConnection":
            // 10.8:
            case "MonoMac.Accounts.ACAccount":                                                                                  // maybe the default .ctor is not allowed ?
            case "Accounts.ACAccount":
            case "MonoMac.Accounts.ACAccountCredential":
            case "Accounts.ACAccountCredential":
            case "MonoMac.Accounts.ACAccountStore":
            case "Accounts.ACAccountStore":
            case "MonoMac.Accounts.ACAccountType":
            case "Accounts.ACAccountType":
            case "MonoMac.CoreData.NSPersistentStoreCoordinator":
            case "CoreData.NSPersistentStoreCoordinator":
                do_not_dispose.Add(obj);
                break;

            // 10.11
            case "MonoMac.CoreImage.CIImageAccumulator":
            case "CoreImage.CIImageAccumulator":
            case "WebKit.WKNavigation":
                // crashes on El Capitan (b2) but not before
                if (!Mac.CheckSystemVersion(10, 11))
                {
                    goto default;
                }
                do_not_dispose.Add(obj);
                break;

            default:
                base.Dispose(obj, type);
                break;
            }
        }
示例#4
0
        protected override int Size(Type t, bool simd = false)
        {
            switch (t.FullName)
            {
            case "GameKit.GKGameCenterViewControllerState":
            case "AppKit.NSOpenGLContextParameter":
                // NSOpenGLContextParameter and GKGameCenterViewControllerState are anonymous enums in 10.9, but an NSInteger in 10.10.
                if (IntPtr.Size == 8 && !Mac.CheckSystemVersion(10, 10))
                {
                    return(4);
                }
                break;
            }

            return(base.Size(t, simd));
        }
示例#5
0
        protected override bool Skip(string nativeName)
        {
            switch (nativeName)
            {
            case "CIMaskedVariableBlur":             // Appears removed in 10.11 but not documented
                if (Mac.CheckSystemVersion(10, 11))
                {
                    return(true);
                }
                return(false);

            case "CICMYKHalftone":             // Renamed as CICmykHalftone
                return(true);

            default:
                return(base.Skip(nativeName));
            }
        }
        protected override bool CheckResponse(bool value, Type actualType, MethodBase method, ref string name)
        {
            var declaredType = method.DeclaringType;

            switch (name)
            {
            // NSDraggingDestination protocol
            case "concludeDragOperation:":                      // e.g. NSTokenField
            case "draggingEnded:":                              // e.g. NSMatrix
            case "draggingExited:":                             // e.g. NSTokenField
            case "draggingUpdated:":                            // e.g. NSTokenField
            case "performDragOperation:":                       // e.g. NSTokenField
            case "prepareForDragOperation:":                    // e.g. NSTokenField
            case "wantsPeriodicDraggingUpdates":                // e.g. NSBrowser - optional, [DefaultValue(true)] if it does not exists
                return(true);

            // NSDraggingSource
            case "draggedImage:beganAt:":                                       // e.g. NSTextView
            case "draggedImage:endedAt:deposited:":                             // e.g. NSTableView
            case "draggedImage:movedTo:":                                       // e.g. NSCollectionView
            case "ignoreModifierKeysWhileDragging":                             // e.g. NSTextView
            case "namesOfPromisedFilesDroppedAtDestination:":                   // e.g. NSTextView
                return(true);

            // NSAnimatablePropertyContainer
            case "animationForKey:":                            // e.g. NSViewAnimation
            case "animator":
            case "animations":
            case "setAnimations:":
                return(true);

            // NSTypeSetter - Layout Phase Interface (needs to be overridden, not really part of the provided types)
            case "willSetLineFragmentRect:forGlyphRange:usedRect:baselineOffset:":
            case "shouldBreakLineByWordBeforeCharacterAtIndex:":
            case "shouldBreakLineByHyphenatingBeforeCharacterAtIndex:":
            case "hyphenationFactorForGlyphAtIndex:":
            case "hyphenCharacterForGlyphAtIndex:":
            case "boundingBoxForControlGlyphAtIndex:forTextContainer:proposedLineFragment:glyphPosition:characterIndex:":
                return(true);

            // in NSView documentation but defined in NSClipView - no answers to call
            case "scrollClipView:toPoint:":
                return(true);

            // IKFilterBrowserPanel ??? not clear why
            case "finish:":
                return(true);

            // IKFilterUIView
            case "viewForUIConfiguration:excludedKeys:":                // [Target] on CIFilter
                return(true);

            // NSDictionaryEnumerator
            case "fileModificationDate":
            case "fileType":
            case "filePosixPermissions":
            case "fileOwnerAccountName":
            case "fileGroupOwnerAccountName":
            case "fileSystemNumber":
            case "fileSystemFileNumber":
            case "fileExtensionHidden":
            case "fileHFSCreatorCode":
            case "fileHFSTypeCode":
            case "fileIsImmutable":
            case "fileIsAppendOnly":
            case "fileCreationDate":
            case "fileOwnerAccountID":
            case "fileGroupOwnerAccountID":
                return(true);                                           // all [Target] on NSDictionary

            // SBObject
            case "get":
                return(true);

            // NSCoder - documented as available in 10.8
            case "allowedClasses":
            case "requiresSecureCoding":
                return(true);

            // NSFileManager
            case "ubiquityIdentityToken":                       // documented in 10.8
                return(true);

            // NS[Mutable]UrlRequest
            case "allowsCellularAccess":                        // documented in 10.8
            case "setAllowsCellularAccess:":                    // documented in 10.8
                return(true);

            // NSString
            case "capitalizedStringWithLocale:":                // documented in 10.8
            case "lowercaseStringWithLocale:":                  // documented in 10.8
            case "uppercaseStringWithLocale:":                  // documented in 10.8
                return(true);

            // AVVideoComposition
            case "isValidForAsset:timeRange:validationDelegate:":               // documented in 10.8
                return(true);

            // AVPlayer
            case "setRate:time:atHostTime:":         // 10.8+
            case "prerollAtRate:completionHandler:": // 10.8+
            case "cancelPendingPrerolls":            // 10.8+
            case "masterClock":                      // 10.8+
            case "setMasterClock:":                  // 10.8+
            // NSDateComponents
            case "isLeapMonth":                      // 10.8+
            case "setLeapMonth:":                    // 10.8+
            // NSFileCoordinator
            case "itemAtURL:willMoveToURL:":         // 10.8+
                return(true);                        // documented (but does not respond)

            // MonoMac.CoreImage.CIDetector (10.8+)
            case "featuresInImage:options:":
            // MonoMac.CoreImage.CIFaceFeature (10.8+)
            case "hasTrackingID":
            case "trackingID":
            case "hasTrackingFrameCount":
            case "trackingFrameCount":
            // MonoMac.CoreImage.CIImage : only in 10.8+
            case "properties":             // only documented in header files
            case "autoAdjustmentFilters":
            case "autoAdjustmentFiltersWithOptions:":
            // MonoMac.AVFoundation.AVAssetExportSession (10.8+)
            case "asset":
            // MonoMac.AVFoundation.AVAssetReaderOutput
            case "alwaysCopiesSampleData":
            case "setAlwaysCopiesSampleData:":
            // MonoMac.AVFoundation.AVAssetTrack
            case "isPlayable":
            // MonoMac.AVFoundation.AVAudioPlayer (10.8+)
            case "enableRate":
            case "setEnableRate:":
            case "rate":
            case "setRate:":
            // MonoMac.AVFoundation.AVMutableCompositionTrack
            case "insertTimeRanges:ofTracks:atTime:error:":
            // MonoMac.AVFoundation.AVPlayerItem
            case "addOutput:":
            case "removeOutput:":
            case "canPlayFastReverse":
            case "canPlayFastForward":
            case "canPlaySlowForward":
            case "canPlayReverse":
            case "canPlaySlowReverse":
            case "canStepForward":
            case "canStepBackward":
            case "outputs":
            case "timebase":
            // MonoMac.CoreAnimation.CAAnimation : only on OSX, added for SceneKit
            case "usesSceneTimeBase":
            case "setUsesSceneTimeBase:":
                if (!Mac.CheckSystemVersion(10, 8))
                {
                    return(true);
                }
                break;

            case "initWithString:":
                if (declaredType.Name == "NSTextStorage")
                {
                    return(true);
                }
                break;
            }

            switch (declaredType.Name)
            {
            case "NSUrlSession":
            case "Foundation.NSUrlSession":
                switch (name)
                {
                case "delegateQueue":
                case "sessionDescription":
                case "setSessionDescription:":
                case "delegate":
                    if (!Mac.CheckSystemVersion(10, 11))
                    {
                        return(true);
                    }
                    break;
                }
                break;

            case "NSUrlSessionTask":
            case "Foundation.NSUrlSessionTask":
                switch (name)
                {
                case "countOfBytesExpectedToReceive":
                case "countOfBytesExpectedToSend":
                case "countOfBytesReceived":
                case "countOfBytesSent":
                case "currentRequest":
                case "error":
                case "originalRequest":
                case "response":
                case "state":
                case "taskDescription":
                case "setTaskDescription:":
                case "taskIdentifier":
                case "priority":
                case "setPriority:":
                    if (!Mac.CheckSystemVersion(10, 11))
                    {
                        return(true);
                    }
                    break;
                }
                break;

            case "Foundation.NSUrlSessionStreamTask":
            case "NSUrlSessionStreamTask":
                switch (name)
                {
                case "captureStreams":
                case "closeRead":
                case "closeWrite":
                case "readDataOfMinLength:maxLength:timeout:completionHandler:":
                case "startSecureConnection":
                case "stopSecureConnection":
                case "writeData:timeout:completionHandler:":
                    if (!Mac.CheckSystemVersion(10, 11))
                    {
                        return(true);
                    }
                    break;
                }
                break;
            }

//			Console.WriteLine ("{0} {1}", declaredType, name);
            return(base.CheckResponse(value, actualType, method, ref name));
        }
        protected override bool Skip(Type type)
        {
            switch (type.FullName)
            {
            case "MonoMac.CIFilter.CIMaskedVariableBlur":             // Appears to be missing from 10.11, not documented
            case "CIFilter.CIMaskedVariableBlur":
                if (Mac.CheckSystemVersion(10, 11))
                {
                    return(true);
                }
                break;

            case "MonoMac.Foundation.NSUrlSession":
            case "Foundation.NSUrlSession":
            case "MonoMac.Foundation.NSUrlSessionTask":
            case "Foundation.NSUrlSessionTask":
            case "MonoMac.Foundation.NSUrlSessionDataTask":
            case "Foundation.NSUrlSessionDataTask":
            case "MonoMac.Foundation.NSUrlSessionUploadTask":
            case "Foundation.NSUrlSessionUploadTask":
            case "MonoMac.Foundation.NSUrlSessionDownloadTask":
            case "Foundation.NSUrlSessionDownloadTask":
            case "MonoMac.Foundation.NSUrlSessionConfiguration":
            case "Foundation.NSUrlSessionConfiguration":
                // These classes are available in 32-bit Yosemite, or 32+64bit Mavericks.
                if (IntPtr.Size == 4 && !Mac.CheckSystemVersion(10, 10))
                {
                    return(true);
                }
                break;

            case "MonoMac.AppKit.NSSharingService":
            case "AppKit.NSSharingService":
            case "MonoMac.AppKit.NSSharingServicePicker":
            case "AppKit.NSSharingServicePicker":
            case "MonoMac.Foundation.NSByteCountFormatter":
            case "Foundation.NSByteCountFormatter":
            case "MonoMac.Foundation.NSUserNotification":
            case "Foundation.NSUserNotification":
            case "MonoMac.Foundation.NSUserNotificationCenter":
            case "Foundation.NSUserNotificationCenter":
            case "MonoMac.AVFoundation.AVPlayerItemOutput":
            case "AVFoundation.AVPlayerItemOutput":
            case "MonoMac.AVFoundation.AVPlayerItemVideoOutput":
            case "AVFoundation.AVPlayerItemVideoOutput":
            case "MonoMac.Foundation.NSUuid":
            case "Foundation.NSUuid":
                if (!Mac.CheckSystemVersion(10, 8))
                {
                    return(true);
                }
                break;
            }

            switch (type.Namespace)
            {
            // OSX 10.8+
            case "MonoMac.Accounts":
            case "Accounts":
            case "MonoMac.GameKit":
            case "GameKit":
            case "MonoMac.Social":
            case "Social":
            case "MonoMac.StoreKit":
            case "StoreKit":
                if (!Mac.CheckSystemVersion(10, 8))
                {
                    return(true);
                }
                break;

            case "SceneKit":
            case "MonoMac.SceneKit":
                if (!Mac.CheckSystemVersion(10, 8) || IntPtr.Size != 8)
                {
                    return(true);
                }
                break;

            // not installed by default
            case "MonoMac.Growl":
            case "Growl":
                return(true);
            }

            return(base.Skip(type));
        }
        protected override bool Skip(Type type, string selectorName)
        {
            switch (selectorName)
            {
            case "accessibilityNotifiesWhenDestroyed":
                // The header declares this on an NSObject category but
                // it doesn't even respondsToSelector on NSView/NSCell...
                return(true);

#if !XAMCORE_4_0
            case "xamarinselector:removed:":
                return(true);
#endif
#if !XAMCORE_3_0
            case "initWithPasteboardPropertyList:ofType:":
                // This is a broken binding, but it's an abstract protocol
                // method, so there's no way to remove it without breaking
                // compat.
                return(true);
#endif
            case "waitUntilExit":
                // category, NSTask won't respond -> @interface NSTask (NSTaskConveniences)
                if (type.Name == "NSTask")
                {
                    return(true);
                }
                break;

            case "readInBackgroundAndNotifyForModes:":
            case "readInBackgroundAndNotify":
            case "readToEndOfFileInBackgroundAndNotifyForModes:":
            case "readToEndOfFileInBackgroundAndNotify":
            case "acceptConnectionInBackgroundAndNotifyForModes:":
            case "acceptConnectionInBackgroundAndNotify":
            case "waitForDataInBackgroundAndNotifyForModes:":
            case "waitForDataInBackgroundAndNotify":
                // category, NSFileHandle won't respond -> @interface NSFileHandle (NSFileHandleAsynchronousAccess)
                if (type.Name == "NSFileHandle")
                {
                    return(true);
                }
                break;

            // initWithPlayerIDs: works (valid handle) and is documented - but does not respond when queried
            case "initWithPlayerIDs:":
                if (type.Name == "GKLeaderboard")
                {
                    return(true);
                }
                break;

            // some types had NSCopying added after they were first introduced
            case "copyWithZone:":
                if (type.Name == "CBPeripheral" && !Mac.CheckSystemVersion(10, 9))
                {
                    return(true);
                }
                break;

            case "readingOptionsForType:pasteboard:":
            case "writingOptionsForType:pasteboard:":
                return(true);                // Optional selectors on NSPasteboardReading/NSPasteboardWriting
            }

            switch (type.Namespace)
            {
            // Notifications seems to follow a pattern were selectors are routed to an internal concrete type
            case "MonoMac.Foundation":
            case "Foundation":
                switch (type.Name)
                {
                // looks like it's routed to (private) NSConcreteUserNotificationCenter
                case "NSUserNotificationCenter":
                    switch (selectorName)
                    {
                    case "delegate":
                    case "setDelegate:":
                    case "scheduledNotifications":
                    case "setScheduledNotifications:":
                    case "deliveredNotifications":
                        return(true);
                    }
                    break;

                // looks like it's routed to (private) NSConcreteUserNotification
                case "NSUserNotification":
                    switch (selectorName)
                    {
                    case "title":
                    case "setTitle:":
                    case "subtitle":
                    case "setSubtitle:":
                    case "informativeText":
                    case "setInformativeText:":
                    case "actionButtonTitle":
                    case "setActionButtonTitle:":
                    case "userInfo":
                    case "setUserInfo:":
                    case "deliveryDate":
                    case "setDeliveryDate:":
                    case "deliveryTimeZone":
                    case "setDeliveryTimeZone:":
                    case "deliveryRepeatInterval":
                    case "setDeliveryRepeatInterval:":
                    case "actualDeliveryDate":
                    case "isPresented":
                    case "isRemote":
                    case "soundName":
                    case "setSoundName:":
                    case "hasActionButton":
                    case "setHasActionButton:":
                    case "activationType":
                    case "otherButtonTitle":
                    case "setOtherButtonTitle:":
                        return(true);
                    }
                    break;

                case "NSFileHandle":                 //Fails on Lion
                case "NSUrlAuthenticationChallenge":
                case "NSUrlCredential":
                case "NSUrlProtectionSpace":
                case "NSAppleEventDescriptor":
                    if (selectorName == "encodeWithCoder:" && !Mac.CheckSystemVersion(10, 8))
                    {
                        return(true);
                    }
                    break;

                case "NSValue":
                    switch (selectorName)
                    {
                    case "SCNMatrix4Value":
                    case "SCNVector3Value":
                    case "SCNVector4Value":
                    case "valueWithSCNMatrix4:":
                        if (IntPtr.Size != 8)
                        {
                            return(true);
                        }
                        break;
                    }
                    break;

                case "NSUrlSession":
                    switch (selectorName)
                    {
                    case "delegateQueue":
                    case "sessionDescription":
                    case "setSessionDescription:":
                    case "delegate":
                        if (Mac.CheckSystemVersion(10, 11))
                        {
                            return(true);
                        }
                        break;
                    }
                    break;

                case "NSUrlSessionStreamTask":
                    switch (selectorName)
                    {
                    case "captureStreams":
                    case "closeRead":
                    case "closeWrite":
                    case "readDataOfMinLength:maxLength:timeout:completionHandler:":
                    case "startSecureConnection":
                    case "stopSecureConnection":
                    case "writeData:timeout:completionHandler:":
                        if (Mac.CheckSystemVersion(10, 11))
                        {
                            return(true);
                        }
                        break;
                    }
                    break;

                case "NSUrlSessionTask":
                    switch (selectorName)
                    {
                    case "countOfBytesExpectedToReceive":
                    case "countOfBytesExpectedToSend":
                    case "countOfBytesReceived":
                    case "countOfBytesSent":
                    case "currentRequest":
                    case "error":
                    case "originalRequest":
                    case "response":
                    case "state":
                    case "taskDescription":
                    case "setTaskDescription:":
                    case "taskIdentifier":
                        if (Mac.CheckSystemVersion(10, 11))
                        {
                            return(true);
                        }
                        break;
                    }
                    break;

                case "NSUrlSessionConfiguration":
                    if (Mac.IsAtLeast(10, 11))
                    {
                        return(true);
                    }
                    break;
                }
                break;

            case "MonoMac.AppKit":
            case "AppKit":
                switch (type.Name)
                {
#if !XAMCORE_3_0                // These should be not be marked [Abstract] but can't fix w/o breaking change...
                case "NSScrollView":
                case "NSTextView":
                    switch (selectorName)
                    {
                    case "contentViewAtIndex:effectiveCharacterRange:":
                    case "didReplaceCharacters":
                    case "drawCharactersInRange:forContentView:":
                    case "rectsForCharacterRange:":
                    case "replaceCharactersInRange:withString:":
                    case "scrollRangeToVisible:":
                    case "shouldReplaceCharactersInRanges:withStrings:":
                    case "stringAtIndex:effectiveRange:endsWithSearchBoundary:":
                    case "stringLength":
                    case "allowsMultipleSelection":
                    case "isEditable":
                    case "firstSelectedRange":
                    case "isSelectable":
                    case "selectedRanges":
                    case "setSelectedRanges:":
                    case "string":
                    case "visibleCharacterRanges":
                        return(true);
                    }
                    break;
#endif
                case "NSMenuDelegate":
                    switch (selectorName)
                    {
#if !XAMCORE_3_0
                    case "menu:willHighlightItem:":
                        return(true);                        // bound
#endif
                    }
                    break;

                case "NSResponder":
                    switch (selectorName)
                    {
                    case "smartMagnifyWithEvent:":
                    case "quickLookWithEvent:":
                        if (!Mac.CheckSystemVersion(10, 8))
                        {
                            return(true);
                        }
                        break;
                    }
                    break;

                case "NSViewController":
                    switch (selectorName)
                    {
                    case "identifier":                     //
                    case "setIdentifier:":
                        // In Yosemite (but not before) NSViewController implements the NSUserInterfaceItemIdentification
                        // protocol (which brings a r/w Identifier property). We don't have any way of expressing that
                        // a type started implementing a protocol in a particular version, so just ignore these selectors.
                        if (!Mac.CheckSystemVersion(10, 10))
                        {
                            return(true);
                        }
                        break;
                    }
                    break;
                }
                break;

            // GameKit seems to follow a pattern were selectors are routed to an internal concrete type
            case "MonoMac.GameKit":
            case "GameKit":
                switch (type.Name)
                {
                case "GKTurnBasedExchange":
                    switch (selectorName)
                    {
                    case "completionDate":
                    case "data":
                    case "exchangeID":
                    case "sendDate":
                    case "timeoutDate":
                        return(true);
                    }
                    break;

                case "GKTurnBasedExchangeReply":
                    switch (selectorName)
                    {
                    case "data":
                    case "replyDate":
                        return(true);
                    }
                    break;

                // looks like it's routed to (private) GKDialogController_Concrete
                case "GKDialogController":
                    switch (selectorName)
                    {
                    case "parentWindow":
                    case "setParentWindow:":
                        return(true);
                    }
                    break;

                // looks like it's routed to (private) GKVoiceChat_Concrete
                case "GKVoiceChat":
                    switch (selectorName)
                    {
                    case "start":
                    case "stop":
                    case "setMute:forPlayer:":
                    case "name":
                    case "isActive":
                    case "setActive:":
                    case "volume":
                    case "setVolume:":
                    case "playerStateUpdateHandler":
                    case "setPlayerStateUpdateHandler:":
                    case "playerIDs":
                        return(true);
                    }
                    break;

                // looks like it's routed to (private) GKLeaderboard_Concrete
                case "GKLeaderboard":
                    switch (selectorName)
                    {
                    case "loadScoresWithCompletionHandler:":
                    case "timeScope":
                    case "setTimeScope:":
                    case "playerScope":
                    case "setPlayerScope:":
                    case "maxRange":
                    case "category":
                    case "setCategory:":
                    case "title":
                    case "range":
                    case "setRange:":
                    case "scores":
                    case "localPlayerScore":
                    case "groupIdentifier":
                    case "setGroupIdentifier:":
                        return(true);
                    }
                    break;

                // looks like it's routed to (private) GKLeaderboard_Concrete
                case "GKLocalPlayer":
                    switch (selectorName)
                    {
                    case "authenticateWithCompletionHandler:":
                    case "loadDefaultLeaderboardCategoryIDWithCompletionHandler:":
                    case "setDefaultLeaderboardCategoryID:completionHandler:":
                    case "authenticateHandler":
                    case "setAuthenticateHandler:":
                    case "loadFriendsWithCompletionHandler:":
                    case "isAuthenticated":
                        return(true);
                    }
                    break;

                // looks like it's routed to (private) GKMatch_Concrete
                case "GKMatch":
                    switch (selectorName)
                    {
                    case "sendData:toPlayers:withDataMode:error:":
                    case "sendDataToAllPlayers:withDataMode:error:":
                    case "disconnect":
                    case "voiceChatWithName:":
                    case "playerIDs":
                    case "delegate":
                    case "setDelegate:":
                    case "expectedPlayerCount":
                        return(true);
                    }
                    break;

                // looks like it's routed to (private) GKMatchmater_Concrete
                case "GKMatchmaker":
                    switch (selectorName)
                    {
                    case "inviteHandler":
                    case "setInviteHandler:":
                    case "findMatchForRequest:withCompletionHandler:":
                    case "findPlayersForHostedMatchRequest:withCompletionHandler:":
                    case "addPlayersToMatch:matchRequest:completionHandler:":
                    case "cancel":
                    case "queryPlayerGroupActivity:withCompletionHandler:":
                    case "queryActivityWithCompletionHandler:":
                        return(true);
                    }
                    break;
                }
                break;

            // Gone in Mavericks
            case "MonoMac.StoreKit":
            case "StoreKit":
                switch (type.Name)
                {
                case "SKPayment":
                case "SKMutablePayment":
                    switch (selectorName)
                    {
                    case "paymentWithProductIdentifier:":
                        if (Mac.CheckSystemVersion(10, 9))
                        {
                            return(true);
                        }
                        break;
                    }
                    break;
                }
                break;

            case "MonoMac.PdfKit":             // Bug 20232
            case "PdfKit":
                switch (type.Name)
                {
                case "PdfBorder":                 // Fails on Lion
                case "PdfAnnotation":
                    if (selectorName == "encodeWithCoder:" && !Mac.CheckSystemVersion(10, 8))
                    {
                        return(true);
                    }
                    break;

                case "PdfView":
                    switch (selectorName)
                    {
#if !XAMCORE_3_0
                    case "menu:willHighlightItem:":
                        return(true);
#endif
                    }
                    break;
                }
                break;

            case "MonoMac.SceneKit":
            case "SceneKit":
                switch (type.Name)
                {
                case "SCNGeometryElement":
                    // Ignore on 10.8 where SCNGeometryPrimitiveType is int (32), but
                    // on 10.9+ is NSInteger/nint (32/64). SceneKit is next to useless
                    // on 10.8 anyway. -abock
                    if (selectorName == "primitiveType" && Mac.CheckSystemVersion(10, 8))
                    {
                        return(true);
                    }
                    // fall through
                    goto case "SCNCamera";

                case "SCNCamera":
                case "SCNGeometry":
                case "SCNGeometrySource":
                case "SCNLight":
                case "SCNMaterial":
                case "SCNMaterialProperty":
                case "SCNNode":
                case "SCNProgram":
                case "SCNScene":
                case "SCNMorpher":
                case "SCNSkinner":
                case "SCNConstraint":
                case "SCNLevelOfDetail":
                    // The NSSecureCoding protocol was added to these types in Yosemite,
                    // and we can't (yet?) describe "type added protocol P in version X.Y"
                    // with our AvailabilityAttribute, so do this check manually.
                    if (selectorName == "encodeWithCoder:" && !Mac.CheckSystemVersion(10, 10))
                    {
                        return(true);
                    }
                    break;
                }

                switch (type.Name)
                {
                case "SCNGeometry":
                    // SCNGeometry added the SCNShadable protocol in 10.9, which brings in the 'program' selector.
                    switch (selectorName)
                    {
                    case "program":
                    case "setProgram:":
                        if (!Mac.CheckSystemVersion(10, 9))
                        {
                            return(true);
                        }
                        break;
                    }
                    break;
                }
                break;
            }
            return(base.Skip(type, selectorName));
        }
示例#9
0
        protected override bool Skip(Type type, MethodBase method, string selector)
        {
            switch (type.Namespace)
            {
            case "MonoMac.GameKit":
            case "GameKit":
            case "MonoMac.StoreKit":
            case "StoreKit":
                if (!Mac.CheckSystemVersion(10, 8))
                {
                    return(true);
                }
                break;

            case "MonoMac.SceneKit":
            case "SceneKit":
                // SceneKit is half-baked at best, and they broke compatibility significantly
                // from Mountain Lion to Mavericks, so just ignore all problems there.
                if (!Mac.CheckSystemVersion(10, 9))
                {
                    return(true);
                }
                break;
            }

            // Bug 20232 - This is a hack.
            if (selector == "geometryElementWithData:primitiveType:primitiveCount:bytesPerIndex:")
            {
                return(true);
            }

            switch (type.Name)
            {
            case "AVPlayerItemOutput":
            case "AVPlayerItemVideoOutput":
            case "NSSharingService":
            case "NSSharingServicePicker":
            case "NSUserNotification":
            case "NSUserNotificationCenter":
            case "NSUuid":
                return(!Mac.CheckSystemVersion(10, 8));

            case "CALayer":
            case "CAEmitterLayer":
            case "CAGradientLayer":
            case "CAOpenGLLayer":
            case "CAReplicatorLayer":
            case "CAScrollLayer":
            case "CAShapeLayer":
            case "CATextLayer":
            case "CATiledLayer":
            case "CATransformLayer":
            case "QTCaptureLayer":
            case "QTMovieLayer":
            case "QCCompositionLayer":
            case "AVCaptureVideoPreviewLayer":
            case "AVPlayerLayer":
            case "SCNLayer":
                switch (selector)
                {
                // CAGradientLayer 'instance MonoMac.CoreAnimation.CAConstraint[] get_Constraints()' selector: constraints == @?@:
                case "constraints":
                // CAGradientLayer 'instance Void set_Constraints(MonoMac.CoreAnimation.CAConstraint[])' selector: setConstraints: == v@:@?
                case "setConstraints:":
                    return(true);
                }
                break;

            case "SCNSkinner":
                return(!Mac.CheckSystemVersion(10, 9));

            case "NSGradient":
                switch (selector)
                {
                case "initWithColorsAndLocations:":                 // variable length parameters ...
                case "initWithColors:atLocations:colorSpace:":      // void * -> nfloat [] (internal)
                    return(true);
                }
                break;

            case "AVAudioIONode":
            case "AVAudioUnit":
                switch (selector)
                {
                case "audioUnit":                 // ^{ComponentInstanceRecord=[1l], tested to work in an apitest
                    return(true);
                }
                break;
            }
            return(base.Skip(type, method, selector));
        }
示例#10
0
        // only handle exception here (to return true) otherwise call base to deal with it
        // `caller` is provided to make it easier to detect "special" cases
        protected override bool Check(char encodedType, Type type)
        {
            switch (encodedType)
            {
            case 'i':
                switch (type.FullName)
                {
                case "System.nuint":
                case "System.UInt32":
                    // sign-ness mis-binding, not critical
                    // Signature failure in MonoMac.AppKit.NSViewController presentViewController:asPopoverRelativeToRect:ofView:preferredEdge:behavior: Parameter 'preferredEdge' (#4) is encoded as 'i' and bound as 'System.UInt32'
                    return(true);

                case "GameKit.GKGameCenterViewControllerState":
                case "AppKit.NSOpenGLContextParameter":
                    // NSOpenGLContextParameter and GKGameCenterViewControllerState are anonymous enums in 10.9, but an NSInteger in 10.10.
                    if (IntPtr.Size == 8 && !Mac.CheckSystemVersion(10, 10))
                    {
                        return(true);
                    }
                    break;
                }
                break;

            // unsigned 32 bits
            case 'I':
                switch (type.FullName)
                {
                case "System.Int32":
                    // sign-ness mis-binding, several of them (not critical)
                    // NSActionCell 'instance Int32 get_MnemonicLocation()' selector: mnemonicLocation == I8@0:4
                    // NSPathCell 'instance Int32 get_MnemonicLocation()' selector: mnemonicLocation == I8@0:4
                    // SCNText 'instance Void InsertMaterial(MonoMac.SceneKit.SCNMaterial, Int32)' selector: insertMaterial:atIndex: == v16@0:4@8I12
                    return(true);
                }
                break;

            // unsigned 32 bits
            case 'L':
                switch (type.FullName)
                {
                // sign-ness mis-binding (not critical) e.g.
                // CAMediaTimingFunction 'instance Void GetControlPointAtIndex(Int32, IntPtr)' selector: getControlPointAtIndex:values: == v16@0:4L8[2f]12
                case "System.Int32":
                    return(true);
                }
                break;

            // unsigned 64 bits
            case 'Q':
                switch (type.FullName)
                {
                // sign-ness mis-binding (not critical) e.g.
                // NSEvent 'instance Int64 get_UniqueID()' selector: uniqueID == Q8@0:4
                case "System.Int64":
                    return(true);
                }
                break;
            }
            return(base.Check(encodedType, type));
        }
示例#11
0
		protected override bool Skip (PropertyInfo p)
		{
			switch (p.DeclaringType.Name) {
			case "NSUrlSessionDownloadDelegate":
				switch (p.Name) {
				case "TaskResumeDataKey":
					// This field was introduced as 64-bit only in Mavericks, and 32+64bits in Yosemite. We can't
					// express that with our AvailabilityAttribute, we set it as available (for all architectures, since
					// we can't distinguish them) starting with Mavericks.
					if (Mac.Is32BitMavericks)
						return true;
					break;
				}
				break;
			}

			switch (p.Name) {
			// NSTableView
			case "RowViewKey":
				return true;
			// NSBitmapImageRep
			case "CompressionMethod":
			case "CompressionFactor":
			case "DitherTransparency":
				return true;
			// CIImage 10.8+
			case "AutoAdjustFeaturesKey":	// kCIImageAutoAdjustFeatures - documented in 10.8
			case "AutoAdjustRedEyeKey":
			case "AutoAdjustEnhanceKey":
			case "CIImagePropertiesKey":
				return true;
			// CIImage
			case "CIImageColorSpaceKey":
				return true; // returns null but documented prior to 10.8
			// CLLocation 10.8+
			case "ErrorUserInfoAlternateRegionKey":		// kCLErrorUserInfoAlternateRegionKey also returns null on iOS
				return true;
			// NSUrl 10.8+
			case "PathKey":
				return !Mac.CheckSystemVersion (10, 8);
			// AVMediaCharacteristic 10.8+
			case "IsMainProgramContent":
			case "IsAuxiliaryContent":
			case "ContainsOnlyForcedSubtitles":
			case "TranscribesSpokenDialogForAccessibility":
			case "DescribesMusicAndSoundForAccessibility":
			case "DescribesVideoForAccessibility":
				return !Mac.CheckSystemVersion (10, 8);
			// AVVideo 10.8+
			case "ProfileLevelH264Main32":
				return !Mac.CheckSystemVersion (10, 8);
			// AVMetadata 10.8+
			case "QuickTimeUserDataKeyTaggedCharacteristic":
				return !Mac.CheckSystemVersion (10, 8);
			// CIDetector
			case "TypeFace":	// CIDetectorTypeFace - documented as available in 10.7
			case "Accuracy":	// CIDetectorAccuracy 10.7
			case "AccuracyLow":	// CIDetectorAccuracyLow 10.7
			case "AccuracyHigh":	// CIDetectorAccuracyHigh 10.7
				return true; 
			// CIDetector
			case "ImageOrientation":		// documented in 10.8
			case "Tracking":
			case "MinFeatureSize":
				return true; 
			// CGImageProperties - all new (10.7) values are missing (from pre-6 iOS too iirc)
			case "ExifCameraOwnerName":	// kCGImagePropertyExifCameraOwnerName
			case "ExifBodySerialNumber":	// kCGImagePropertyExifBodySerialNumber
			case "ExifLensSpecification":	// kCGImagePropertyExifLensSpecification
			case "ExifLensMake":		// kCGImagePropertyExifLensMake
			case "ExifLensModel":		// kCGImagePropertyExifLensModel
			case "ExifLensSerialNumber":	// kCGImagePropertyExifLensSerialNumber
				return true;
			// ACErrorDomain is _listed_ in the 10.8 Accounts Changes but like iOS it's not documented anywhere else (and does not seems to exists)
			case "ErrorDomain":
			// ACAccountStoreDidChangeNotification - documented in 10.8
			case "ChangeNotification":
			// ACAccountType - documented in 10.8
			case "Twitter":				// ACAccountTypeIdentifierTwitter
			case "SinaWeibo":
			case "Facebook":
			case "AppId":				// ACFacebookAppIdKey
			case "Permissions":			// ACFacebookPermissionsKey
			case "Audience":			// *** NOT documented in 10.8 - but part of our API enhancement
			case "Everyone":			// ^ MonoMac.Accounts.ACFacebookAudienceValue.Everyone
			case "Friends":				// ^ MonoMac.Accounts.ACFacebookAudienceValue.Friends
			case "OnlyMe":				// ^ MonoMac.Accounts.ACFacebookAudienceValue.OnlyMe
				return true;
			// MonoMac.CoreServices.CFHTTPMessage - document in 10.9 but returns null
			case "_AuthenticationSchemeOAuth1":
				return true;
			default:
				return base.Skip (p);
			}
		}
示例#12
0
        protected override bool Skip(Type type, string protocolName)
        {
            switch (protocolName)
            {
            case "NSSecureCoding":
                switch (type.Name)
                {
                case "NSCachedImageRep":                 // Not declared in header file
                case "NSCIImageRep":
                case "NSCustomImageRep":
                case "NSEPSImageRep":
                case "NSBitmapImageRep":
                case "NSImageRep":
                case "NSPdfImageRep":
                case "AVAssetTrackSegment":       // Not declared in header file
                case "AVComposition":             // Not declared in header file
                case "AVMutableComposition":      // Not declared in header file
                case "AVCompositionTrackSegment": // Not declared in header file
                case "MKMapSnapshotOptions":      // Not declared in header file
                case "NSTextTab":                 // Not declared in header file
                    return(true);

                default:
                    // CIFilter started implementing NSSecureCoding in 10.11
                    if (!Mac.CheckSystemVersion(10, 11) && (type == typeof(CIFilter) || type.IsSubclassOf(typeof(CIFilter))))
                    {
                        return(true);
                    }
                    break;
                }
                break;

            case "NSCopying":
                switch (type.Name)
                {
                case "DomNodeFilter":           // Not declared in header file
                case "MKDirectionsRequest":     // Not declared in header file
                case "EKObject":                // Not declared in header file
                case "EKCalendarItem":          // Not declared in header file
                case "EKSource":                // Not declared in header file
                case "EKCalendar":              // Not declared in header file
                case "EKEvent":                 // Not declared in header file
                case "EKReminder":              // Not declared in header file
                case "ACAccount":               // Not declared in header file
                    return(true);
                }
                break;

            case "NSMutableCopying":
                switch (type.Name)
                {
                case "EKObject":                // Not declared in header file
                case "EKCalendarItem":          // Not declared in header file
                case "EKSource":                // Not declared in header file
                case "EKStructuredLocation":    // Not declared in header file
                case "EKAlarm":                 // Not declared in header file
                case "EKCalendar":              // Not declared in header file
                case "EKEvent":                 // Not declared in header file
                case "EKParticipant":           // Not declared in header file
                case "EKRecurrenceRule":        // Not declared in header file
                case "EKReminder":              // Not declared in header file
                    return(true);
                }
                break;

            case "NSCoding":
                switch (type.Name)
                {
                case "EKObject":                  // Not declared in header file
                case "EKCalendarItem":            // Not declared in header file
                case "EKSource":                  // Not declared in header file
                case "EKStructuredLocation":      // Not declared in header file
                case "EKAlarm":                   // Not declared in header file
                case "EKCalendar":                // Not declared in header file
                case "EKEvent":                   // Not declared in header file
                case "EKParticipant":             // Not declared in header file
                case "EKRecurrenceRule":          // Not declared in header file
                case "EKReminder":                // Not declared in header file
                case "AVAssetTrackSegment":       // Not declared in header file
                case "AVComposition":             // Not declared in header file
                case "AVMutableComposition":      // Not declared in header file
                case "AVCompositionTrackSegment": // Not declared in header file
                case "MKMapSnapshotOptions":      // Not declared in header file
                    return(true);
                }
                break;

            case "NSWindowRestoration":
                switch (type.Name)
                {
                case "NSDocumentController":
                    // There's a category that implements the NSWindowRestoration protocol for NSDocumentController,
                    // but that apparently doesn't make conformsToProtocol: return true.
                    // '@interface NSDocumentController (NSWindowRestoration) <NSWindowRestoration>'
                    return(true);
                }
                break;

            case "NSUserInterfaceItemIdentification":
                // NSViewController started implementing NSUserInterfaceItemIdentification in 10.10
                if (!Mac.CheckSystemVersion(10, 10) && (type == typeof(NSViewController) || type.IsSubclassOf(typeof(NSViewController))))
                {
                    return(true);
                }

                break;

            case "NSMenuDelegate":
                switch (type.Name)
                {
                case "PdfView":
                    if (!Mac.CheckSystemVersion(10, 10))
                    {
                        return(true);
                    }
                    break;
                }
                break;

            case "NSTextFinderClient":             // Not listed in header, nor conformsToProtocol, but works in sample. But it just repondsToSelectors
                if (type.Name == "NSTextView")
                {
                    return(true);
                }
                break;

#if !XAMCORE_4_0
            case "NSDraggingInfo":
                return(true);                // We have to keep the type to maintain backwards compatibility.
#endif
            }

            switch (type.Name)
            {
#if !XAMCORE_3_0
            case "NSRemoteSavePanel":
            case "NSRemoteOpenPanel":
                return(true);                // These two classes don't show up in any documentation.
#endif
            }

            switch (type.Namespace)
            {
            case "MonoMac.SceneKit":
            case "SceneKit":
                return(IntPtr.Size == 4);                // 64bits should be fine
            }

            return(base.Skip(type, protocolName));
        }
示例#13
0
        protected override bool Skip(Type type)
        {
            switch (type.FullName)
            {
            // These should be DisableDefaultCtor but can't due to backward compat
            case "MonoMac.EventKit.EKParticipant":
            case "EventKit.EKParticipant":
            case "XamCore.CoreImage.CISampler":
            case "CoreImage.CISampler":
                return(true);

            // OSX 10.8+
            case "MonoMac.AppKit.NSSharingService":
            case "AppKit.NSSharingService":
            case "MonoMac.AppKit.NSSharingServicePicker":
            case "AppKit.NSSharingServicePicker":
            case "MonoMac.Foundation.NSUserNotification":
            case "Foundation.NSUserNotification":
            case "MonoMac.Foundation.NSUserNotificationCenter":
            case "Foundation.NSUserNotificationCenter":
            case "MonoMac.AVFoundation.AVPlayerItemVideoOutput":
            case "AVFoundation.AVPlayerItemVideoOutput":
            case "MonoMac.Foundation.NSUuid":
            case "Foundation.NSUuid":
                if (!Mac.CheckSystemVersion(10, 8))
                {
                    return(true);
                }
                break;

            // Native exception coming from [NSWindow init] which calls
            // [NSWindow initWithContentRect:styleMask:backing:defer]
            case "MonoMac.AppKit.NSWindow":
            case "AppKit.NSWindow":
                return(true);

#if !XAMCORE_2_0
            case "MonoMac.AppKit.NSToolbar":               // mono[10518:626783] *** -[__NSDictionaryM removeObjectForKey:]: key cannot be nil
            case "MonoMac.SceneKit.SCNRenderer":           // -[SCNRenderer init]: unrecognized selector sent to instance 0x7c6446c0
            case "MonoMac.SceneKit.SCNLookAtConstraint":
                return(true);
#endif
            case "MonoMac.Foundation.NSUrlSession":
            case "Foundation.NSUrlSession":
            case "MonoMac.Foundation.NSUrlSessionTask":
            case "Foundation.NSUrlSessionTask":
            case "MonoMac.Foundation.NSUrlSessionDataTask":
            case "Foundation.NSUrlSessionDataTask":
            case "MonoMac.Foundation.NSUrlSessionUploadTask":
            case "Foundation.NSUrlSessionUploadTask":
            case "MonoMac.Foundation.NSUrlSessionDownloadTask":
            case "Foundation.NSUrlSessionDownloadTask":
            case "MonoMac.Foundation.NSUrlSessionConfiguration":
            case "Foundation.NSUrlSessionConfiguration":
                // These types were introduced as 64-bit only in Mavericks, and 32+64bits in Yosemite. We can't
                // express that with our AvailabilityAttribute, we set it as available (for all architectures, since
                // we can't distinguish them) starting with Mavericks.
                if (Mac.Is32BitMavericks)
                {
                    return(true);
                }
                break;

            case "GLKit.GLKSkyboxEffect":
                // Crashes inside libGL.dylib, most likely because something hasn't been initialized yet, because
                // I can reproduce in an Xcode project if I put [[GLKSkyboxEffect alloc] init]; in main, but it doesn't
                // crash in applicationDidFinishLaunching.
                //
                //  frame #0: 0x00007fff8d570db1 libGL.dylib`glGetError + 13
                //  frame #1: 0x0000000100025542 GLKit`-[GLKEffect initWithPropertyArray:] + 1142
                //  frame #2: 0x0000000100022c2d GLKit`-[GLKSkyboxEffect init] + 493
                //
                if (IntPtr.Size == 8)
                {
                    return(true);
                }
                break;

#if !XAMCORE_3_0
            case "SpriteKit.SKView":
                // Causes a crash later. Filed as radar://18440271.
                // Apple said they won't fix this ('init' isn't a designated initializer)
                if (IntPtr.Size == 8)
                {
                    return(true);
                }
                break;
#endif

            case "MonoMac.AppKit.NSSpeechRecognizer":
            case "AppKit.NSSpeechRecognizer":
                // Makes OSX put up "a download is required for speech recognition" dialog.
                return(true);

            case "MonoMac.Foundation.NSUserActivity":
            case "Foundation.NSUserActivity":
                // Crashes by default:
                // Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Caller did not provide an activityType, and this process does not have a NSUserActivityTypes in its Info.plist.
                // but since it looks like the constructor is usable with the proper Info.plist, we can't remove it.
                return(true);
            }

            switch (type.Namespace)
            {
            // OSX 10.8+
            case "MonoMac.Accounts":
            case "Accounts":
            case "MonoMac.GameKit":
            case "GameKit":
            case "MonoMac.Social":
            case "Social":
            case "MonoMac.StoreKit":
            case "StoreKit":
                if (!Mac.CheckSystemVersion(10, 8))
                {
                    return(true);
                }
                break;

            case "SceneKit":
            case "MonoMac.SceneKit":
                if (!Mac.CheckSystemVersion(10, 8) || IntPtr.Size != 8)
                {
                    return(true);
                }
                break;
            }

            return(base.Skip(type));
        }