skillok meeting
7158f1fff92dd10a4e1afa8e1ae52046ac326227
Перейти к файлу
Код
meeting cratesaudiobuild.rs
anc macOS: запись звука Zoom и микрофона - Звук Zoom — ScreenCaptureKit с фильтром по приложению us.zoom.xos, сразу 16 кГц моно; микрофон — CoreAudio через cpal. - Info.plist с объяснениями для запросов доступа (микрофон, системный звук), minimumSystemVersion 13.0, сборка .app. - Swift-мост ScreenCaptureKit при одних Command Line Tools: путь к библиотекам совместимости Swift и rpath /usr/lib/swift в build.rs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> 1b62ba2 30 сентября 2026 г.
build.rs
fn main() {
    swift_runtime_search_path();
    // Swift-мост грузит системные библиотеки Swift (libswift_Concurrency и др.)
    // через @rpath — в macOS они лежат в /usr/lib/swift. Тестам и примерам
    // этого крейта; приложение добавляет тот же путь в своём build.rs.
    if std::env::var("CARGO_CFG_TARGET_OS").as_deref() == Ok("macos") {
        println!("cargo:rustc-link-arg=-Wl,-rpath,/usr/lib/swift");
    }
}

/// ScreenCaptureKit подключается через Swift-мост, которому нужны
/// библиотеки совместимости Swift (`libswiftCompatibility56.a` и др.).
/// Крейт ищет их только в тулчейне Xcode; при одних Command Line Tools они
/// лежат в `<xcode-select -p>/usr/lib/swift/macosx` — добавляем этот путь.
fn swift_runtime_search_path() {
    if std::env::var("CARGO_CFG_TARGET_OS").as_deref() != Ok("macos") {
        return;
    }
    let Ok(out) = std::process::Command::new("xcode-select").arg("-p").output() else {
        return;
    };
    let developer = String::from_utf8_lossy(&out.stdout).trim().to_string();
    for dir in [
        format!("{developer}/usr/lib/swift/macosx"),
        format!("{developer}/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx"),
    ] {
        if std::path::Path::new(&dir).is_dir() {
            println!("cargo:rustc-link-search=native={dir}");
        }
    }
}