Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add visionOS support #1098

Merged
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
4c69024
add compiler directives for visionOS support
stonko1994 Nov 2, 2023
0f901d9
add SPM visionOS support
stonko1994 Nov 2, 2023
d3eebfd
add CocoaPods visionOS support
stonko1994 Nov 2, 2023
8663e72
update Carthage dependencies
stonko1994 Nov 2, 2023
a594e61
add visionOS support when using the Xcode project
stonko1994 Nov 2, 2023
f0fb4c4
extend test script to include visionOS
stonko1994 Nov 2, 2023
3720617
fix cocoapods support by modifying dependencies directly
stonko1994 Nov 2, 2023
78b4e76
do not break older Swift version support by creating a swift 5.9 expl…
stonko1994 Nov 3, 2023
b86604f
skip tests on visionOS if it's not present
stonko1994 Nov 4, 2023
a8d72dd
fix build issues below Xcode 15
stonko1994 Nov 10, 2023
00d6003
skip visionOS cocoapod validation if visionOS is not present
stonko1994 Nov 10, 2023
5cf19ca
move TARGET_OS_VISION definition to umbrella header
stonko1994 Nov 14, 2023
3ff34fc
bump CwlPreconditionTesting to 2.2.0
stonko1994 Nov 14, 2023
9ed8094
Merge branch 'main' into bitmovin/feature/visionos-support
stonko1994 Dec 21, 2023
1972142
link CwlPreconditionTesting on visionOS
stonko1994 Dec 21, 2023
c08b060
add visionOS for to dependencies array
stonko1994 Dec 21, 2023
eaac8f4
Merge branch 'main' into bitmovin/feature/visionos-support
stonko1994 Jan 6, 2024
11c9bc7
Merge branch 'main' into bitmovin/feature/visionos-support
stonko1994 Jan 17, 2024
9eaf3be
add CI execution for visionOS with Xcode 15.2
stonko1994 Jan 17, 2024
6eb5881
remove visionOS testing on Xcode 15.2
stonko1994 Jan 17, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Cartfile.private
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
github "mattgallagher/CwlCatchException" ~> 2.0
github "mattgallagher/CwlPreconditionTesting" ~> 2.1
github "bitmovin-engineering/CwlPreconditionTesting" "bitmovin/main"
4 changes: 2 additions & 2 deletions Cartfile.resolved
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
github "mattgallagher/CwlCatchException" "2.0.0"
github "mattgallagher/CwlPreconditionTesting" "2.1.0"
github "bitmovin-engineering/CwlPreconditionTesting" "1a3d129278e6e1b0622fdc965fe4d0f9b6cea3e3"
github "mattgallagher/CwlCatchException" "2.1.2"
2 changes: 1 addition & 1 deletion Carthage/Checkouts/CwlCatchException/Package.swift
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// swift-tools-version:5.0
// swift-tools-version:5.5
import PackageDescription

let package = Package(
Expand Down
19 changes: 16 additions & 3 deletions Carthage/Checkouts/CwlCatchException/README.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,31 @@
# CwlCatchException

A simple Swift wrapper around an Objective-C `@try`/`@catch` statement that selectively catches Objective-C exceptions by `NSException` subtype, rethrowing if any caught exception is not the expected subtype.

Look at [CwlCatchExceptionTests.swift](https://github.com/mattgallagher/CwlCatchException/blob/master/Tests/CwlCatchExceptionTests/CwlCatchExceptionTests.swift) for syntax.

## Requirements

From version 2.0.0-beta.1, building CwlCatchException requires Swift 5 or newer and the Swift Package Manager.
From version 2.0.0-beta.1, building CwlCatchException requires Swift 5 or newer, Swift Package Manager or CocoaPods.

For use with older versions of Swift or other package managers, [use version 1.2.0 or older](https://github.com/mattgallagher/CwlCatchException/tree/1.2.0).

## Adding to your project

### Swift Package Manager

Add the following to the `dependencies` array in your "Package.swift" file:

.package(url: "https://github.com/mattgallagher/CwlCatchException.git", from: Version("2.0.0-beta.1"))
.package(url: "https://github.com/mattgallagher/CwlCatchException.git", from: Version("2.0.0"))

Or by adding `https://github.com/mattgallagher/CwlCatchException.git`, version 2.0.0 or later, to the list of Swift packages for any project in Xcode.

### CocoaPods

CocoaPods is a dependency manager for Cocoa projects. For usage and installation instructions, visit their website. To integrate CwlCatchException into your Xcode project using CocoaPods, specify it in your Podfile:

pod 'CwlCatchException', '~> 2.0'

## Thanks

Or by adding `https://github.com/mattgallagher/CwlCatchException.git`, version 2.0.0-beta.1 or later, to the list of Swift packages for any project in Xcode.
Includes contributions from @alexbaev, @dnkoutso and @ejensen.
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,47 @@ import Foundation
import CwlCatchExceptionSupport
#endif

private func catchReturnTypeConverter<T: NSException>(_ type: T.Type, block: @escaping () -> Void) -> T? {
return catchExceptionOfKind(type, block) as? T
private func catchReturnTypeConverter<Exception: NSException>(_ type: Exception.Type, block: () -> Void) -> Exception? {
return catchExceptionOfKind(type, block) as? Exception
}

extension NSException {
public static func catchException(in block: @escaping () -> Void) -> Self? {
public static func catchException(in block: () -> Void) -> Self? {
return catchReturnTypeConverter(self, block: block)
}
}

public func catchExceptionAsError<Output>(in block: (() throws -> Output)) throws -> Output {
var result: Result<Output, Error>?

let exception = NSException.catchException {
result = Result(catching: block)
}

if let exception = exception {
throw ExceptionError(exception)
}

return try result!.get()
}

// Adding conformance so that ExceptionError is fully Sendable as part of CustomNSError
extension NSException: @unchecked Sendable { }

public struct ExceptionError: CustomNSError {
public let exception: NSException
public let domain = "com.cocoawithlove.catch-exception"
public let errorUserInfo: [String: Any]

public init(_ exception: NSException) {
self.exception = exception

if let userInfo = exception.userInfo {
self.errorUserInfo = [String: Any](uniqueKeysWithValues: userInfo.map { pair in
(pair.key.description, pair.value)
})
} else {
self.errorUserInfo = [:]
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@
// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
//

#import "CwlCatchException.h"
#import <CwlCatchException.h>

NSException* __nullable catchExceptionOfKind(Class __nonnull type, void (^ __nonnull inBlock)(void)) {
NSException* __nullable catchExceptionOfKind(Class __nonnull type, void (^ NS_NOESCAPE __nonnull inBlock)(void)) {
@try {
inBlock();
} @catch (NSException *exception) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,4 @@

#import <Foundation/Foundation.h>

NSException* __nullable catchExceptionOfKind(Class __nonnull type, void (^ __nonnull inBlock)(void));
NSException* __nullable catchExceptionOfKind(Class __nonnull type, void (^ NS_NOESCAPE __nonnull inBlock)(void));
6 changes: 3 additions & 3 deletions Carthage/Checkouts/CwlPreconditionTesting/Package.swift
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// swift-tools-version:5.0
// swift-tools-version:5.5
import PackageDescription

let package = Package(
Expand All @@ -8,14 +8,14 @@ let package = Package(
.library(name: "CwlPosixPreconditionTesting", targets: ["CwlPosixPreconditionTesting"])
],
dependencies: [
.package(url: "https://github.com/mattgallagher/CwlCatchException.git", from: "2.0.0")
.package(url: "https://github.com/mattgallagher/CwlCatchException.git", from: "2.1.2")
],
targets: [
.target(
name: "CwlPreconditionTesting",
dependencies: [
.target(name: "CwlMachBadInstructionHandler"),
.product(name: "CwlCatchException")
.product(name: "CwlCatchException", package: "CwlCatchException")
]
),
.target(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

#ifdef __APPLE__
#import "TargetConditionals.h"
#if TARGET_OS_OSX || TARGET_OS_IOS
#if TARGET_OS_OSX || TARGET_OS_IOS || TARGET_OS_VISION

#import "mach_excServer.h"
#import "CwlMachBadInstructionHandler.h"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

#import <Foundation/Foundation.h>

#if TARGET_OS_OSX || TARGET_OS_IOS
#if TARGET_OS_OSX || TARGET_OS_IOS || TARGET_OS_VISION

#import <mach/mach.h>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#define __MIG_check__Request__mach_exc_subsystem__ 1

#import "mach_excServer.h"
#if TARGET_OS_OSX || TARGET_OS_IOS
#if TARGET_OS_OSX || TARGET_OS_IOS || TARGET_OS_VISION

#ifndef mig_internal
#define mig_internal static __inline__
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#ifdef __APPLE__
#import "TargetConditionals.h"
#if TARGET_OS_OSX || TARGET_OS_IOS
#if TARGET_OS_OSX || TARGET_OS_IOS || TARGET_OS_VISION

#ifndef _mach_exc_server_
#define _mach_exc_server_
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
//

#if (os(macOS) || os(iOS)) && (arch(x86_64) || arch(arm64))
#if (os(macOS) || os(iOS) || os(visionOS)) && (arch(x86_64) || arch(arm64))

import Foundation

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,13 @@
// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
//

#if (os(macOS) || os(iOS)) && (arch(x86_64) || arch(arm64))
#if (os(macOS) || os(iOS) || os(visionOS)) && (arch(x86_64) || arch(arm64))

import Foundation
import Swift

#if SWIFT_PACKAGE
import CwlCatchException
import CwlMachBadInstructionHandler
#endif

Expand Down Expand Up @@ -90,51 +91,8 @@ private struct MachContext {
/// A function for receiving mach messages and parsing the first with mach_exc_server (and if any others are received, throwing them away).
private func machMessageHandler(_ arg: UnsafeMutableRawPointer) -> UnsafeMutableRawPointer? {
let context = arg.assumingMemoryBound(to: MachContext.self).pointee
var request = request_mach_exception_raise_t()
var reply = reply_mach_exception_raise_state_t()

var handledfirstException = false
repeat { do {
// Request the next mach message from the port
request.Head.msgh_local_port = context.currentExceptionPort
request.Head.msgh_size = UInt32(MemoryLayout<request_mach_exception_raise_t>.size)
let requestSize = request.Head.msgh_size
try kernCheck { request.withMsgHeaderPointer { requestPtr in
mach_msg(requestPtr, MACH_RCV_MSG | MACH_RCV_INTERRUPT, 0, requestSize, context.currentExceptionPort, 0, UInt32(MACH_PORT_NULL))
} }

// Prepare the reply structure
reply.Head.msgh_bits = MACH_MSGH_BITS(MACH_MSGH_BITS_REMOTE(request.Head.msgh_bits), 0)
reply.Head.msgh_local_port = UInt32(MACH_PORT_NULL)
reply.Head.msgh_remote_port = request.Head.msgh_remote_port
reply.Head.msgh_size = UInt32(MemoryLayout<reply_mach_exception_raise_state_t>.size)
reply.NDR = mach_ndr_record()

if !handledfirstException {
// Use the MiG generated server to invoke our handler for the request and fill in the rest of the reply structure
guard request.withMsgHeaderPointer(in: { requestPtr in reply.withMsgHeaderPointer { replyPtr in
mach_exc_server(requestPtr, replyPtr)
} }) != 0 else { throw MachExcServer.code(reply.RetCode) }

handledfirstException = true
} else {
// If multiple fatal errors occur, don't handle subsquent errors (let the program crash)
reply.RetCode = KERN_FAILURE
}

// Send the reply
let replySize = reply.Head.msgh_size
try kernCheck { reply.withMsgHeaderPointer { replyPtr in
mach_msg(replyPtr, MACH_SEND_MSG, replySize, 0, UInt32(MACH_PORT_NULL), 0, UInt32(MACH_PORT_NULL))
} }
} catch let error as NSError where (error.domain == NSMachErrorDomain && (error.code == Int(MACH_RCV_PORT_CHANGED) || error.code == Int(MACH_RCV_INVALID_NAME))) {
// Port was already closed before we started or closed while we were listening.
// This means the controlling thread shut down.
return nil
} catch {
// Should never be reached but this is testing code, don't try to recover, just abort
fatalError("Mach message error: \(error)")
} } while true
mach_msg_server(unsafeBitCast(mach_exc_server as (@convention(c) (UnsafeMutablePointer<mach_msg_header_t>, UnsafeMutablePointer<mach_msg_header_t>) -> boolean_t), to: (@convention(c) (UnsafeMutablePointer<mach_msg_header_t>?, UnsafeMutablePointer<mach_msg_header_t>?) -> boolean_t).self), 4096, context.currentExceptionPort, MACH_MSG_OPTION_NONE)
return nil
}

/// Run the provided block. If a mach "BAD_INSTRUCTION" exception is raised, catch it and return a BadInstructionException (which captures stack information about the throw site, if desired). Otherwise return nil.
Expand Down Expand Up @@ -170,7 +128,10 @@ public func catchBadInstruction(in block: @escaping () -> Void) -> BadInstructio
}
defer {
// 7. Cleanup the mach port
mach_port_destroy(mach_task_self_, context.currentExceptionPort)
// When the reference count for the right goes down to 0, it triggers the right to be deallocated
mach_port_mod_refs(mach_task_self_, context.currentExceptionPort, MACH_PORT_RIGHT_RECEIVE, -1)
// All rights deallocated, can deallocate the name/port
mach_port_deallocate(mach_task_self_, context.currentExceptionPort)
}

try kernCheck {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
//

#if (os(macOS) || os(iOS)) && (arch(x86_64) || arch(arm64))
#if (os(macOS) || os(iOS) || os(visionOS)) && (arch(x86_64) || arch(arm64))

import Darwin

Expand Down
4 changes: 4 additions & 0 deletions Nimble.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ Pod::Spec.new do |s|
s.osx.deployment_target = "10.15"
s.tvos.deployment_target = "13.0"
s.watchos.deployment_target = "7.0"
s.visionos.deployment_target = "1.0"
s.source = { :git => "https://github.com/Quick/Nimble.git",
:tag => "v#{s.version}" }

Expand All @@ -29,6 +30,9 @@ Pod::Spec.new do |s|
s.ios.exclude_files = [
"Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPosixPreconditionTesting/CwlCatchBadInstructionPosix.swift",
]
s.visionos.exclude_files = [
"Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPosixPreconditionTesting/CwlCatchBadInstructionPosix.swift",
]
s.tvos.exclude_files = [
"Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/include/CwlMachBadInstructionHandler.h",
"Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlCatchBadInstruction.swift",
Expand Down
26 changes: 13 additions & 13 deletions Nimble.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
objectVersion = 53;
objectVersion = 55;
objects = {

/* Begin PBXAggregateTarget section */
Expand Down Expand Up @@ -165,15 +165,15 @@
CDC157912511957100EAA480 /* DSLTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC157902511957100EAA480 /* DSLTest.swift */; };
CDD80B831F2030790002CD65 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; };
CDF5C57B2647B89B0036532C /* Equal+Tuple.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDF5C57A2647B89B0036532C /* Equal+Tuple.swift */; };
CDFB6A231F7E07C700AD8CC7 /* CwlCatchException.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDFB6A1E1F7E07C600AD8CC7 /* CwlCatchException.swift */; platformFilters = (driverkit, ios, maccatalyst, macos, ); };
CDFB6A251F7E07C700AD8CC7 /* CwlCatchException.m in Sources */ = {isa = PBXBuildFile; fileRef = CDFB6A201F7E07C600AD8CC7 /* CwlCatchException.m */; platformFilters = (driverkit, ios, maccatalyst, macos, ); };
CDFB6A271F7E07C700AD8CC7 /* CwlCatchException.h in Headers */ = {isa = PBXBuildFile; fileRef = CDFB6A221F7E07C600AD8CC7 /* CwlCatchException.h */; platformFilters = (driverkit, ios, maccatalyst, macos, ); settings = {ATTRIBUTES = (Public, ); }; };
CDFB6A391F7E082500AD8CC7 /* CwlBadInstructionException.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDFB6A2A1F7E082400AD8CC7 /* CwlBadInstructionException.swift */; platformFilters = (driverkit, ios, maccatalyst, macos, ); };
CDFB6A3B1F7E082500AD8CC7 /* CwlCatchBadInstruction.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDFB6A2B1F7E082400AD8CC7 /* CwlCatchBadInstruction.swift */; platformFilters = (driverkit, ios, maccatalyst, macos, ); };
CDFB6A3F1F7E082500AD8CC7 /* CwlDarwinDefinitions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDFB6A2D1F7E082400AD8CC7 /* CwlDarwinDefinitions.swift */; platformFilters = (driverkit, ios, maccatalyst, macos, ); };
CDFB6A231F7E07C700AD8CC7 /* CwlCatchException.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDFB6A1E1F7E07C600AD8CC7 /* CwlCatchException.swift */; platformFilters = (driverkit, ios, maccatalyst, macos, xros, ); };
CDFB6A251F7E07C700AD8CC7 /* CwlCatchException.m in Sources */ = {isa = PBXBuildFile; fileRef = CDFB6A201F7E07C600AD8CC7 /* CwlCatchException.m */; platformFilters = (driverkit, ios, maccatalyst, macos, xros, ); };
CDFB6A271F7E07C700AD8CC7 /* CwlCatchException.h in Headers */ = {isa = PBXBuildFile; fileRef = CDFB6A221F7E07C600AD8CC7 /* CwlCatchException.h */; platformFilters = (driverkit, ios, maccatalyst, macos, xros, ); settings = {ATTRIBUTES = (Public, ); }; };
CDFB6A391F7E082500AD8CC7 /* CwlBadInstructionException.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDFB6A2A1F7E082400AD8CC7 /* CwlBadInstructionException.swift */; platformFilters = (driverkit, ios, maccatalyst, macos, xros, ); };
CDFB6A3B1F7E082500AD8CC7 /* CwlCatchBadInstruction.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDFB6A2B1F7E082400AD8CC7 /* CwlCatchBadInstruction.swift */; platformFilters = (driverkit, ios, maccatalyst, macos, xros, ); };
CDFB6A3F1F7E082500AD8CC7 /* CwlDarwinDefinitions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDFB6A2D1F7E082400AD8CC7 /* CwlDarwinDefinitions.swift */; platformFilters = (driverkit, ios, maccatalyst, macos, xros, ); };
CDFB6A471F7E082500AD8CC7 /* CwlMachBadInstructionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = CDFB6A341F7E082400AD8CC7 /* CwlMachBadInstructionHandler.m */; };
CDFB6A491F7E082500AD8CC7 /* CwlMachBadInstructionHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = CDFB6A361F7E082400AD8CC7 /* CwlMachBadInstructionHandler.h */; platformFilters = (driverkit, ios, maccatalyst, macos, ); settings = {ATTRIBUTES = (Public, ); }; };
CDFB6A4B1F7E082500AD8CC7 /* mach_excServer.c in Sources */ = {isa = PBXBuildFile; fileRef = CDFB6A371F7E082400AD8CC7 /* mach_excServer.c */; platformFilters = (driverkit, ios, maccatalyst, macos, ); };
CDFB6A491F7E082500AD8CC7 /* CwlMachBadInstructionHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = CDFB6A361F7E082400AD8CC7 /* CwlMachBadInstructionHandler.h */; platformFilters = (driverkit, ios, maccatalyst, macos, xros, ); settings = {ATTRIBUTES = (Public, ); }; };
CDFB6A4B1F7E082500AD8CC7 /* mach_excServer.c in Sources */ = {isa = PBXBuildFile; fileRef = CDFB6A371F7E082400AD8CC7 /* mach_excServer.c */; platformFilters = (driverkit, ios, maccatalyst, macos, xros, ); };
DA9E8C831A414BB9002633C2 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; };
DD72EC651A93874A002F7651 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; };
DD9A9A9019CF43AD00706F49 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; };
Expand Down Expand Up @@ -1254,10 +1254,10 @@
PRODUCT_NAME = Nimble;
SDKROOT = macosx;
SKIP_INSTALL = YES;
SUPPORTED_PLATFORMS = "appletvos appletvsimulator driverkit iphoneos iphonesimulator macosx watchos watchsimulator";
SUPPORTED_PLATFORMS = "appletvos appletvsimulator driverkit iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator";
SUPPORTS_MACCATALYST = YES;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
TARGETED_DEVICE_FAMILY = "1,2,3,4";
TARGETED_DEVICE_FAMILY = "1,2,3,4,7";
};
name = Debug;
};
Expand Down Expand Up @@ -1297,12 +1297,12 @@
PRODUCT_NAME = Nimble;
SDKROOT = macosx;
SKIP_INSTALL = YES;
SUPPORTED_PLATFORMS = "appletvos appletvsimulator driverkit iphoneos iphonesimulator macosx watchos watchsimulator";
SUPPORTED_PLATFORMS = "appletvos appletvsimulator driverkit iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator";
SUPPORTS_MACCATALYST = YES;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
TARGETED_DEVICE_FAMILY = "1,2,3,4";
TARGETED_DEVICE_FAMILY = "1,2,3,4,7";
};
name = Release;
};
Expand Down
Loading