Adding support for rust core, native shell, using Crux
This commit is contained in:
parent
9adf1410a3
commit
ce25bbbfd2
BIN
.bin/rust-1.87.0/cargo-xcode/=1.7.0/bin/cargo-xcode
Executable file
BIN
.bin/rust-1.87.0/cargo-xcode/=1.7.0/bin/cargo-xcode
Executable file
Binary file not shown.
2
.cargo/config.toml
Normal file
2
.cargo/config.toml
Normal file
@ -0,0 +1,2 @@
|
||||
[alias]
|
||||
xcode = ["bin", "cargo-xcode"]
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
||||
/target/
|
||||
/shared_types/generated/
|
||||
|
||||
1414
Cargo.lock
generated
Normal file
1414
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
19
Cargo.toml
19
Cargo.toml
@ -3,4 +3,21 @@ name = "audio_always_works"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
[workspace]
|
||||
members = ["shared", "shared_types"]
|
||||
resolver = "1"
|
||||
|
||||
[workspace.package]
|
||||
authors = ["Pascal de Vink"]
|
||||
edition = "2021"
|
||||
repository = "https://gitea.home.privatevoid.nl/pascaldevink/audio_always_works"
|
||||
license = "AGPL-3.0-or-later"
|
||||
rust-version = "1.80"
|
||||
|
||||
[workspace.dependencies]
|
||||
anyhow = "1.0.98"
|
||||
crux_core = "0.15.0"
|
||||
serde = "1.0.219"
|
||||
|
||||
[workspace.metadata.bin]
|
||||
cargo-xcode = { version = "=1.7.0" }
|
||||
|
||||
253
audio_always_works.xcodeproj/project.pbxproj
Normal file
253
audio_always_works.xcodeproj/project.pbxproj
Normal file
@ -0,0 +1,253 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
/* generated with cargo-xcode 1.7.0 */
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 53;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
CA002181887C121ACC594768 /* Cargo.toml in Sources */ = {isa = PBXBuildFile; fileRef = CAF97371734F3EF4668187A5 /* Cargo.toml */; settings = {COMPILER_FLAGS = "--bin 'audio_always_works'"; }; };
|
||||
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXBuildRule section */
|
||||
CAF47371734FAC6C1400ACA8 /* PBXBuildRule */ = {
|
||||
isa = PBXBuildRule;
|
||||
compilerSpec = com.apple.compilers.proxy.script;
|
||||
dependencyFile = "$(DERIVED_FILE_DIR)/$(CARGO_XCODE_TARGET_ARCH)-$(EXECUTABLE_NAME).d";
|
||||
filePatterns = "*/Cargo.toml";
|
||||
fileType = pattern.proxy;
|
||||
inputFiles = (
|
||||
);
|
||||
isEditable = 0;
|
||||
name = "Cargo project build";
|
||||
outputFiles = (
|
||||
"$(OBJECT_FILE_DIR)/$(CARGO_XCODE_TARGET_ARCH)-$(EXECUTABLE_NAME)",
|
||||
);
|
||||
script = "# generated with cargo-xcode 1.7.0\nset -xeu;\nexport PATH=\"$HOME/.cargo/bin:$PATH:/usr/local/bin:/opt/homebrew/bin\";\n\nif [ \"${IS_MACCATALYST-NO}\" = YES ]; then\n CARGO_XCODE_TARGET_OS=ios-macabi\nfi\nCARGO_XCODE_TARGET_TRIPLE=\"${CARGO_XCODE_TARGET_ARCH}-apple-${CARGO_XCODE_TARGET_OS}\"\nif [ \"$CARGO_XCODE_TARGET_OS\" != darwin ]; then\n export PATH=\"${PATH/\\/Contents\\/Developer\\/Toolchains\\/XcodeDefault.xctoolchain\\/usr\\/bin:/xcode-provided-ld-cant-link-lSystem-for-the-host-build-script:}\"\nfi\nif [ \"$CARGO_XCODE_BUILD_PROFILE\" == release ]; then\n OTHER_INPUT_FILE_FLAGS=\"${OTHER_INPUT_FILE_FLAGS} --release\"\nfi\n\nif [ \"$ACTION\" = clean ]; then\n cargo clean --verbose --manifest-path=\"$SCRIPT_INPUT_FILE\" ${OTHER_INPUT_FILE_FLAGS} --target=\"${CARGO_XCODE_TARGET_TRIPLE}\";\n rm -f \"$SCRIPT_OUTPUT_FILE_0\"\n exit 0\nfi\ncargo build --verbose --manifest-path=\"$SCRIPT_INPUT_FILE\" --features=\"${CARGO_XCODE_FEATURES:-}\" ${OTHER_INPUT_FILE_FLAGS} --target=\"${CARGO_XCODE_TARGET_TRIPLE}\" || {\n if command -v rustup &> /dev/null; then\n if ! rustup target list --installed | grep -Eq \"${CARGO_XCODE_TARGET_TRIPLE}\"; then\n echo >&2 \"warning: this build requires rustup toolchain for $CARGO_XCODE_TARGET_TRIPLE, but it isn't installed (will try rustup next)\"\n rustup target add \"${CARGO_XCODE_TARGET_TRIPLE}\" || echo >&2 \"warning: can't install $CARGO_XCODE_TARGET_TRIPLE\"\n fi\n fi\n echo >&2 \"error: cargo build failed\"; exit 1; }\n\n# it's too hard to explain Cargo's actual exe path to Xcode build graph, so hardlink to a known-good path instead\nBUILT_SRC=\"${CARGO_TARGET_DIR}/${CARGO_XCODE_TARGET_TRIPLE}/${CARGO_XCODE_BUILD_PROFILE}/${CARGO_XCODE_CARGO_FILE_NAME}\"\nln -f -- \"$BUILT_SRC\" \"$SCRIPT_OUTPUT_FILE_0\" || { echo >&2 \"can't hardlink $BUILT_SRC to $SCRIPT_OUTPUT_FILE_0\"; exit 1; }\n\n# cargo generates a dep file, but for its own path, so append our rename to it\nDEP_FILE_SRC=\"${CARGO_TARGET_DIR}/${CARGO_XCODE_TARGET_TRIPLE}/${CARGO_XCODE_BUILD_PROFILE}/${CARGO_XCODE_CARGO_DEP_FILE_NAME}\"\nif [ -f \"$DEP_FILE_SRC\" ]; then\n DEP_FILE_DST=\"${DERIVED_FILE_DIR}/${CARGO_XCODE_TARGET_ARCH}-${EXECUTABLE_NAME}.d\"\n cp -f \"$DEP_FILE_SRC\" \"$DEP_FILE_DST\" || { echo >&2 \"can't copy $DEP_FILE_SRC to $DEP_FILE_DST\"; exit 1; }\n\n echo >> \"$DEP_FILE_DST\" \"${SCRIPT_OUTPUT_FILE_0/ /\\\\ /}: ${BUILT_SRC/ /\\\\ /}\"\nfi\n\n# lipo script needs to know all the platform-specific files that have been built\n# archs is in the file name, so that paths don't stay around after archs change\n# must match input for LipoScript\nFILE_LIST=\"${DERIVED_FILE_DIR}/${ARCHS}-${EXECUTABLE_NAME}.xcfilelist\"\ntouch \"$FILE_LIST\"\nif ! grep -Eq \"$SCRIPT_OUTPUT_FILE_0\" \"$FILE_LIST\" ; then\n echo >> \"$FILE_LIST\" \"$SCRIPT_OUTPUT_FILE_0\"\nfi\n\necho \"success: $ACTION of $SCRIPT_OUTPUT_FILE_0 for $CARGO_XCODE_TARGET_TRIPLE\"\n";
|
||||
};
|
||||
/* End PBXBuildRule section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
CA00E4546D15B49ACB510D63 /* audio_always_works */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = audio_always_works; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
CAF97371734F3EF4668187A5 /* Cargo.toml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Cargo.toml; sourceTree = "<group>"; };
|
||||
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
CAF07371734FD65BC3C892A8 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CAF97371734F3EF4668187A5 /* Cargo.toml */,
|
||||
CAF17371734F22869D176AE5 /* Products */,
|
||||
CAF27371734F98AF0B5890DB /* Frameworks */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CAF17371734F22869D176AE5 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CA00E4546D15B49ACB510D63 /* audio_always_works */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CAF27371734F98AF0B5890DB /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
CA00E4546D15121ACC594768 /* audio_always_works-bin */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = CA001D66D1F3121ACC594768 /* Build configuration list for PBXNativeTarget "audio_always_works-bin" */;
|
||||
buildPhases = (
|
||||
CA0095086913121ACC594768 /* Sources */,
|
||||
CAF57371734FAF6EBB7F357C /* Universal Binary lipo */,
|
||||
);
|
||||
buildRules = (
|
||||
CAF47371734FAC6C1400ACA8 /* PBXBuildRule */,
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = "audio_always_works-bin";
|
||||
productName = audio_always_works;
|
||||
productReference = CA00E4546D15B49ACB510D63 /* audio_always_works */;
|
||||
productType = "com.apple.product-type.tool";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
CAF37371734FE04653AD465F /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 1500;
|
||||
TargetAttributes = {
|
||||
CA00E4546D15121ACC594768 = {
|
||||
CreatedOnToolsVersion = 9.2;
|
||||
ProvisioningStyle = Automatic;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = CAF67371734F80E02D6C7F57 /* Build configuration list for PBXProject "audio_always_works" */;
|
||||
compatibilityVersion = "Xcode 11.4";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = CAF07371734FD65BC3C892A8;
|
||||
productRefGroup = CAF17371734F22869D176AE5 /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
CA00E4546D15121ACC594768 /* audio_always_works-bin */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
CAF57371734FAF6EBB7F357C /* Universal Binary lipo */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
);
|
||||
inputPaths = (
|
||||
"$(DERIVED_FILE_DIR)/$(ARCHS)-$(EXECUTABLE_NAME).xcfilelist",
|
||||
);
|
||||
name = "Universal Binary lipo";
|
||||
outputFileListPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
"$(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "# generated with cargo-xcode 1.7.0\nset -eux;\ntr '\\n' '\\0' < \"$DERIVED_FILE_DIR/$ARCHS-$EXECUTABLE_NAME.xcfilelist\" | xargs -0 lipo -create -output \"$TARGET_BUILD_DIR/$EXECUTABLE_PATH\"\nif [ ${LD_DYLIB_INSTALL_NAME:+1} ]; then\n install_name_tool -id \"$LD_DYLIB_INSTALL_NAME\" \"$TARGET_BUILD_DIR/$EXECUTABLE_PATH\"\nfi\n";
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
CA0095086913121ACC594768 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
CA002181887C121ACC594768 /* Cargo.toml in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
CA0050355DF4121ACC594768 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CARGO_XCODE_CARGO_DEP_FILE_NAME = audio_always_works.d;
|
||||
CARGO_XCODE_CARGO_FILE_NAME = audio_always_works;
|
||||
|
||||
PRODUCT_NAME = audio_always_works;
|
||||
SUPPORTED_PLATFORMS = macosx;
|
||||
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
CA001D9E89C7121ACC594768 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CARGO_XCODE_CARGO_DEP_FILE_NAME = audio_always_works.d;
|
||||
CARGO_XCODE_CARGO_FILE_NAME = audio_always_works;
|
||||
|
||||
PRODUCT_NAME = audio_always_works;
|
||||
SUPPORTED_PLATFORMS = macosx;
|
||||
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
||||
CAF7BAE0FD163CC16B37690B /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CARGO_TARGET_DIR = "$(PROJECT_TEMP_DIR)/cargo_target";
|
||||
CARGO_XCODE_BUILD_PROFILE = release;
|
||||
CARGO_XCODE_FEATURES = "";
|
||||
"CARGO_XCODE_TARGET_ARCH[arch=arm64*]" = aarch64;
|
||||
"CARGO_XCODE_TARGET_ARCH[arch=i386]" = i686;
|
||||
"CARGO_XCODE_TARGET_ARCH[arch=x86_64*]" = x86_64;
|
||||
"CARGO_XCODE_TARGET_OS[sdk=appletvos*]" = tvos;
|
||||
"CARGO_XCODE_TARGET_OS[sdk=appletvsimulator*]" = tvos;
|
||||
"CARGO_XCODE_TARGET_OS[sdk=iphoneos*]" = ios;
|
||||
"CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*]" = "ios-sim";
|
||||
"CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*][arch=x86_64*]" = ios;
|
||||
"CARGO_XCODE_TARGET_OS[sdk=macosx*]" = darwin;
|
||||
CURRENT_PROJECT_VERSION = 0.1;
|
||||
MARKETING_VERSION = 0.1.0;
|
||||
PRODUCT_NAME = audio_always_works;
|
||||
RUSTUP_TOOLCHAIN = "";
|
||||
SDKROOT = macosx;
|
||||
SUPPORTS_MACCATALYST = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
CAF8BAE0FD16228BE02872F8 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CARGO_TARGET_DIR = "$(PROJECT_TEMP_DIR)/cargo_target";
|
||||
CARGO_XCODE_BUILD_PROFILE = debug;
|
||||
CARGO_XCODE_FEATURES = "";
|
||||
"CARGO_XCODE_TARGET_ARCH[arch=arm64*]" = aarch64;
|
||||
"CARGO_XCODE_TARGET_ARCH[arch=i386]" = i686;
|
||||
"CARGO_XCODE_TARGET_ARCH[arch=x86_64*]" = x86_64;
|
||||
"CARGO_XCODE_TARGET_OS[sdk=appletvos*]" = tvos;
|
||||
"CARGO_XCODE_TARGET_OS[sdk=appletvsimulator*]" = tvos;
|
||||
"CARGO_XCODE_TARGET_OS[sdk=iphoneos*]" = ios;
|
||||
"CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*]" = "ios-sim";
|
||||
"CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*][arch=x86_64*]" = ios;
|
||||
"CARGO_XCODE_TARGET_OS[sdk=macosx*]" = darwin;
|
||||
CURRENT_PROJECT_VERSION = 0.1;
|
||||
MARKETING_VERSION = 0.1.0;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PRODUCT_NAME = audio_always_works;
|
||||
RUSTUP_TOOLCHAIN = "";
|
||||
SDKROOT = macosx;
|
||||
SUPPORTS_MACCATALYST = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
CA001D66D1F3121ACC594768 /* Build configuration list for PBXNativeTarget "audio_always_works-bin" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
CA0050355DF4121ACC594768 /* Release */,
|
||||
CA001D9E89C7121ACC594768 /* Debug */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
|
||||
CAF67371734F80E02D6C7F57 /* Build configuration list for PBXProject "audio_always_works" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
CAF7BAE0FD163CC16B37690B /* Release */,
|
||||
CAF8BAE0FD16228BE02872F8 /* Debug */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = CAF37371734FE04653AD465F /* Project object */;
|
||||
}
|
||||
7
audio_always_works.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
audio_always_works.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
Binary file not shown.
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>audio_always_works-bin.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
475
macOS/AudioAlwaysWorks.xcodeproj/project.pbxproj
Normal file
475
macOS/AudioAlwaysWorks.xcodeproj/project.pbxproj
Normal file
@ -0,0 +1,475 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 54;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
00E8861E16817C505A2ECDE8 /* libshared_static.a.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E85E5699EC0D4ACC3ECF08C7 /* libshared_static.a.a */; };
|
||||
46FF5D3E091859708BFB695D /* AudioAlwaysWorksApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53B12612A4D67D20B81EB2E /* AudioAlwaysWorksApp.swift */; };
|
||||
7F9D6E2F706B4395EB6601CA /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB4929ACDBDFEE04D6BD1450 /* ContentView.swift */; };
|
||||
959935D0681AECAF2C9D286E /* shared.udl in Sources */ = {isa = PBXBuildFile; fileRef = AC29F76997F3C99B413D302C /* shared.udl */; };
|
||||
C81403257A4C05A09F8D4204 /* core.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CE412001E7794AD347EBD19 /* core.swift */; };
|
||||
D56F70A0151CDB9B5FFDF152 /* SharedTypes in Frameworks */ = {isa = PBXBuildFile; productRef = 0CC389A097C62FD0236B24A7 /* SharedTypes */; };
|
||||
EBABE42AB688D7559072487D /* (null) in Resources */ = {isa = PBXBuildFile; fileRef = 950989282E252A7B9B3FD161; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXBuildRule section */
|
||||
E1379C8142E9E6C9D55EE54C /* PBXBuildRule */ = {
|
||||
isa = PBXBuildRule;
|
||||
compilerSpec = com.apple.compilers.proxy.script;
|
||||
filePatterns = "*.udl";
|
||||
fileType = pattern.proxy;
|
||||
isEditable = 1;
|
||||
name = "Generate FFI";
|
||||
outputFiles = (
|
||||
"$(PROJECT_DIR)/generated/$(INPUT_FILE_BASE).swift",
|
||||
"$(PROJECT_DIR)/generated/$(INPUT_FILE_BASE)FFI.h",
|
||||
);
|
||||
outputFilesCompilerFlags = (
|
||||
);
|
||||
runOncePerArchitecture = 0;
|
||||
script = "#!/bin/bash\nset -e\n\n# Skip during indexing phase in XCode 13+\nif [ \"$ACTION\" == \"indexbuild\" ]; then\n echo \"Not building *.udl files during indexing.\"\n exit 0\nfi\n\n# Skip for preview builds\nif [ \"$ENABLE_PREVIEWS\" = \"YES\" ]; then\n echo \"Not building *.udl files during preview builds.\"\n exit 0\nfi\n\ncd \"${INPUT_FILE_DIR}/..\"\n\"${BUILD_DIR}/${CONFIGURATION}/uniffi-bindgen\" generate \"src/${INPUT_FILE_NAME}\" --language swift --out-dir \"${PROJECT_DIR}/generated\"\n";
|
||||
};
|
||||
/* End PBXBuildRule section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
2691CEA93CAFF0B4913D0104 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 58D1273A2F85C7E8A1B7A368 /* Shared */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = CA02FA85CE9E4296ADE0F606;
|
||||
remoteInfo = "uniffi-bindgen-bin";
|
||||
};
|
||||
36A596DB7199CBE221785B4C /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 58D1273A2F85C7E8A1B7A368 /* Shared */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = CA02FA85CE9E8109328FB0D5;
|
||||
remoteInfo = "uniffi-bindgen-bin";
|
||||
};
|
||||
6C009F766D2C7D18C5B54FBD /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 58D1273A2F85C7E8A1B7A368 /* Shared */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = CA0049BF7D4FFB09138082B7;
|
||||
remoteInfo = "shared-staticlib";
|
||||
};
|
||||
84766557D1D0D528121CE64B /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 58D1273A2F85C7E8A1B7A368 /* Shared */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = CA0049BF7D4FD346A0A05154;
|
||||
remoteInfo = "shared-staticlib";
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
2CE412001E7794AD347EBD19 /* core.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = core.swift; sourceTree = "<group>"; };
|
||||
462254CE9DE6D2EC30FF3A86 /* AudioAlwaysWorks.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AudioAlwaysWorks.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
58D1273A2F85C7E8A1B7A368 /* Shared */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Shared; path = ../shared/shared.xcodeproj; sourceTree = "<group>"; };
|
||||
875EDCC9B68900ADF353E8B9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
|
||||
AC29F76997F3C99B413D302C /* shared.udl */ = {isa = PBXFileReference; path = shared.udl; sourceTree = "<group>"; };
|
||||
B53B12612A4D67D20B81EB2E /* AudioAlwaysWorksApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioAlwaysWorksApp.swift; sourceTree = "<group>"; };
|
||||
BB4929ACDBDFEE04D6BD1450 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
|
||||
BF6D1C0DFE7DE3DFA9713895 /* SharedTypes */ = {isa = PBXFileReference; lastKnownFileType = folder; name = SharedTypes; path = ../shared_types/generated/swift/SharedTypes; sourceTree = SOURCE_ROOT; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
CB8C2D766232756B7B816714 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
00E8861E16817C505A2ECDE8 /* libshared_static.a.a in Frameworks */,
|
||||
D56F70A0151CDB9B5FFDF152 /* SharedTypes in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
00F1A536CE165C8B63EE5233 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
950989282E252A7B9B3FD161,
|
||||
E85E5699EC0D4ACC3ECF08C7 /* libshared_static.a.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
145344B309F5A46FC5F95985 /* Projects */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
58D1273A2F85C7E8A1B7A368 /* Shared */,
|
||||
);
|
||||
name = Projects;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3F7AF5C4695691A01288E08F /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
462254CE9DE6D2EC30FF3A86 /* AudioAlwaysWorks.app */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
454476D2D91CEEB0D4374C0E /* src */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
AC29F76997F3C99B413D302C /* shared.udl */,
|
||||
);
|
||||
name = src;
|
||||
path = ../shared/src;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
46AF0F5B2FE283356AB99974 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
66C1A14C5F509EC6A51BE396 /* AudioAlwaysWorks */,
|
||||
94903FA415C62EF670977E13 /* Packages */,
|
||||
454476D2D91CEEB0D4374C0E /* src */,
|
||||
3F7AF5C4695691A01288E08F /* Products */,
|
||||
145344B309F5A46FC5F95985 /* Projects */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
66C1A14C5F509EC6A51BE396 /* AudioAlwaysWorks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B53B12612A4D67D20B81EB2E /* AudioAlwaysWorksApp.swift */,
|
||||
BB4929ACDBDFEE04D6BD1450 /* ContentView.swift */,
|
||||
2CE412001E7794AD347EBD19 /* core.swift */,
|
||||
875EDCC9B68900ADF353E8B9 /* Info.plist */,
|
||||
);
|
||||
path = AudioAlwaysWorks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
94903FA415C62EF670977E13 /* Packages */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
BF6D1C0DFE7DE3DFA9713895 /* SharedTypes */,
|
||||
);
|
||||
name = Packages;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
F6EFF5C544F3BC9C6A9B8E5C /* AudioAlwaysWorks */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 8E8D2F01A9911444D404B5B6 /* Build configuration list for PBXNativeTarget "AudioAlwaysWorks" */;
|
||||
buildPhases = (
|
||||
80164FD90B2E283AA182832A /* Sources */,
|
||||
C48990381B7BD8C84B9108F1 /* Resources */,
|
||||
CB8C2D766232756B7B816714 /* Frameworks */,
|
||||
);
|
||||
buildRules = (
|
||||
E1379C8142E9E6C9D55EE54C /* PBXBuildRule */,
|
||||
);
|
||||
dependencies = (
|
||||
6FB8261A37F6A141EDC63F61 /* PBXTargetDependency */,
|
||||
6FF5790D3621F6EBB9C2C7EA /* PBXTargetDependency */,
|
||||
);
|
||||
name = AudioAlwaysWorks;
|
||||
packageProductDependencies = (
|
||||
0CC389A097C62FD0236B24A7 /* SharedTypes */,
|
||||
);
|
||||
productName = AudioAlwaysWorks;
|
||||
productReference = 462254CE9DE6D2EC30FF3A86 /* AudioAlwaysWorks.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
CD31D51CAEA76326143638AA /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1430;
|
||||
TargetAttributes = {
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 96DE4556CF1251C69E040258 /* Build configuration list for PBXProject "AudioAlwaysWorks" */;
|
||||
compatibilityVersion = "Xcode 14.0";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
Base,
|
||||
en,
|
||||
);
|
||||
mainGroup = 46AF0F5B2FE283356AB99974;
|
||||
minimizedProjectReferenceProxies = 1;
|
||||
packageReferences = (
|
||||
6FABBE062C9537623FCDDE8A /* XCLocalSwiftPackageReference "../shared_types/generated/swift/SharedTypes" */,
|
||||
);
|
||||
preferredProjectObjectVersion = 54;
|
||||
projectDirPath = "";
|
||||
projectReferences = (
|
||||
{
|
||||
ProductGroup = 00F1A536CE165C8B63EE5233 /* Products */;
|
||||
ProjectRef = 58D1273A2F85C7E8A1B7A368 /* Shared */;
|
||||
},
|
||||
);
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
F6EFF5C544F3BC9C6A9B8E5C /* AudioAlwaysWorks */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXReferenceProxy section */
|
||||
950989282E252A7B9B3FD161 = {
|
||||
isa = PBXReferenceProxy;
|
||||
remoteRef = 36A596DB7199CBE221785B4C /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
E85E5699EC0D4ACC3ECF08C7 /* libshared_static.a.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libshared_static.a.a;
|
||||
remoteRef = 6C009F766D2C7D18C5B54FBD /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
/* End PBXReferenceProxy section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
C48990381B7BD8C84B9108F1 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
EBABE42AB688D7559072487D /* (null) in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
80164FD90B2E283AA182832A /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
46FF5D3E091859708BFB695D /* AudioAlwaysWorksApp.swift in Sources */,
|
||||
7F9D6E2F706B4395EB6601CA /* ContentView.swift in Sources */,
|
||||
C81403257A4C05A09F8D4204 /* core.swift in Sources */,
|
||||
959935D0681AECAF2C9D286E /* shared.udl in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
6FB8261A37F6A141EDC63F61 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
name = "uniffi-bindgen-bin";
|
||||
targetProxy = 2691CEA93CAFF0B4913D0104 /* PBXContainerItemProxy */;
|
||||
};
|
||||
6FF5790D3621F6EBB9C2C7EA /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
name = "shared-staticlib";
|
||||
targetProxy = 84766557D1D0D528121CE64B /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
AB847326C9251A1ACEC296CC /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = macosx;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
B48AFAF2195277CA789A64BC /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||
INFOPLIST_FILE = AudioAlwaysWorks/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/../Frameworks",
|
||||
);
|
||||
MACOSX_DEPLOYMENT_TARGET = 15.5;
|
||||
OTHER_LDFLAGS = (
|
||||
"-w",
|
||||
"-ObjC",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = nl.pascaldevink.audio_always_works.AudioAlwaysWorks;
|
||||
SDKROOT = macosx;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = generated/sharedFFI.h;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
D0294531C3F73284ABF61EC5 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"$(inherited)",
|
||||
"DEBUG=1",
|
||||
);
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = macosx;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
E5029E47918032BE5848DC2E /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||
INFOPLIST_FILE = AudioAlwaysWorks/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/../Frameworks",
|
||||
);
|
||||
MACOSX_DEPLOYMENT_TARGET = 15.5;
|
||||
OTHER_LDFLAGS = (
|
||||
"-w",
|
||||
"-ObjC",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = nl.pascaldevink.audio_always_works.AudioAlwaysWorks;
|
||||
SDKROOT = macosx;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = generated/sharedFFI.h;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
8E8D2F01A9911444D404B5B6 /* Build configuration list for PBXNativeTarget "AudioAlwaysWorks" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
B48AFAF2195277CA789A64BC /* Debug */,
|
||||
E5029E47918032BE5848DC2E /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Debug;
|
||||
};
|
||||
96DE4556CF1251C69E040258 /* Build configuration list for PBXProject "AudioAlwaysWorks" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
D0294531C3F73284ABF61EC5 /* Debug */,
|
||||
AB847326C9251A1ACEC296CC /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Debug;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
|
||||
/* Begin XCLocalSwiftPackageReference section */
|
||||
6FABBE062C9537623FCDDE8A /* XCLocalSwiftPackageReference "../shared_types/generated/swift/SharedTypes" */ = {
|
||||
isa = XCLocalSwiftPackageReference;
|
||||
relativePath = ../shared_types/generated/swift/SharedTypes;
|
||||
};
|
||||
/* End XCLocalSwiftPackageReference section */
|
||||
|
||||
/* Begin XCSwiftPackageProductDependency section */
|
||||
0CC389A097C62FD0236B24A7 /* SharedTypes */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
productName = SharedTypes;
|
||||
};
|
||||
/* End XCSwiftPackageProductDependency section */
|
||||
};
|
||||
rootObject = CD31D51CAEA76326143638AA /* Project object */;
|
||||
}
|
||||
7
macOS/AudioAlwaysWorks.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
macOS/AudioAlwaysWorks.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
Binary file not shown.
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>AudioAlwaysWorks.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
10
macOS/AudioAlwaysWorks/AudioAlwaysWorksApp.swift
Normal file
10
macOS/AudioAlwaysWorks/AudioAlwaysWorksApp.swift
Normal file
@ -0,0 +1,10 @@
|
||||
import SwiftUI
|
||||
|
||||
@main
|
||||
struct AudioAlwaysWorksApp: App {
|
||||
var body: some Scene {
|
||||
WindowGroup {
|
||||
ContentView(core: Core())
|
||||
}
|
||||
}
|
||||
}
|
||||
47
macOS/AudioAlwaysWorks/ContentView.swift
Normal file
47
macOS/AudioAlwaysWorks/ContentView.swift
Normal file
@ -0,0 +1,47 @@
|
||||
import SharedTypes
|
||||
import SwiftUI
|
||||
|
||||
struct ContentView: View {
|
||||
@ObservedObject var core: Core
|
||||
|
||||
var body: some View {
|
||||
VStack {
|
||||
Image(systemName: "globe")
|
||||
.imageScale(.large)
|
||||
.foregroundColor(.accentColor)
|
||||
Text(core.view.selected_input_device)
|
||||
Text(core.view.selected_output_device)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct ActionButton: View {
|
||||
var label: String
|
||||
var color: Color
|
||||
var action: () -> Void
|
||||
|
||||
init(label: String, color: Color, action: @escaping () -> Void) {
|
||||
self.label = label
|
||||
self.color = color
|
||||
self.action = action
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
Button(action: action) {
|
||||
Text(label)
|
||||
.fontWeight(.bold)
|
||||
.font(.body)
|
||||
.padding(EdgeInsets(top: 10, leading: 15, bottom: 10, trailing: 15))
|
||||
.background(color)
|
||||
.cornerRadius(10)
|
||||
.foregroundColor(.white)
|
||||
.padding()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct ContentView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
ContentView(core: Core())
|
||||
}
|
||||
}
|
||||
24
macOS/AudioAlwaysWorks/Info.plist
Normal file
24
macOS/AudioAlwaysWorks/Info.plist
Normal file
@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>UILaunchScreen</key>
|
||||
<dict/>
|
||||
</dict>
|
||||
</plist>
|
||||
27
macOS/AudioAlwaysWorks/core.swift
Normal file
27
macOS/AudioAlwaysWorks/core.swift
Normal file
@ -0,0 +1,27 @@
|
||||
import Foundation
|
||||
import SharedTypes
|
||||
|
||||
@MainActor
|
||||
class Core: ObservableObject {
|
||||
@Published var view: ViewModel
|
||||
|
||||
init() {
|
||||
self.view = try! .bincodeDeserialize(input: [UInt8](AudioAlwaysWorks.view()))
|
||||
}
|
||||
|
||||
func update(_ event: Event) {
|
||||
let effects = [UInt8](processEvent(Data(try! event.bincodeSerialize())))
|
||||
|
||||
let requests: [Request] = try! .bincodeDeserialize(input: effects)
|
||||
for request in requests {
|
||||
processEffect(request)
|
||||
}
|
||||
}
|
||||
|
||||
func processEffect(_ request: Request) {
|
||||
switch request.effect {
|
||||
case .render:
|
||||
view = try! .bincodeDeserialize(input: [UInt8](AudioAlwaysWorks.view()))
|
||||
}
|
||||
}
|
||||
}
|
||||
537
macOS/generated/shared.swift
Normal file
537
macOS/generated/shared.swift
Normal file
@ -0,0 +1,537 @@
|
||||
// This file was autogenerated by some hot garbage in the `uniffi` crate.
|
||||
// Trust me, you don't want to mess with it!
|
||||
|
||||
// swiftlint:disable all
|
||||
import Foundation
|
||||
|
||||
// Depending on the consumer's build setup, the low-level FFI code
|
||||
// might be in a separate module, or it might be compiled inline into
|
||||
// this module. This is a bit of light hackery to work with both.
|
||||
#if canImport(sharedFFI)
|
||||
import sharedFFI
|
||||
#endif
|
||||
|
||||
fileprivate extension RustBuffer {
|
||||
// Allocate a new buffer, copying the contents of a `UInt8` array.
|
||||
init(bytes: [UInt8]) {
|
||||
let rbuf = bytes.withUnsafeBufferPointer { ptr in
|
||||
RustBuffer.from(ptr)
|
||||
}
|
||||
self.init(capacity: rbuf.capacity, len: rbuf.len, data: rbuf.data)
|
||||
}
|
||||
|
||||
static func empty() -> RustBuffer {
|
||||
RustBuffer(capacity: 0, len:0, data: nil)
|
||||
}
|
||||
|
||||
static func from(_ ptr: UnsafeBufferPointer<UInt8>) -> RustBuffer {
|
||||
try! rustCall { ffi_shared_rustbuffer_from_bytes(ForeignBytes(bufferPointer: ptr), $0) }
|
||||
}
|
||||
|
||||
// Frees the buffer in place.
|
||||
// The buffer must not be used after this is called.
|
||||
func deallocate() {
|
||||
try! rustCall { ffi_shared_rustbuffer_free(self, $0) }
|
||||
}
|
||||
}
|
||||
|
||||
fileprivate extension ForeignBytes {
|
||||
init(bufferPointer: UnsafeBufferPointer<UInt8>) {
|
||||
self.init(len: Int32(bufferPointer.count), data: bufferPointer.baseAddress)
|
||||
}
|
||||
}
|
||||
|
||||
// For every type used in the interface, we provide helper methods for conveniently
|
||||
// lifting and lowering that type from C-compatible data, and for reading and writing
|
||||
// values of that type in a buffer.
|
||||
|
||||
// Helper classes/extensions that don't change.
|
||||
// Someday, this will be in a library of its own.
|
||||
|
||||
fileprivate extension Data {
|
||||
init(rustBuffer: RustBuffer) {
|
||||
self.init(
|
||||
bytesNoCopy: rustBuffer.data!,
|
||||
count: Int(rustBuffer.len),
|
||||
deallocator: .none
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// Define reader functionality. Normally this would be defined in a class or
|
||||
// struct, but we use standalone functions instead in order to make external
|
||||
// types work.
|
||||
//
|
||||
// With external types, one swift source file needs to be able to call the read
|
||||
// method on another source file's FfiConverter, but then what visibility
|
||||
// should Reader have?
|
||||
// - If Reader is fileprivate, then this means the read() must also
|
||||
// be fileprivate, which doesn't work with external types.
|
||||
// - If Reader is internal/public, we'll get compile errors since both source
|
||||
// files will try define the same type.
|
||||
//
|
||||
// Instead, the read() method and these helper functions input a tuple of data
|
||||
|
||||
fileprivate func createReader(data: Data) -> (data: Data, offset: Data.Index) {
|
||||
(data: data, offset: 0)
|
||||
}
|
||||
|
||||
// Reads an integer at the current offset, in big-endian order, and advances
|
||||
// the offset on success. Throws if reading the integer would move the
|
||||
// offset past the end of the buffer.
|
||||
fileprivate func readInt<T: FixedWidthInteger>(_ reader: inout (data: Data, offset: Data.Index)) throws -> T {
|
||||
let range = reader.offset..<reader.offset + MemoryLayout<T>.size
|
||||
guard reader.data.count >= range.upperBound else {
|
||||
throw UniffiInternalError.bufferOverflow
|
||||
}
|
||||
if T.self == UInt8.self {
|
||||
let value = reader.data[reader.offset]
|
||||
reader.offset += 1
|
||||
return value as! T
|
||||
}
|
||||
var value: T = 0
|
||||
let _ = withUnsafeMutableBytes(of: &value, { reader.data.copyBytes(to: $0, from: range)})
|
||||
reader.offset = range.upperBound
|
||||
return value.bigEndian
|
||||
}
|
||||
|
||||
// Reads an arbitrary number of bytes, to be used to read
|
||||
// raw bytes, this is useful when lifting strings
|
||||
fileprivate func readBytes(_ reader: inout (data: Data, offset: Data.Index), count: Int) throws -> Array<UInt8> {
|
||||
let range = reader.offset..<(reader.offset+count)
|
||||
guard reader.data.count >= range.upperBound else {
|
||||
throw UniffiInternalError.bufferOverflow
|
||||
}
|
||||
var value = [UInt8](repeating: 0, count: count)
|
||||
value.withUnsafeMutableBufferPointer({ buffer in
|
||||
reader.data.copyBytes(to: buffer, from: range)
|
||||
})
|
||||
reader.offset = range.upperBound
|
||||
return value
|
||||
}
|
||||
|
||||
// Reads a float at the current offset.
|
||||
fileprivate func readFloat(_ reader: inout (data: Data, offset: Data.Index)) throws -> Float {
|
||||
return Float(bitPattern: try readInt(&reader))
|
||||
}
|
||||
|
||||
// Reads a float at the current offset.
|
||||
fileprivate func readDouble(_ reader: inout (data: Data, offset: Data.Index)) throws -> Double {
|
||||
return Double(bitPattern: try readInt(&reader))
|
||||
}
|
||||
|
||||
// Indicates if the offset has reached the end of the buffer.
|
||||
fileprivate func hasRemaining(_ reader: (data: Data, offset: Data.Index)) -> Bool {
|
||||
return reader.offset < reader.data.count
|
||||
}
|
||||
|
||||
// Define writer functionality. Normally this would be defined in a class or
|
||||
// struct, but we use standalone functions instead in order to make external
|
||||
// types work. See the above discussion on Readers for details.
|
||||
|
||||
fileprivate func createWriter() -> [UInt8] {
|
||||
return []
|
||||
}
|
||||
|
||||
fileprivate func writeBytes<S>(_ writer: inout [UInt8], _ byteArr: S) where S: Sequence, S.Element == UInt8 {
|
||||
writer.append(contentsOf: byteArr)
|
||||
}
|
||||
|
||||
// Writes an integer in big-endian order.
|
||||
//
|
||||
// Warning: make sure what you are trying to write
|
||||
// is in the correct type!
|
||||
fileprivate func writeInt<T: FixedWidthInteger>(_ writer: inout [UInt8], _ value: T) {
|
||||
var value = value.bigEndian
|
||||
withUnsafeBytes(of: &value) { writer.append(contentsOf: $0) }
|
||||
}
|
||||
|
||||
fileprivate func writeFloat(_ writer: inout [UInt8], _ value: Float) {
|
||||
writeInt(&writer, value.bitPattern)
|
||||
}
|
||||
|
||||
fileprivate func writeDouble(_ writer: inout [UInt8], _ value: Double) {
|
||||
writeInt(&writer, value.bitPattern)
|
||||
}
|
||||
|
||||
// Protocol for types that transfer other types across the FFI. This is
|
||||
// analogous to the Rust trait of the same name.
|
||||
fileprivate protocol FfiConverter {
|
||||
associatedtype FfiType
|
||||
associatedtype SwiftType
|
||||
|
||||
static func lift(_ value: FfiType) throws -> SwiftType
|
||||
static func lower(_ value: SwiftType) -> FfiType
|
||||
static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> SwiftType
|
||||
static func write(_ value: SwiftType, into buf: inout [UInt8])
|
||||
}
|
||||
|
||||
// Types conforming to `Primitive` pass themselves directly over the FFI.
|
||||
fileprivate protocol FfiConverterPrimitive: FfiConverter where FfiType == SwiftType { }
|
||||
|
||||
extension FfiConverterPrimitive {
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
public static func lift(_ value: FfiType) throws -> SwiftType {
|
||||
return value
|
||||
}
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
public static func lower(_ value: SwiftType) -> FfiType {
|
||||
return value
|
||||
}
|
||||
}
|
||||
|
||||
// Types conforming to `FfiConverterRustBuffer` lift and lower into a `RustBuffer`.
|
||||
// Used for complex types where it's hard to write a custom lift/lower.
|
||||
fileprivate protocol FfiConverterRustBuffer: FfiConverter where FfiType == RustBuffer {}
|
||||
|
||||
extension FfiConverterRustBuffer {
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
public static func lift(_ buf: RustBuffer) throws -> SwiftType {
|
||||
var reader = createReader(data: Data(rustBuffer: buf))
|
||||
let value = try read(from: &reader)
|
||||
if hasRemaining(reader) {
|
||||
throw UniffiInternalError.incompleteData
|
||||
}
|
||||
buf.deallocate()
|
||||
return value
|
||||
}
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
public static func lower(_ value: SwiftType) -> RustBuffer {
|
||||
var writer = createWriter()
|
||||
write(value, into: &writer)
|
||||
return RustBuffer(bytes: writer)
|
||||
}
|
||||
}
|
||||
// An error type for FFI errors. These errors occur at the UniFFI level, not
|
||||
// the library level.
|
||||
fileprivate enum UniffiInternalError: LocalizedError {
|
||||
case bufferOverflow
|
||||
case incompleteData
|
||||
case unexpectedOptionalTag
|
||||
case unexpectedEnumCase
|
||||
case unexpectedNullPointer
|
||||
case unexpectedRustCallStatusCode
|
||||
case unexpectedRustCallError
|
||||
case unexpectedStaleHandle
|
||||
case rustPanic(_ message: String)
|
||||
|
||||
public var errorDescription: String? {
|
||||
switch self {
|
||||
case .bufferOverflow: return "Reading the requested value would read past the end of the buffer"
|
||||
case .incompleteData: return "The buffer still has data after lifting its containing value"
|
||||
case .unexpectedOptionalTag: return "Unexpected optional tag; should be 0 or 1"
|
||||
case .unexpectedEnumCase: return "Raw enum value doesn't match any cases"
|
||||
case .unexpectedNullPointer: return "Raw pointer value was null"
|
||||
case .unexpectedRustCallStatusCode: return "Unexpected RustCallStatus code"
|
||||
case .unexpectedRustCallError: return "CALL_ERROR but no errorClass specified"
|
||||
case .unexpectedStaleHandle: return "The object in the handle map has been dropped already"
|
||||
case let .rustPanic(message): return message
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fileprivate extension NSLock {
|
||||
func withLock<T>(f: () throws -> T) rethrows -> T {
|
||||
self.lock()
|
||||
defer { self.unlock() }
|
||||
return try f()
|
||||
}
|
||||
}
|
||||
|
||||
fileprivate let CALL_SUCCESS: Int8 = 0
|
||||
fileprivate let CALL_ERROR: Int8 = 1
|
||||
fileprivate let CALL_UNEXPECTED_ERROR: Int8 = 2
|
||||
fileprivate let CALL_CANCELLED: Int8 = 3
|
||||
|
||||
fileprivate extension RustCallStatus {
|
||||
init() {
|
||||
self.init(
|
||||
code: CALL_SUCCESS,
|
||||
errorBuf: RustBuffer.init(
|
||||
capacity: 0,
|
||||
len: 0,
|
||||
data: nil
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private func rustCall<T>(_ callback: (UnsafeMutablePointer<RustCallStatus>) -> T) throws -> T {
|
||||
let neverThrow: ((RustBuffer) throws -> Never)? = nil
|
||||
return try makeRustCall(callback, errorHandler: neverThrow)
|
||||
}
|
||||
|
||||
private func rustCallWithError<T, E: Swift.Error>(
|
||||
_ errorHandler: @escaping (RustBuffer) throws -> E,
|
||||
_ callback: (UnsafeMutablePointer<RustCallStatus>) -> T) throws -> T {
|
||||
try makeRustCall(callback, errorHandler: errorHandler)
|
||||
}
|
||||
|
||||
private func makeRustCall<T, E: Swift.Error>(
|
||||
_ callback: (UnsafeMutablePointer<RustCallStatus>) -> T,
|
||||
errorHandler: ((RustBuffer) throws -> E)?
|
||||
) throws -> T {
|
||||
uniffiEnsureSharedInitialized()
|
||||
var callStatus = RustCallStatus.init()
|
||||
let returnedVal = callback(&callStatus)
|
||||
try uniffiCheckCallStatus(callStatus: callStatus, errorHandler: errorHandler)
|
||||
return returnedVal
|
||||
}
|
||||
|
||||
private func uniffiCheckCallStatus<E: Swift.Error>(
|
||||
callStatus: RustCallStatus,
|
||||
errorHandler: ((RustBuffer) throws -> E)?
|
||||
) throws {
|
||||
switch callStatus.code {
|
||||
case CALL_SUCCESS:
|
||||
return
|
||||
|
||||
case CALL_ERROR:
|
||||
if let errorHandler = errorHandler {
|
||||
throw try errorHandler(callStatus.errorBuf)
|
||||
} else {
|
||||
callStatus.errorBuf.deallocate()
|
||||
throw UniffiInternalError.unexpectedRustCallError
|
||||
}
|
||||
|
||||
case CALL_UNEXPECTED_ERROR:
|
||||
// When the rust code sees a panic, it tries to construct a RustBuffer
|
||||
// with the message. But if that code panics, then it just sends back
|
||||
// an empty buffer.
|
||||
if callStatus.errorBuf.len > 0 {
|
||||
throw UniffiInternalError.rustPanic(try FfiConverterString.lift(callStatus.errorBuf))
|
||||
} else {
|
||||
callStatus.errorBuf.deallocate()
|
||||
throw UniffiInternalError.rustPanic("Rust panic")
|
||||
}
|
||||
|
||||
case CALL_CANCELLED:
|
||||
fatalError("Cancellation not supported yet")
|
||||
|
||||
default:
|
||||
throw UniffiInternalError.unexpectedRustCallStatusCode
|
||||
}
|
||||
}
|
||||
|
||||
private func uniffiTraitInterfaceCall<T>(
|
||||
callStatus: UnsafeMutablePointer<RustCallStatus>,
|
||||
makeCall: () throws -> T,
|
||||
writeReturn: (T) -> ()
|
||||
) {
|
||||
do {
|
||||
try writeReturn(makeCall())
|
||||
} catch let error {
|
||||
callStatus.pointee.code = CALL_UNEXPECTED_ERROR
|
||||
callStatus.pointee.errorBuf = FfiConverterString.lower(String(describing: error))
|
||||
}
|
||||
}
|
||||
|
||||
private func uniffiTraitInterfaceCallWithError<T, E>(
|
||||
callStatus: UnsafeMutablePointer<RustCallStatus>,
|
||||
makeCall: () throws -> T,
|
||||
writeReturn: (T) -> (),
|
||||
lowerError: (E) -> RustBuffer
|
||||
) {
|
||||
do {
|
||||
try writeReturn(makeCall())
|
||||
} catch let error as E {
|
||||
callStatus.pointee.code = CALL_ERROR
|
||||
callStatus.pointee.errorBuf = lowerError(error)
|
||||
} catch {
|
||||
callStatus.pointee.code = CALL_UNEXPECTED_ERROR
|
||||
callStatus.pointee.errorBuf = FfiConverterString.lower(String(describing: error))
|
||||
}
|
||||
}
|
||||
fileprivate final class UniffiHandleMap<T>: @unchecked Sendable {
|
||||
// All mutation happens with this lock held, which is why we implement @unchecked Sendable.
|
||||
private let lock = NSLock()
|
||||
private var map: [UInt64: T] = [:]
|
||||
private var currentHandle: UInt64 = 1
|
||||
|
||||
func insert(obj: T) -> UInt64 {
|
||||
lock.withLock {
|
||||
let handle = currentHandle
|
||||
currentHandle += 1
|
||||
map[handle] = obj
|
||||
return handle
|
||||
}
|
||||
}
|
||||
|
||||
func get(handle: UInt64) throws -> T {
|
||||
try lock.withLock {
|
||||
guard let obj = map[handle] else {
|
||||
throw UniffiInternalError.unexpectedStaleHandle
|
||||
}
|
||||
return obj
|
||||
}
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
func remove(handle: UInt64) throws -> T {
|
||||
try lock.withLock {
|
||||
guard let obj = map.removeValue(forKey: handle) else {
|
||||
throw UniffiInternalError.unexpectedStaleHandle
|
||||
}
|
||||
return obj
|
||||
}
|
||||
}
|
||||
|
||||
var count: Int {
|
||||
get {
|
||||
map.count
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Public interface members begin here.
|
||||
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
fileprivate struct FfiConverterUInt32: FfiConverterPrimitive {
|
||||
typealias FfiType = UInt32
|
||||
typealias SwiftType = UInt32
|
||||
|
||||
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> UInt32 {
|
||||
return try lift(readInt(&buf))
|
||||
}
|
||||
|
||||
public static func write(_ value: SwiftType, into buf: inout [UInt8]) {
|
||||
writeInt(&buf, lower(value))
|
||||
}
|
||||
}
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
fileprivate struct FfiConverterString: FfiConverter {
|
||||
typealias SwiftType = String
|
||||
typealias FfiType = RustBuffer
|
||||
|
||||
public static func lift(_ value: RustBuffer) throws -> String {
|
||||
defer {
|
||||
value.deallocate()
|
||||
}
|
||||
if value.data == nil {
|
||||
return String()
|
||||
}
|
||||
let bytes = UnsafeBufferPointer<UInt8>(start: value.data!, count: Int(value.len))
|
||||
return String(bytes: bytes, encoding: String.Encoding.utf8)!
|
||||
}
|
||||
|
||||
public static func lower(_ value: String) -> RustBuffer {
|
||||
return value.utf8CString.withUnsafeBufferPointer { ptr in
|
||||
// The swift string gives us int8_t, we want uint8_t.
|
||||
ptr.withMemoryRebound(to: UInt8.self) { ptr in
|
||||
// The swift string gives us a trailing null byte, we don't want it.
|
||||
let buf = UnsafeBufferPointer(rebasing: ptr.prefix(upTo: ptr.count - 1))
|
||||
return RustBuffer.from(buf)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> String {
|
||||
let len: Int32 = try readInt(&buf)
|
||||
return String(bytes: try readBytes(&buf, count: Int(len)), encoding: String.Encoding.utf8)!
|
||||
}
|
||||
|
||||
public static func write(_ value: String, into buf: inout [UInt8]) {
|
||||
let len = Int32(value.utf8.count)
|
||||
writeInt(&buf, len)
|
||||
writeBytes(&buf, value.utf8)
|
||||
}
|
||||
}
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
fileprivate struct FfiConverterData: FfiConverterRustBuffer {
|
||||
typealias SwiftType = Data
|
||||
|
||||
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> Data {
|
||||
let len: Int32 = try readInt(&buf)
|
||||
return Data(try readBytes(&buf, count: Int(len)))
|
||||
}
|
||||
|
||||
public static func write(_ value: Data, into buf: inout [UInt8]) {
|
||||
let len = Int32(value.count)
|
||||
writeInt(&buf, len)
|
||||
writeBytes(&buf, value)
|
||||
}
|
||||
}
|
||||
public func handleResponse(_ id: UInt32, _ res: Data) -> Data {
|
||||
return try! FfiConverterData.lift(try! rustCall() {
|
||||
uniffi_shared_fn_func_handle_response(
|
||||
FfiConverterUInt32.lower(id),
|
||||
FfiConverterData.lower(res),$0
|
||||
)
|
||||
})
|
||||
}
|
||||
public func processEvent(_ msg: Data) -> Data {
|
||||
return try! FfiConverterData.lift(try! rustCall() {
|
||||
uniffi_shared_fn_func_process_event(
|
||||
FfiConverterData.lower(msg),$0
|
||||
)
|
||||
})
|
||||
}
|
||||
public func view() -> Data {
|
||||
return try! FfiConverterData.lift(try! rustCall() {
|
||||
uniffi_shared_fn_func_view($0
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
private enum InitializationResult {
|
||||
case ok
|
||||
case contractVersionMismatch
|
||||
case apiChecksumMismatch
|
||||
}
|
||||
// Use a global variable to perform the versioning checks. Swift ensures that
|
||||
// the code inside is only computed once.
|
||||
private let initializationResult: InitializationResult = {
|
||||
// Get the bindings contract version from our ComponentInterface
|
||||
let bindings_contract_version = 29
|
||||
// Get the scaffolding contract version by calling the into the dylib
|
||||
let scaffolding_contract_version = ffi_shared_uniffi_contract_version()
|
||||
if bindings_contract_version != scaffolding_contract_version {
|
||||
return InitializationResult.contractVersionMismatch
|
||||
}
|
||||
if (uniffi_shared_checksum_func_handle_response() != 38599) {
|
||||
return InitializationResult.apiChecksumMismatch
|
||||
}
|
||||
if (uniffi_shared_checksum_func_process_event() != 35444) {
|
||||
return InitializationResult.apiChecksumMismatch
|
||||
}
|
||||
if (uniffi_shared_checksum_func_view() != 57786) {
|
||||
return InitializationResult.apiChecksumMismatch
|
||||
}
|
||||
|
||||
return InitializationResult.ok
|
||||
}()
|
||||
|
||||
// Make the ensure init function public so that other modules which have external type references to
|
||||
// our types can call it.
|
||||
public func uniffiEnsureSharedInitialized() {
|
||||
switch initializationResult {
|
||||
case .ok:
|
||||
break
|
||||
case .contractVersionMismatch:
|
||||
fatalError("UniFFI contract version mismatch: try cleaning and rebuilding your project")
|
||||
case .apiChecksumMismatch:
|
||||
fatalError("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
|
||||
}
|
||||
}
|
||||
|
||||
// swiftlint:enable all
|
||||
574
macOS/generated/sharedFFI.h
Normal file
574
macOS/generated/sharedFFI.h
Normal file
@ -0,0 +1,574 @@
|
||||
// This file was autogenerated by some hot garbage in the `uniffi` crate.
|
||||
// Trust me, you don't want to mess with it!
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
// The following structs are used to implement the lowest level
|
||||
// of the FFI, and thus useful to multiple uniffied crates.
|
||||
// We ensure they are declared exactly once, with a header guard, UNIFFI_SHARED_H.
|
||||
#ifdef UNIFFI_SHARED_H
|
||||
// We also try to prevent mixing versions of shared uniffi header structs.
|
||||
// If you add anything to the #else block, you must increment the version suffix in UNIFFI_SHARED_HEADER_V4
|
||||
#ifndef UNIFFI_SHARED_HEADER_V4
|
||||
#error Combining helper code from multiple versions of uniffi is not supported
|
||||
#endif // ndef UNIFFI_SHARED_HEADER_V4
|
||||
#else
|
||||
#define UNIFFI_SHARED_H
|
||||
#define UNIFFI_SHARED_HEADER_V4
|
||||
// ⚠️ Attention: If you change this #else block (ending in `#endif // def UNIFFI_SHARED_H`) you *must* ⚠️
|
||||
// ⚠️ increment the version suffix in all instances of UNIFFI_SHARED_HEADER_V4 in this file. ⚠️
|
||||
|
||||
typedef struct RustBuffer
|
||||
{
|
||||
uint64_t capacity;
|
||||
uint64_t len;
|
||||
uint8_t *_Nullable data;
|
||||
} RustBuffer;
|
||||
|
||||
typedef struct ForeignBytes
|
||||
{
|
||||
int32_t len;
|
||||
const uint8_t *_Nullable data;
|
||||
} ForeignBytes;
|
||||
|
||||
// Error definitions
|
||||
typedef struct RustCallStatus {
|
||||
int8_t code;
|
||||
RustBuffer errorBuf;
|
||||
} RustCallStatus;
|
||||
|
||||
// ⚠️ Attention: If you change this #else block (ending in `#endif // def UNIFFI_SHARED_H`) you *must* ⚠️
|
||||
// ⚠️ increment the version suffix in all instances of UNIFFI_SHARED_HEADER_V4 in this file. ⚠️
|
||||
#endif // def UNIFFI_SHARED_H
|
||||
#ifndef UNIFFI_FFIDEF_RUST_FUTURE_CONTINUATION_CALLBACK
|
||||
#define UNIFFI_FFIDEF_RUST_FUTURE_CONTINUATION_CALLBACK
|
||||
typedef void (*UniffiRustFutureContinuationCallback)(uint64_t, int8_t
|
||||
);
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_FREE
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_FREE
|
||||
typedef void (*UniffiForeignFutureFree)(uint64_t
|
||||
);
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_CALLBACK_INTERFACE_FREE
|
||||
#define UNIFFI_FFIDEF_CALLBACK_INTERFACE_FREE
|
||||
typedef void (*UniffiCallbackInterfaceFree)(uint64_t
|
||||
);
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE
|
||||
typedef struct UniffiForeignFuture {
|
||||
uint64_t handle;
|
||||
UniffiForeignFutureFree _Nonnull free;
|
||||
} UniffiForeignFuture;
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_U8
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_U8
|
||||
typedef struct UniffiForeignFutureStructU8 {
|
||||
uint8_t returnValue;
|
||||
RustCallStatus callStatus;
|
||||
} UniffiForeignFutureStructU8;
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_U8
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_U8
|
||||
typedef void (*UniffiForeignFutureCompleteU8)(uint64_t, UniffiForeignFutureStructU8
|
||||
);
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_I8
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_I8
|
||||
typedef struct UniffiForeignFutureStructI8 {
|
||||
int8_t returnValue;
|
||||
RustCallStatus callStatus;
|
||||
} UniffiForeignFutureStructI8;
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_I8
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_I8
|
||||
typedef void (*UniffiForeignFutureCompleteI8)(uint64_t, UniffiForeignFutureStructI8
|
||||
);
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_U16
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_U16
|
||||
typedef struct UniffiForeignFutureStructU16 {
|
||||
uint16_t returnValue;
|
||||
RustCallStatus callStatus;
|
||||
} UniffiForeignFutureStructU16;
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_U16
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_U16
|
||||
typedef void (*UniffiForeignFutureCompleteU16)(uint64_t, UniffiForeignFutureStructU16
|
||||
);
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_I16
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_I16
|
||||
typedef struct UniffiForeignFutureStructI16 {
|
||||
int16_t returnValue;
|
||||
RustCallStatus callStatus;
|
||||
} UniffiForeignFutureStructI16;
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_I16
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_I16
|
||||
typedef void (*UniffiForeignFutureCompleteI16)(uint64_t, UniffiForeignFutureStructI16
|
||||
);
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_U32
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_U32
|
||||
typedef struct UniffiForeignFutureStructU32 {
|
||||
uint32_t returnValue;
|
||||
RustCallStatus callStatus;
|
||||
} UniffiForeignFutureStructU32;
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_U32
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_U32
|
||||
typedef void (*UniffiForeignFutureCompleteU32)(uint64_t, UniffiForeignFutureStructU32
|
||||
);
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_I32
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_I32
|
||||
typedef struct UniffiForeignFutureStructI32 {
|
||||
int32_t returnValue;
|
||||
RustCallStatus callStatus;
|
||||
} UniffiForeignFutureStructI32;
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_I32
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_I32
|
||||
typedef void (*UniffiForeignFutureCompleteI32)(uint64_t, UniffiForeignFutureStructI32
|
||||
);
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_U64
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_U64
|
||||
typedef struct UniffiForeignFutureStructU64 {
|
||||
uint64_t returnValue;
|
||||
RustCallStatus callStatus;
|
||||
} UniffiForeignFutureStructU64;
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_U64
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_U64
|
||||
typedef void (*UniffiForeignFutureCompleteU64)(uint64_t, UniffiForeignFutureStructU64
|
||||
);
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_I64
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_I64
|
||||
typedef struct UniffiForeignFutureStructI64 {
|
||||
int64_t returnValue;
|
||||
RustCallStatus callStatus;
|
||||
} UniffiForeignFutureStructI64;
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_I64
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_I64
|
||||
typedef void (*UniffiForeignFutureCompleteI64)(uint64_t, UniffiForeignFutureStructI64
|
||||
);
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_F32
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_F32
|
||||
typedef struct UniffiForeignFutureStructF32 {
|
||||
float returnValue;
|
||||
RustCallStatus callStatus;
|
||||
} UniffiForeignFutureStructF32;
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_F32
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_F32
|
||||
typedef void (*UniffiForeignFutureCompleteF32)(uint64_t, UniffiForeignFutureStructF32
|
||||
);
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_F64
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_F64
|
||||
typedef struct UniffiForeignFutureStructF64 {
|
||||
double returnValue;
|
||||
RustCallStatus callStatus;
|
||||
} UniffiForeignFutureStructF64;
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_F64
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_F64
|
||||
typedef void (*UniffiForeignFutureCompleteF64)(uint64_t, UniffiForeignFutureStructF64
|
||||
);
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_POINTER
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_POINTER
|
||||
typedef struct UniffiForeignFutureStructPointer {
|
||||
void*_Nonnull returnValue;
|
||||
RustCallStatus callStatus;
|
||||
} UniffiForeignFutureStructPointer;
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_POINTER
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_POINTER
|
||||
typedef void (*UniffiForeignFutureCompletePointer)(uint64_t, UniffiForeignFutureStructPointer
|
||||
);
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_RUST_BUFFER
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_RUST_BUFFER
|
||||
typedef struct UniffiForeignFutureStructRustBuffer {
|
||||
RustBuffer returnValue;
|
||||
RustCallStatus callStatus;
|
||||
} UniffiForeignFutureStructRustBuffer;
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_RUST_BUFFER
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_RUST_BUFFER
|
||||
typedef void (*UniffiForeignFutureCompleteRustBuffer)(uint64_t, UniffiForeignFutureStructRustBuffer
|
||||
);
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_VOID
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_VOID
|
||||
typedef struct UniffiForeignFutureStructVoid {
|
||||
RustCallStatus callStatus;
|
||||
} UniffiForeignFutureStructVoid;
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_VOID
|
||||
#define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_VOID
|
||||
typedef void (*UniffiForeignFutureCompleteVoid)(uint64_t, UniffiForeignFutureStructVoid
|
||||
);
|
||||
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_SHARED_FN_FUNC_HANDLE_RESPONSE
|
||||
#define UNIFFI_FFIDEF_UNIFFI_SHARED_FN_FUNC_HANDLE_RESPONSE
|
||||
RustBuffer uniffi_shared_fn_func_handle_response(uint32_t id, RustBuffer res, RustCallStatus *_Nonnull out_status
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_SHARED_FN_FUNC_PROCESS_EVENT
|
||||
#define UNIFFI_FFIDEF_UNIFFI_SHARED_FN_FUNC_PROCESS_EVENT
|
||||
RustBuffer uniffi_shared_fn_func_process_event(RustBuffer msg, RustCallStatus *_Nonnull out_status
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_SHARED_FN_FUNC_VIEW
|
||||
#define UNIFFI_FFIDEF_UNIFFI_SHARED_FN_FUNC_VIEW
|
||||
RustBuffer uniffi_shared_fn_func_view(RustCallStatus *_Nonnull out_status
|
||||
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUSTBUFFER_ALLOC
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUSTBUFFER_ALLOC
|
||||
RustBuffer ffi_shared_rustbuffer_alloc(uint64_t size, RustCallStatus *_Nonnull out_status
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUSTBUFFER_FROM_BYTES
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUSTBUFFER_FROM_BYTES
|
||||
RustBuffer ffi_shared_rustbuffer_from_bytes(ForeignBytes bytes, RustCallStatus *_Nonnull out_status
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUSTBUFFER_FREE
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUSTBUFFER_FREE
|
||||
void ffi_shared_rustbuffer_free(RustBuffer buf, RustCallStatus *_Nonnull out_status
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUSTBUFFER_RESERVE
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUSTBUFFER_RESERVE
|
||||
RustBuffer ffi_shared_rustbuffer_reserve(RustBuffer buf, uint64_t additional, RustCallStatus *_Nonnull out_status
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_U8
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_U8
|
||||
void ffi_shared_rust_future_poll_u8(uint64_t handle, UniffiRustFutureContinuationCallback _Nonnull callback, uint64_t callback_data
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_U8
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_U8
|
||||
void ffi_shared_rust_future_cancel_u8(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_U8
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_U8
|
||||
void ffi_shared_rust_future_free_u8(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_U8
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_U8
|
||||
uint8_t ffi_shared_rust_future_complete_u8(uint64_t handle, RustCallStatus *_Nonnull out_status
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_I8
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_I8
|
||||
void ffi_shared_rust_future_poll_i8(uint64_t handle, UniffiRustFutureContinuationCallback _Nonnull callback, uint64_t callback_data
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_I8
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_I8
|
||||
void ffi_shared_rust_future_cancel_i8(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_I8
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_I8
|
||||
void ffi_shared_rust_future_free_i8(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_I8
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_I8
|
||||
int8_t ffi_shared_rust_future_complete_i8(uint64_t handle, RustCallStatus *_Nonnull out_status
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_U16
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_U16
|
||||
void ffi_shared_rust_future_poll_u16(uint64_t handle, UniffiRustFutureContinuationCallback _Nonnull callback, uint64_t callback_data
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_U16
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_U16
|
||||
void ffi_shared_rust_future_cancel_u16(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_U16
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_U16
|
||||
void ffi_shared_rust_future_free_u16(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_U16
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_U16
|
||||
uint16_t ffi_shared_rust_future_complete_u16(uint64_t handle, RustCallStatus *_Nonnull out_status
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_I16
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_I16
|
||||
void ffi_shared_rust_future_poll_i16(uint64_t handle, UniffiRustFutureContinuationCallback _Nonnull callback, uint64_t callback_data
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_I16
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_I16
|
||||
void ffi_shared_rust_future_cancel_i16(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_I16
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_I16
|
||||
void ffi_shared_rust_future_free_i16(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_I16
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_I16
|
||||
int16_t ffi_shared_rust_future_complete_i16(uint64_t handle, RustCallStatus *_Nonnull out_status
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_U32
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_U32
|
||||
void ffi_shared_rust_future_poll_u32(uint64_t handle, UniffiRustFutureContinuationCallback _Nonnull callback, uint64_t callback_data
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_U32
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_U32
|
||||
void ffi_shared_rust_future_cancel_u32(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_U32
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_U32
|
||||
void ffi_shared_rust_future_free_u32(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_U32
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_U32
|
||||
uint32_t ffi_shared_rust_future_complete_u32(uint64_t handle, RustCallStatus *_Nonnull out_status
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_I32
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_I32
|
||||
void ffi_shared_rust_future_poll_i32(uint64_t handle, UniffiRustFutureContinuationCallback _Nonnull callback, uint64_t callback_data
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_I32
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_I32
|
||||
void ffi_shared_rust_future_cancel_i32(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_I32
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_I32
|
||||
void ffi_shared_rust_future_free_i32(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_I32
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_I32
|
||||
int32_t ffi_shared_rust_future_complete_i32(uint64_t handle, RustCallStatus *_Nonnull out_status
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_U64
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_U64
|
||||
void ffi_shared_rust_future_poll_u64(uint64_t handle, UniffiRustFutureContinuationCallback _Nonnull callback, uint64_t callback_data
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_U64
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_U64
|
||||
void ffi_shared_rust_future_cancel_u64(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_U64
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_U64
|
||||
void ffi_shared_rust_future_free_u64(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_U64
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_U64
|
||||
uint64_t ffi_shared_rust_future_complete_u64(uint64_t handle, RustCallStatus *_Nonnull out_status
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_I64
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_I64
|
||||
void ffi_shared_rust_future_poll_i64(uint64_t handle, UniffiRustFutureContinuationCallback _Nonnull callback, uint64_t callback_data
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_I64
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_I64
|
||||
void ffi_shared_rust_future_cancel_i64(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_I64
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_I64
|
||||
void ffi_shared_rust_future_free_i64(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_I64
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_I64
|
||||
int64_t ffi_shared_rust_future_complete_i64(uint64_t handle, RustCallStatus *_Nonnull out_status
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_F32
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_F32
|
||||
void ffi_shared_rust_future_poll_f32(uint64_t handle, UniffiRustFutureContinuationCallback _Nonnull callback, uint64_t callback_data
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_F32
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_F32
|
||||
void ffi_shared_rust_future_cancel_f32(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_F32
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_F32
|
||||
void ffi_shared_rust_future_free_f32(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_F32
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_F32
|
||||
float ffi_shared_rust_future_complete_f32(uint64_t handle, RustCallStatus *_Nonnull out_status
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_F64
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_F64
|
||||
void ffi_shared_rust_future_poll_f64(uint64_t handle, UniffiRustFutureContinuationCallback _Nonnull callback, uint64_t callback_data
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_F64
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_F64
|
||||
void ffi_shared_rust_future_cancel_f64(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_F64
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_F64
|
||||
void ffi_shared_rust_future_free_f64(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_F64
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_F64
|
||||
double ffi_shared_rust_future_complete_f64(uint64_t handle, RustCallStatus *_Nonnull out_status
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_POINTER
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_POINTER
|
||||
void ffi_shared_rust_future_poll_pointer(uint64_t handle, UniffiRustFutureContinuationCallback _Nonnull callback, uint64_t callback_data
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_POINTER
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_POINTER
|
||||
void ffi_shared_rust_future_cancel_pointer(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_POINTER
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_POINTER
|
||||
void ffi_shared_rust_future_free_pointer(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_POINTER
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_POINTER
|
||||
void*_Nonnull ffi_shared_rust_future_complete_pointer(uint64_t handle, RustCallStatus *_Nonnull out_status
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_RUST_BUFFER
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_RUST_BUFFER
|
||||
void ffi_shared_rust_future_poll_rust_buffer(uint64_t handle, UniffiRustFutureContinuationCallback _Nonnull callback, uint64_t callback_data
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_RUST_BUFFER
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_RUST_BUFFER
|
||||
void ffi_shared_rust_future_cancel_rust_buffer(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_RUST_BUFFER
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_RUST_BUFFER
|
||||
void ffi_shared_rust_future_free_rust_buffer(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_RUST_BUFFER
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_RUST_BUFFER
|
||||
RustBuffer ffi_shared_rust_future_complete_rust_buffer(uint64_t handle, RustCallStatus *_Nonnull out_status
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_VOID
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_POLL_VOID
|
||||
void ffi_shared_rust_future_poll_void(uint64_t handle, UniffiRustFutureContinuationCallback _Nonnull callback, uint64_t callback_data
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_VOID
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_CANCEL_VOID
|
||||
void ffi_shared_rust_future_cancel_void(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_VOID
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_FREE_VOID
|
||||
void ffi_shared_rust_future_free_void(uint64_t handle
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_VOID
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_RUST_FUTURE_COMPLETE_VOID
|
||||
void ffi_shared_rust_future_complete_void(uint64_t handle, RustCallStatus *_Nonnull out_status
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_SHARED_CHECKSUM_FUNC_HANDLE_RESPONSE
|
||||
#define UNIFFI_FFIDEF_UNIFFI_SHARED_CHECKSUM_FUNC_HANDLE_RESPONSE
|
||||
uint16_t uniffi_shared_checksum_func_handle_response(void
|
||||
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_SHARED_CHECKSUM_FUNC_PROCESS_EVENT
|
||||
#define UNIFFI_FFIDEF_UNIFFI_SHARED_CHECKSUM_FUNC_PROCESS_EVENT
|
||||
uint16_t uniffi_shared_checksum_func_process_event(void
|
||||
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_SHARED_CHECKSUM_FUNC_VIEW
|
||||
#define UNIFFI_FFIDEF_UNIFFI_SHARED_CHECKSUM_FUNC_VIEW
|
||||
uint16_t uniffi_shared_checksum_func_view(void
|
||||
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_FFI_SHARED_UNIFFI_CONTRACT_VERSION
|
||||
#define UNIFFI_FFIDEF_FFI_SHARED_UNIFFI_CONTRACT_VERSION
|
||||
uint32_t ffi_shared_uniffi_contract_version(void
|
||||
|
||||
);
|
||||
#endif
|
||||
|
||||
7
macOS/generated/sharedFFI.modulemap
Normal file
7
macOS/generated/sharedFFI.modulemap
Normal file
@ -0,0 +1,7 @@
|
||||
module sharedFFI {
|
||||
header "sharedFFI.h"
|
||||
export *
|
||||
use "Darwin"
|
||||
use "_Builtin_stdbool"
|
||||
use "_Builtin_stdint"
|
||||
}
|
||||
57
macOS/project.yml
Normal file
57
macOS/project.yml
Normal file
@ -0,0 +1,57 @@
|
||||
name: AudioAlwaysWorks
|
||||
projectReferences:
|
||||
Shared:
|
||||
path: ../shared/shared.xcodeproj
|
||||
packages:
|
||||
SharedTypes:
|
||||
path: ../shared_types/generated/swift/SharedTypes
|
||||
options:
|
||||
bundleIdPrefix: nl.pascaldevink.audio_always_works
|
||||
attributes:
|
||||
BuildIndependentTargetsInParallel: true
|
||||
targets:
|
||||
AudioAlwaysWorks:
|
||||
type: application
|
||||
platform: macOS
|
||||
deploymentTarget: "15.5"
|
||||
sources:
|
||||
- AudioAlwaysWorks
|
||||
- path: ../shared/src/shared.udl
|
||||
buildPhase: sources
|
||||
dependencies:
|
||||
- target: Shared/uniffi-bindgen-bin
|
||||
- target: Shared/shared-staticlib
|
||||
- package: SharedTypes
|
||||
info:
|
||||
path: AudioAlwaysWorks/Info.plist
|
||||
properties:
|
||||
UILaunchScreen: {}
|
||||
settings:
|
||||
OTHER_LDFLAGS: [-w]
|
||||
SWIFT_OBJC_BRIDGING_HEADER: generated/sharedFFI.h
|
||||
ENABLE_USER_SCRIPT_SANDBOXING: NO
|
||||
buildRules:
|
||||
- name: Generate FFI
|
||||
filePattern: "*.udl"
|
||||
script: |
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Skip during indexing phase in XCode 13+
|
||||
if [ "$ACTION" == "indexbuild" ]; then
|
||||
echo "Not building *.udl files during indexing."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Skip for preview builds
|
||||
if [ "$ENABLE_PREVIEWS" = "YES" ]; then
|
||||
echo "Not building *.udl files during preview builds."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
cd "${INPUT_FILE_DIR}/.."
|
||||
"${BUILD_DIR}/${CONFIGURATION}/uniffi-bindgen" generate "src/${INPUT_FILE_NAME}" --language swift --out-dir "${PROJECT_DIR}/generated"
|
||||
outputFiles:
|
||||
- $(PROJECT_DIR)/generated/$(INPUT_FILE_BASE).swift
|
||||
- $(PROJECT_DIR)/generated/$(INPUT_FILE_BASE)FFI.h
|
||||
runOncePerArchitecture: false
|
||||
5
rust-toolchain.toml
Normal file
5
rust-toolchain.toml
Normal file
@ -0,0 +1,5 @@
|
||||
[toolchain]
|
||||
channel = "stable"
|
||||
components = ["rustfmt", "rustc-dev"]
|
||||
targets = ["aarch64-apple-darwin"]
|
||||
profile = "minimal"
|
||||
1
shared/.gitignore
vendored
Normal file
1
shared/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/target
|
||||
27
shared/Cargo.toml
Normal file
27
shared/Cargo.toml
Normal file
@ -0,0 +1,27 @@
|
||||
[package]
|
||||
name = "shared"
|
||||
version = "0.1.0"
|
||||
authors.workspace = true
|
||||
repository.workspace = true
|
||||
edition.workspace = true
|
||||
license.workspace = true
|
||||
rust-version.workspace = true
|
||||
|
||||
[lib]
|
||||
crate-type = ["lib", "staticlib", "cdylib"]
|
||||
name = "shared"
|
||||
|
||||
[features]
|
||||
typegen = ["crux_core/typegen"]
|
||||
|
||||
[dependencies]
|
||||
crux_core.workspace = true
|
||||
serde = { workspace = true, features = ["derive"] }
|
||||
uniffi = "0.29.3"
|
||||
wasm-bindgen = "0.2.100"
|
||||
|
||||
[build-dependencies]
|
||||
uniffi = { version = "0.29.3", features = ["build"] }
|
||||
|
||||
[target.uniffi-bindgen.dependencies]
|
||||
uniffi = { version = "0.29.3", features = ["cli"] }
|
||||
3
shared/build.rs
Normal file
3
shared/build.rs
Normal file
@ -0,0 +1,3 @@
|
||||
fn main() {
|
||||
uniffi::generate_scaffolding("./src/shared.udl").unwrap();
|
||||
}
|
||||
391
shared/shared.xcodeproj/project.pbxproj
Normal file
391
shared/shared.xcodeproj/project.pbxproj
Normal file
@ -0,0 +1,391 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
/* generated with cargo-xcode 1.7.0 */
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 53;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
CA0075449799D346A0A05154 /* Cargo.toml in Sources */ = {isa = PBXBuildFile; fileRef = CAF972D1F1633EF4668187A5 /* Cargo.toml */; settings = {COMPILER_FLAGS = "--lib"; }; };
|
||||
CA017544979925C0556334E4 /* Cargo.toml in Sources */ = {isa = PBXBuildFile; fileRef = CAF972D1F1633EF4668187A5 /* Cargo.toml */; settings = {COMPILER_FLAGS = "--lib"; }; };
|
||||
CA02754497994296ADE0F606 /* Cargo.toml in Sources */ = {isa = PBXBuildFile; fileRef = CAF972D1F1633EF4668187A5 /* Cargo.toml */; settings = {COMPILER_FLAGS = "--bin 'uniffi-bindgen'"; }; };
|
||||
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXBuildRule section */
|
||||
CAF472D1F163AC6C1400ACA8 /* PBXBuildRule */ = {
|
||||
isa = PBXBuildRule;
|
||||
compilerSpec = com.apple.compilers.proxy.script;
|
||||
dependencyFile = "$(DERIVED_FILE_DIR)/$(CARGO_XCODE_TARGET_ARCH)-$(EXECUTABLE_NAME).d";
|
||||
filePatterns = "*/Cargo.toml";
|
||||
fileType = pattern.proxy;
|
||||
inputFiles = (
|
||||
);
|
||||
isEditable = 0;
|
||||
name = "Cargo project build";
|
||||
outputFiles = (
|
||||
"$(OBJECT_FILE_DIR)/$(CARGO_XCODE_TARGET_ARCH)-$(EXECUTABLE_NAME)",
|
||||
);
|
||||
script = "# generated with cargo-xcode 1.7.0\nset -xeu;\nexport PATH=\"$HOME/.cargo/bin:$PATH:/usr/local/bin:/opt/homebrew/bin\";\n\nif [ \"${IS_MACCATALYST-NO}\" = YES ]; then\n CARGO_XCODE_TARGET_OS=ios-macabi\nfi\nCARGO_XCODE_TARGET_TRIPLE=\"${CARGO_XCODE_TARGET_ARCH}-apple-${CARGO_XCODE_TARGET_OS}\"\nif [ \"$CARGO_XCODE_TARGET_OS\" != darwin ]; then\n export PATH=\"${PATH/\\/Contents\\/Developer\\/Toolchains\\/XcodeDefault.xctoolchain\\/usr\\/bin:/xcode-provided-ld-cant-link-lSystem-for-the-host-build-script:}\"\nfi\nif [ \"$CARGO_XCODE_BUILD_PROFILE\" == release ]; then\n OTHER_INPUT_FILE_FLAGS=\"${OTHER_INPUT_FILE_FLAGS} --release\"\nfi\n\nif [ \"$ACTION\" = clean ]; then\n cargo clean --verbose --manifest-path=\"$SCRIPT_INPUT_FILE\" ${OTHER_INPUT_FILE_FLAGS} --target=\"${CARGO_XCODE_TARGET_TRIPLE}\";\n rm -f \"$SCRIPT_OUTPUT_FILE_0\"\n exit 0\nfi\ncargo build --verbose --manifest-path=\"$SCRIPT_INPUT_FILE\" --features=\"${CARGO_XCODE_FEATURES:-}\" ${OTHER_INPUT_FILE_FLAGS} --target=\"${CARGO_XCODE_TARGET_TRIPLE}\" || {\n if command -v rustup &> /dev/null; then\n if ! rustup target list --installed | grep -Eq \"${CARGO_XCODE_TARGET_TRIPLE}\"; then\n echo >&2 \"warning: this build requires rustup toolchain for $CARGO_XCODE_TARGET_TRIPLE, but it isn't installed (will try rustup next)\"\n rustup target add \"${CARGO_XCODE_TARGET_TRIPLE}\" || echo >&2 \"warning: can't install $CARGO_XCODE_TARGET_TRIPLE\"\n fi\n fi\n echo >&2 \"error: cargo build failed\"; exit 1; }\n\n# it's too hard to explain Cargo's actual exe path to Xcode build graph, so hardlink to a known-good path instead\nBUILT_SRC=\"${CARGO_TARGET_DIR}/${CARGO_XCODE_TARGET_TRIPLE}/${CARGO_XCODE_BUILD_PROFILE}/${CARGO_XCODE_CARGO_FILE_NAME}\"\nln -f -- \"$BUILT_SRC\" \"$SCRIPT_OUTPUT_FILE_0\" || { echo >&2 \"can't hardlink $BUILT_SRC to $SCRIPT_OUTPUT_FILE_0\"; exit 1; }\n\n# cargo generates a dep file, but for its own path, so append our rename to it\nDEP_FILE_SRC=\"${CARGO_TARGET_DIR}/${CARGO_XCODE_TARGET_TRIPLE}/${CARGO_XCODE_BUILD_PROFILE}/${CARGO_XCODE_CARGO_DEP_FILE_NAME}\"\nif [ -f \"$DEP_FILE_SRC\" ]; then\n DEP_FILE_DST=\"${DERIVED_FILE_DIR}/${CARGO_XCODE_TARGET_ARCH}-${EXECUTABLE_NAME}.d\"\n cp -f \"$DEP_FILE_SRC\" \"$DEP_FILE_DST\" || { echo >&2 \"can't copy $DEP_FILE_SRC to $DEP_FILE_DST\"; exit 1; }\n\n echo >> \"$DEP_FILE_DST\" \"${SCRIPT_OUTPUT_FILE_0/ /\\\\ /}: ${BUILT_SRC/ /\\\\ /}\"\nfi\n\n# lipo script needs to know all the platform-specific files that have been built\n# archs is in the file name, so that paths don't stay around after archs change\n# must match input for LipoScript\nFILE_LIST=\"${DERIVED_FILE_DIR}/${ARCHS}-${EXECUTABLE_NAME}.xcfilelist\"\ntouch \"$FILE_LIST\"\nif ! grep -Eq \"$SCRIPT_OUTPUT_FILE_0\" \"$FILE_LIST\" ; then\n echo >> \"$FILE_LIST\" \"$SCRIPT_OUTPUT_FILE_0\"\nfi\n\necho \"success: $ACTION of $SCRIPT_OUTPUT_FILE_0 for $CARGO_XCODE_TARGET_TRIPLE\"\n";
|
||||
};
|
||||
/* End PBXBuildRule section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
CA0049BF7D4FFB09138082B7 /* libshared_static.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libshared_static.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
CA01C51694BE10F7F7FCAC5B /* shared.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = shared.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
CA02FA85CE9E8109328FB0D5 /* uniffi-bindgen */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "uniffi-bindgen"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
CAF972D1F1633EF4668187A5 /* Cargo.toml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Cargo.toml; sourceTree = "<group>"; };
|
||||
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
CAF072D1F163D65BC3C892A8 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CAF972D1F1633EF4668187A5 /* Cargo.toml */,
|
||||
CAF172D1F16322869D176AE5 /* Products */,
|
||||
CAF272D1F16398AF0B5890DB /* Frameworks */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CAF172D1F16322869D176AE5 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CA0049BF7D4FFB09138082B7 /* libshared_static.a */,
|
||||
CA01C51694BE10F7F7FCAC5B /* shared.dylib */,
|
||||
CA02FA85CE9E8109328FB0D5 /* uniffi-bindgen */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CAF272D1F16398AF0B5890DB /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
CA0049BF7D4FD346A0A05154 /* shared-staticlib */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = CA009BFF234FD346A0A05154 /* Build configuration list for PBXNativeTarget "shared-staticlib" */;
|
||||
buildPhases = (
|
||||
CA002DB2DC98D346A0A05154 /* Sources */,
|
||||
CAF572D1F163AF6EBB7F357C /* Universal Binary lipo */,
|
||||
);
|
||||
buildRules = (
|
||||
CAF472D1F163AC6C1400ACA8 /* PBXBuildRule */,
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = "shared-staticlib";
|
||||
productName = libshared_static.a;
|
||||
productReference = CA0049BF7D4FFB09138082B7 /* libshared_static.a */;
|
||||
productType = "com.apple.product-type.library.static";
|
||||
};
|
||||
CA01C51694BE25C0556334E4 /* shared-cdylib */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = CA019BFF234F25C0556334E4 /* Build configuration list for PBXNativeTarget "shared-cdylib" */;
|
||||
buildPhases = (
|
||||
CA012DB2DC9825C0556334E4 /* Sources */,
|
||||
CAF572D1F163AF6EBB7F357C /* Universal Binary lipo */,
|
||||
);
|
||||
buildRules = (
|
||||
CAF472D1F163AC6C1400ACA8 /* PBXBuildRule */,
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = "shared-cdylib";
|
||||
productName = shared.dylib;
|
||||
productReference = CA01C51694BE10F7F7FCAC5B /* shared.dylib */;
|
||||
productType = "com.apple.product-type.library.dynamic";
|
||||
};
|
||||
CA02FA85CE9E4296ADE0F606 /* uniffi-bindgen-bin */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = CA029BFF234F4296ADE0F606 /* Build configuration list for PBXNativeTarget "uniffi-bindgen-bin" */;
|
||||
buildPhases = (
|
||||
CA022DB2DC984296ADE0F606 /* Sources */,
|
||||
CAF572D1F163AF6EBB7F357C /* Universal Binary lipo */,
|
||||
);
|
||||
buildRules = (
|
||||
CAF472D1F163AC6C1400ACA8 /* PBXBuildRule */,
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = "uniffi-bindgen-bin";
|
||||
productName = "uniffi-bindgen";
|
||||
productReference = CA02FA85CE9E8109328FB0D5 /* uniffi-bindgen */;
|
||||
productType = "com.apple.product-type.tool";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
CAF372D1F163E04653AD465F /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 1500;
|
||||
TargetAttributes = {
|
||||
CA0049BF7D4FD346A0A05154 = {
|
||||
CreatedOnToolsVersion = 9.2;
|
||||
ProvisioningStyle = Automatic;
|
||||
};
|
||||
CA01C51694BE25C0556334E4 = {
|
||||
CreatedOnToolsVersion = 9.2;
|
||||
ProvisioningStyle = Automatic;
|
||||
};
|
||||
CA02FA85CE9E4296ADE0F606 = {
|
||||
CreatedOnToolsVersion = 9.2;
|
||||
ProvisioningStyle = Automatic;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = CAF672D1F16380E02D6C7F57 /* Build configuration list for PBXProject "shared" */;
|
||||
compatibilityVersion = "Xcode 11.4";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = CAF072D1F163D65BC3C892A8;
|
||||
productRefGroup = CAF172D1F16322869D176AE5 /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
CA0049BF7D4FD346A0A05154 /* shared-staticlib */,
|
||||
CA01C51694BE25C0556334E4 /* shared-cdylib */,
|
||||
CA02FA85CE9E4296ADE0F606 /* uniffi-bindgen-bin */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
CAF572D1F163AF6EBB7F357C /* Universal Binary lipo */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
);
|
||||
inputPaths = (
|
||||
"$(DERIVED_FILE_DIR)/$(ARCHS)-$(EXECUTABLE_NAME).xcfilelist",
|
||||
);
|
||||
name = "Universal Binary lipo";
|
||||
outputFileListPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
"$(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "# generated with cargo-xcode 1.7.0\nset -eux;\ntr '\\n' '\\0' < \"$DERIVED_FILE_DIR/$ARCHS-$EXECUTABLE_NAME.xcfilelist\" | xargs -0 lipo -create -output \"$TARGET_BUILD_DIR/$EXECUTABLE_PATH\"\nif [ ${LD_DYLIB_INSTALL_NAME:+1} ]; then\n install_name_tool -id \"$LD_DYLIB_INSTALL_NAME\" \"$TARGET_BUILD_DIR/$EXECUTABLE_PATH\"\nfi\n";
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
CA002DB2DC98D346A0A05154 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
CA0075449799D346A0A05154 /* Cargo.toml in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
CA012DB2DC9825C0556334E4 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
CA017544979925C0556334E4 /* Cargo.toml in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
CA022DB2DC984296ADE0F606 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
CA02754497994296ADE0F606 /* Cargo.toml in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
CA00D94DC8EDD346A0A05154 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CARGO_XCODE_CARGO_DEP_FILE_NAME = libshared.d;
|
||||
CARGO_XCODE_CARGO_FILE_NAME = libshared.a;
|
||||
INSTALL_GROUP = "";
|
||||
INSTALL_MODE_FLAG = "";
|
||||
INSTALL_OWNER = "";
|
||||
SKIP_INSTALL = YES;
|
||||
PRODUCT_NAME = shared_static;
|
||||
SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos appletvsimulator appletvos";
|
||||
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
CA00F2363223D346A0A05154 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CARGO_XCODE_CARGO_DEP_FILE_NAME = libshared.d;
|
||||
CARGO_XCODE_CARGO_FILE_NAME = libshared.a;
|
||||
INSTALL_GROUP = "";
|
||||
INSTALL_MODE_FLAG = "";
|
||||
INSTALL_OWNER = "";
|
||||
SKIP_INSTALL = YES;
|
||||
PRODUCT_NAME = shared_static;
|
||||
SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos appletvsimulator appletvos";
|
||||
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
CA01D94DC8ED25C0556334E4 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CARGO_XCODE_CARGO_DEP_FILE_NAME = libshared.d;
|
||||
CARGO_XCODE_CARGO_FILE_NAME = libshared.dylib;
|
||||
|
||||
PRODUCT_NAME = shared;
|
||||
SUPPORTED_PLATFORMS = macosx;
|
||||
DYLIB_COMPATIBILITY_VERSION = 0;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
CA01F236322325C0556334E4 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CARGO_XCODE_CARGO_DEP_FILE_NAME = libshared.d;
|
||||
CARGO_XCODE_CARGO_FILE_NAME = libshared.dylib;
|
||||
|
||||
PRODUCT_NAME = shared;
|
||||
SUPPORTED_PLATFORMS = macosx;
|
||||
DYLIB_COMPATIBILITY_VERSION = 0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
CA02D94DC8ED4296ADE0F606 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CARGO_XCODE_CARGO_DEP_FILE_NAME = "uniffi-bindgen.d";
|
||||
CARGO_XCODE_CARGO_FILE_NAME = "uniffi-bindgen";
|
||||
|
||||
PRODUCT_NAME = "uniffi-bindgen";
|
||||
SUPPORTED_PLATFORMS = macosx;
|
||||
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
CA02F23632234296ADE0F606 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CARGO_XCODE_CARGO_DEP_FILE_NAME = "uniffi-bindgen.d";
|
||||
CARGO_XCODE_CARGO_FILE_NAME = "uniffi-bindgen";
|
||||
|
||||
PRODUCT_NAME = "uniffi-bindgen";
|
||||
SUPPORTED_PLATFORMS = macosx;
|
||||
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
||||
CAF73C790FAA3CC16B37690B /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CARGO_TARGET_DIR = "$(PROJECT_TEMP_DIR)/cargo_target";
|
||||
CARGO_XCODE_BUILD_PROFILE = release;
|
||||
CARGO_XCODE_FEATURES = "";
|
||||
"CARGO_XCODE_TARGET_ARCH[arch=arm64*]" = aarch64;
|
||||
"CARGO_XCODE_TARGET_ARCH[arch=i386]" = i686;
|
||||
"CARGO_XCODE_TARGET_ARCH[arch=x86_64*]" = x86_64;
|
||||
"CARGO_XCODE_TARGET_OS[sdk=appletvos*]" = tvos;
|
||||
"CARGO_XCODE_TARGET_OS[sdk=appletvsimulator*]" = tvos;
|
||||
"CARGO_XCODE_TARGET_OS[sdk=iphoneos*]" = ios;
|
||||
"CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*]" = "ios-sim";
|
||||
"CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*][arch=x86_64*]" = ios;
|
||||
"CARGO_XCODE_TARGET_OS[sdk=macosx*]" = darwin;
|
||||
CURRENT_PROJECT_VERSION = 0.1;
|
||||
MARKETING_VERSION = 0.1.0;
|
||||
PRODUCT_NAME = shared;
|
||||
RUSTUP_TOOLCHAIN = "";
|
||||
SDKROOT = macosx;
|
||||
SUPPORTS_MACCATALYST = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
CAF83C790FAA228BE02872F8 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CARGO_TARGET_DIR = "$(PROJECT_TEMP_DIR)/cargo_target";
|
||||
CARGO_XCODE_BUILD_PROFILE = debug;
|
||||
CARGO_XCODE_FEATURES = "";
|
||||
"CARGO_XCODE_TARGET_ARCH[arch=arm64*]" = aarch64;
|
||||
"CARGO_XCODE_TARGET_ARCH[arch=i386]" = i686;
|
||||
"CARGO_XCODE_TARGET_ARCH[arch=x86_64*]" = x86_64;
|
||||
"CARGO_XCODE_TARGET_OS[sdk=appletvos*]" = tvos;
|
||||
"CARGO_XCODE_TARGET_OS[sdk=appletvsimulator*]" = tvos;
|
||||
"CARGO_XCODE_TARGET_OS[sdk=iphoneos*]" = ios;
|
||||
"CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*]" = "ios-sim";
|
||||
"CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*][arch=x86_64*]" = ios;
|
||||
"CARGO_XCODE_TARGET_OS[sdk=macosx*]" = darwin;
|
||||
CURRENT_PROJECT_VERSION = 0.1;
|
||||
MARKETING_VERSION = 0.1.0;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PRODUCT_NAME = shared;
|
||||
RUSTUP_TOOLCHAIN = "";
|
||||
SDKROOT = macosx;
|
||||
SUPPORTS_MACCATALYST = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
CA009BFF234FD346A0A05154 /* Build configuration list for PBXNativeTarget "shared-staticlib" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
CA00D94DC8EDD346A0A05154 /* Release */,
|
||||
CA00F2363223D346A0A05154 /* Debug */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
CA019BFF234F25C0556334E4 /* Build configuration list for PBXNativeTarget "shared-cdylib" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
CA01D94DC8ED25C0556334E4 /* Release */,
|
||||
CA01F236322325C0556334E4 /* Debug */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
CA029BFF234F4296ADE0F606 /* Build configuration list for PBXNativeTarget "uniffi-bindgen-bin" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
CA02D94DC8ED4296ADE0F606 /* Release */,
|
||||
CA02F23632234296ADE0F606 /* Debug */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
|
||||
CAF672D1F16380E02D6C7F57 /* Build configuration list for PBXProject "shared" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
CAF73C790FAA3CC16B37690B /* Release */,
|
||||
CAF83C790FAA228BE02872F8 /* Debug */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = CAF372D1F163E04653AD465F /* Project object */;
|
||||
}
|
||||
@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>shared-cdylib.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
<key>shared-staticlib.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
<key>uniffi-bindgen-bin.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>3</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
76
shared/src/app.rs
Normal file
76
shared/src/app.rs
Normal file
@ -0,0 +1,76 @@
|
||||
use crux_core::{
|
||||
macros::effect,
|
||||
render::{render, RenderOperation},
|
||||
App, Command,
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Serialize, Deserialize, Clone, Debug)]
|
||||
pub enum Event {
|
||||
AudioDevicesChanged,
|
||||
DefaultInputDeviceChanged(String),
|
||||
DefaultOutputDeviceChanged(String),
|
||||
}
|
||||
|
||||
#[effect(typegen)]
|
||||
pub enum Effect {
|
||||
Render(RenderOperation),
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct Model {
|
||||
input_devices: Vec<String>,
|
||||
output_devices: Vec<String>,
|
||||
selected_input_device: String,
|
||||
selected_output_device: String,
|
||||
rules: Vec<String>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Clone, Default)]
|
||||
pub struct ViewModel {
|
||||
pub input_devices: Vec<String>,
|
||||
pub output_devices: Vec<String>,
|
||||
pub selected_input_device: String,
|
||||
pub selected_output_device: String,
|
||||
pub rules: Vec<String>,
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct AudioAlwaysWorks;
|
||||
|
||||
impl App for AudioAlwaysWorks {
|
||||
type Event = Event;
|
||||
type Model = Model;
|
||||
type ViewModel = ViewModel;
|
||||
type Capabilities = (); // will be deprecated, so use unit type for now
|
||||
type Effect = Effect;
|
||||
|
||||
fn update(
|
||||
&self,
|
||||
event: Self::Event,
|
||||
model: &mut Self::Model,
|
||||
_caps: &(), // will be deprecated, so prefix with underscore for now
|
||||
) -> Command<Effect, Event> {
|
||||
match event {
|
||||
Event::DefaultInputDeviceChanged(device) => {
|
||||
model.selected_input_device = device;
|
||||
}
|
||||
Event::DefaultOutputDeviceChanged(device) => {
|
||||
model.selected_output_device = device;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
||||
render()
|
||||
}
|
||||
|
||||
fn view(&self, model: &Self::Model) -> Self::ViewModel {
|
||||
ViewModel {
|
||||
input_devices: model.input_devices.clone(),
|
||||
output_devices: model.output_devices.clone(),
|
||||
selected_input_device: model.selected_input_device.clone(),
|
||||
selected_output_device: model.selected_output_device.clone(),
|
||||
rules: model.rules.clone(),
|
||||
}
|
||||
}
|
||||
}
|
||||
3
shared/src/bin/uniffi-bindgen.rs
Normal file
3
shared/src/bin/uniffi-bindgen.rs
Normal file
@ -0,0 +1,3 @@
|
||||
fn main() {
|
||||
uniffi::uniffi_bindgen_main();
|
||||
}
|
||||
50
shared/src/lib.rs
Normal file
50
shared/src/lib.rs
Normal file
@ -0,0 +1,50 @@
|
||||
pub mod app;
|
||||
|
||||
use std::sync::LazyLock;
|
||||
|
||||
pub use crux_core::{bridge::Bridge, Core, Request};
|
||||
|
||||
pub use app::*;
|
||||
|
||||
// TODO hide this plumbing
|
||||
|
||||
#[cfg(not(target_family = "wasm"))]
|
||||
uniffi::include_scaffolding!("shared");
|
||||
|
||||
static CORE: LazyLock<Bridge<AudioAlwaysWorks>> = LazyLock::new(|| Bridge::new(Core::new()));
|
||||
|
||||
/// Ask the core to process an event
|
||||
/// # Panics
|
||||
/// If the core fails to process the event
|
||||
#[cfg_attr(target_family = "wasm", wasm_bindgen::prelude::wasm_bindgen)]
|
||||
#[must_use]
|
||||
pub fn process_event(data: &[u8]) -> Vec<u8> {
|
||||
match CORE.process_event(data) {
|
||||
Ok(effects) => effects,
|
||||
Err(e) => panic!("{e}"),
|
||||
}
|
||||
}
|
||||
|
||||
/// Ask the core to handle a response
|
||||
/// # Panics
|
||||
/// If the core fails to handle the response
|
||||
#[cfg_attr(target_family = "wasm", wasm_bindgen::prelude::wasm_bindgen)]
|
||||
#[must_use]
|
||||
pub fn handle_response(id: u32, data: &[u8]) -> Vec<u8> {
|
||||
match CORE.handle_response(id, data) {
|
||||
Ok(effects) => effects,
|
||||
Err(e) => panic!("{e}"),
|
||||
}
|
||||
}
|
||||
|
||||
/// Ask the core to render the view
|
||||
/// # Panics
|
||||
/// If the view cannot be serialized
|
||||
#[cfg_attr(target_family = "wasm", wasm_bindgen::prelude::wasm_bindgen)]
|
||||
#[must_use]
|
||||
pub fn view() -> Vec<u8> {
|
||||
match CORE.view() {
|
||||
Ok(view) => view,
|
||||
Err(e) => panic!("{e}"),
|
||||
}
|
||||
}
|
||||
5
shared/src/shared.udl
Normal file
5
shared/src/shared.udl
Normal file
@ -0,0 +1,5 @@
|
||||
namespace shared {
|
||||
bytes process_event([ByRef] bytes msg);
|
||||
bytes handle_response(u32 id, [ByRef] bytes res);
|
||||
bytes view();
|
||||
};
|
||||
7
shared/uniffi.toml
Normal file
7
shared/uniffi.toml
Normal file
@ -0,0 +1,7 @@
|
||||
[bindings.kotlin]
|
||||
package_name = "nl.pascaldevink.audio_always_works.shared"
|
||||
cdylib_name = "shared"
|
||||
|
||||
[bindings.swift]
|
||||
cdylib_name = "shared_ffi"
|
||||
omit_argument_labels = true
|
||||
1
shared_types/.gitignore
vendored
Normal file
1
shared_types/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/target
|
||||
14
shared_types/Cargo.toml
Normal file
14
shared_types/Cargo.toml
Normal file
@ -0,0 +1,14 @@
|
||||
[package]
|
||||
name = "shared_types"
|
||||
version = "0.1.0"
|
||||
authors.workspace = true
|
||||
edition.workspace = true
|
||||
license.workspace = true
|
||||
rust-version.workspace = true
|
||||
|
||||
[dependencies]
|
||||
|
||||
[build-dependencies]
|
||||
anyhow.workspace = true
|
||||
crux_core = { workspace = true, features = ["typegen"] }
|
||||
shared = { path = "../shared", features = ["typegen"] }
|
||||
23
shared_types/build.rs
Normal file
23
shared_types/build.rs
Normal file
@ -0,0 +1,23 @@
|
||||
use crux_core::typegen::TypeGen;
|
||||
use shared::AudioAlwaysWorks;
|
||||
use std::path::PathBuf;
|
||||
|
||||
fn main() -> anyhow::Result<()> {
|
||||
println!("cargo:rerun-if-changed=../shared");
|
||||
|
||||
let mut typegen = TypeGen::new();
|
||||
|
||||
typegen.register_app::<AudioAlwaysWorks>()?;
|
||||
|
||||
let output_root = PathBuf::from("./generated");
|
||||
|
||||
typegen.swift("SharedTypes", output_root.join("swift"))?;
|
||||
|
||||
// For Android
|
||||
// typegen.java("com.crux.example.simple_counter", output_root.join("java"))?;
|
||||
|
||||
// For web-shell
|
||||
// typegen.typescript("shared_types", output_root.join("typescript"))?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
1
shared_types/src/lib.rs
Normal file
1
shared_types/src/lib.rs
Normal file
@ -0,0 +1 @@
|
||||
// see build.rs
|
||||
Loading…
x
Reference in New Issue
Block a user